마우스를 사용하지 않고 명령 출력을 어떻게 사용할 수 있습니까?

마우스를 사용하지 않고 명령 출력을 어떻게 사용할 수 있습니까?

명령 을 실행했고 find이제 결과 출력의 한 줄을 인수로 사용하려고 한다고 상상해 보세요.

$ find ..
fileA
fileB
$ vi <CURSOR>   # now do what to achive:
$ vi fileB      

현재 해결 방법: 더블 클릭문서 B(선택 항목 자동 확장)을 선택하고 마우스 가운데 버튼을 누릅니다(X에 붙여넣기). 작동하지만 마우스를 사용해야 합니다.

가능한 해결책:

  1. 탭 완성 — 대부분의 셸에서 작동하지만 파일에만 적용됩니다.
  2. 껍질에 걸기 - 예scm_breeze;이것은 내가 찾고 있는 것과 거의 비슷하지만 git으로 제한됩니다.
  3. 사용 screen- 매우 가깝지만 여전히 많은 키 입력이 있습니다. 그리고 그것은 screen
  4. bash 변수(GMaster)에 출력 저장 - find 명령이 한 줄을 출력하는 경우에만 작동합니다. 예제와 같이 두 번째 행에 어떻게 액세스할 수 있나요?
  5. 편집기에 명령 보내기(jasonwryan) - 작동하지만 명령을 두 번 실행합니다. 이는 시간이 많이 걸리거나 심지어 불가능할 수도 있습니다.
  6. emacs Dynamic Abbrev Expansion 사용(Arkadiusz Drabczyk, Michael Vehrs) - 이것이 제가 찾고 있는 것이지만 emacs로 시작하고 싶지는 않습니다.

나를 위한 해결책: "동적 약어 확장". 이제 내가 찾고 있는 이 함수의 이름을 알았습니다. 다른 소프트웨어에서 "dabbrev-expand"를 얻는 방법에 대한 새로운 질문을 시작하겠습니다.

https://unix.stackexchange.com/questions/281298/list-of-sofwares-inspired-by-emacs-dabbrev-expand.

나에게 가장 적합한 솔루션의 비전: 프롬프트 모드와 같은 것독사또는이동이 용이함Vim에서는 현재 터미널의 출력에서 ​​텍스트를 추출합니다.

답변1

를 사용하여 emacs잘못된 쉘을 시작하고 명령을 실행하십시오. 출력은 셸 버퍼에서 사용할 수 있으며 일반 명령을 사용하여 선택할 수 있습니다. 또는,

select file in $(find <whatever>); do vi $file; break; done

emacs이 방법은 편집자를 이미 알고 있는 경우 더 실용적입니다. Emacs임의의 "열등한 프로세스"를 실행할 수 있습니다. 입력과 출력이 emacs 버퍼에 연결된 대화형 명령입니다. 따라서 M-x shell-mode잘못된 쉘을 시작하면 명령을 입력 find하고 해당 명령의 출력을 버퍼에서 사용할 수 있습니다.

$ find .. -name "*.sh"
../self.sh
../scheme/random.sh
../scheme/sample.sh

이제 관심 있는 파일로 커서를 이동하고 입력하여 M-x find-file-at-point다른 버퍼에 있는 파일을 편집합니다.

답변2

출력이 필요한 명령을 다시 실행해도 괜찮다면 다음을 파일에 추가하세요 .zshrc.

# Load completion menu feature.
zmodload zsh/complist

# `fc -e :` re-runs the last history entry.
# ${(f)…} splits the string on newlines.
copy-output() compadd ${(f)"$( fc -e : 2> /dev/null )"}

# Create a completion menu widget & bind it.
zle -C copy-output menu-select copy-output 
bindkey '^[!' copy-output

이제 를 눌러 Alt!이전 명령을 다시 실행하고 새 명령줄에 삽입할 내용을 선택할 수 있는 메뉴를 얻을 수 있습니다.

따라서 귀하의 예를 들면 다음과 같습니다.

% find ..
fileA
fileB
% vi <ALT-!>
fileA  fileB

출력은 명령줄 아래에 표시되며 Tab또는 화살표 키를 사용하여 원하는 출력을 선택할 수 있습니다. 여러 개를 선택하려면AltA

답변3

귀하의 요청을 구체적으로 수행하기 위해 Zsh 플러그인을 만들었습니다.https://github.com/psprint/ztrace

관련 정보