터미널 버퍼에서 단어 자동 완성

터미널 버퍼에서 단어 자동 완성

vim및 같은 편집기에서는 (vim) 또는 (emacs) emacs같은 단축키를 사용하여 동일한 버퍼에 있는 다른 단어를 사용하여 현재 단어에 대해 자동 완성을 수행할 수 있습니다.C-pM-/

쉘 내에서 동일한 기능을 달성하는 것이 가능합니까? 이전 명령의 출력에 일부 단어가 있는 경우 다른 명령을 입력할 때 해당 단어를 빠르게 자동 완성하고 싶습니다.

명확히 하기 위해 예를 들면 다음과 같습니다.

$ ls
Desktop/  Mail/  music/  osx@  something_with_a_pretty_long_name

$ someth

여기에서 단축키를 누르면 내가 입력하는 내용이 자동으로 완성되도록 하고 싶습니다 something_with_a_pretty_long_name.

편집: 쏴. 파일 이름을 사용하는 것은 내가 추구하는 것에 대한 좋지 않은 예입니다. 다음 두 번째 예를 고려하십시오.

$ cat /var/log/something.log
[19:30] Service started
[19:35] Something else happened

$ happ

내 터미널 버퍼에 표시되었기 때문에 'happ'을 '일어났음'으로 자동 완성할 수 있는 곳입니다. 이것이 내가 추구하는 바가 명확해지기를 바랍니다.

답변1

짧은 대답: 아니요, 일반적으로 쉘과 터미널이 다른 엔터티인 것과 zsh같은 클래식 쉘에서는 그렇지 않습니다.bash

긴 대답: 어쩌면요. 일반적인 일은 명령을 입력하고 키를 누르는 것입니다 Enter. 이제 쉘이 됩니다.포크그리고 지정된 명령을 실행합니다. 그런 다음 껍질에는아니요무슨 일이 일어나고 있는지, 쉘은 터미널에 무엇을 쓸지, 실행된 프로그램이 무엇을 했는지, 다른 프로그램을 시작했는지, 터미널에 쓴지 등을 알지 못합니다.

문제에 대한 가능한 해결책은 두 가지가 있습니다.

  1. 실행된 명령의 모든 출력을 캡처하고 완료 목적으로 어떻게든 사용합니다(할 수 있지만 수행해서는 안 됨)
  2. 지원하는 다른 터미널을 사용하십시오.'완료'"쉘 버퍼"에서.

2에 대한 솔루션은 예를 들어 emacs를 사용하고 터미널에서 작업을 완료하는 데 평소와 같이 multi-term사용하는 것 M입니다 . /다른 터미널에서도 비슷한 솔루션을 제공할 수 있습니다.

그런데 이런 완성이 꼭 필요할까요? 요즘 쉘 완성 기능은 매뉴얼 페이지, 명령, PID, 소켓, 명령 옵션, 원격 시스템의 파일 경로 등을 완성할 수 있습니다. 이는 귀하의 사용 사례에 이미 충분할 수도 있고 특정 문제에 맞게 향상될 수도 있습니다.

답변2

http://www.iterm2.com/#/section/features/autocomplete

iterm2에는 정확히 필요한 것이 있습니다. 나쁜 점은 Mac 용입니다.

그러나 터미널이기 때문에 linux/unix로 ssh를 통해 연결할 수 있으며 여전히 작동합니다.

답변3

당신은 이것을 할 수 있습니다엑스트라tmux를 사용하여 출력을 캡처하고 fzf를 사용하여 퍼지 선택을 해보겠습니다.

엑스트라

답변4

이는 아마도 귀하가 기대하는 답변은 아니지만 일부 요구 사항을 충족할 수 있습니다.

TAB을 사용하여 $PATH(또는 내부 명령)에 있는 명령을 자동 완성할 수 있습니다. 따라서 파일 이름이 실행 파일이고 $PATH에 있으면 자동 완성됩니다.

실행할 수 없는 파일 이름을 자동 완성하려면 " ." -점을 입력한 다음 공백(또는 점 대신에 무엇이든)을 입력하고 파일 이름과 TAB 부분을 입력하면 됩니다. 이렇게 하면 명령을 실행하고 파일 이름을 명령에 대한 인수로 제공한다고 믿도록 쉘을 속일 수 있습니다. Tab 키를 누르면 파일 이름이 자동 완성되지만 앞에 있는 점+공백을 제거해야 할 수도 있습니다.

또 다른 가능성은BASH 완성 기능. 파일 이름뿐만 아니라 그 이상을 자동 완성할 수 있습니다.

관련 정보