답변:
나는 https://github.com/mgalgs/fuzzy_bash_completion에 대해 알고 있는 많은 쉘 함수입니다 complete
.
나는 우리가 아마 조금 더 잘할 수 있다고 생각합니다. .bashrc 또는 .profile을 터뜨릴 시간 ...
우리가 사용하는 기본 후크는 다음과 같습니다.
complete -o nospace -o filenames -F fuzzypath cd ls cat
-F 옵션은 COMPREPLY
변수 에 옵션이 설정되어있는 탭 완성에 쉘 기능을 사용함을 의미 합니다. 예를 들어 :
함수 fuzzypath () { [-z $ 2] 인 경우 그때 일반적으로 = (`ls`) 그밖에 DIRPATH =`echo "$ 2"| gsed 's | [^ /] * $ ||'` BASENAME =`echo "$ 2"| gsed 's |. * / ||'` FILTER =`echo "$ BASENAME"| gsed 's |. | \ 0. * | g'` COMPREPLY = (`ls $ DIRPATH | grep -i "$ FILTER"| gsed "s | ^ | $ DIRPATH | g"`) fi }
DIRPATH
입력하려는 경로의 마지막 / 앞의 모든 위치 와 BASENAME
현재 커서가있는 위치입니다.
FILTER
퍼지가 나오는 곳입니다. 기본적으로 퍼즈 정규식을 만들기 위해 모든 문자 사이에 부호를 BASENAME
넣고 삽입하십시오 .*
.
나머지는 정규식을 ls와 결합하여 생성 COMPREPLY
합니다. 여기서 할 수있는 더 영리한 일을 찾을 수 있습니다 find
.
또한 http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html 이 유용하다는 것을 알았습니다 .
fzf가 유용 할 수 있습니다 . Ruby로 작성된 범용 퍼지 파인더로 파일, 프로세스, 명령 기록, 자식 분기 등 모든 항목과 함께 사용할 수 있습니다.
설치 스크립트가 CTRL-T
쉘의 키 바인딩을 설정 합니다. 다음 GIF는 작동 방식을 보여줍니다.
fzf
.. (SC tput을) 이상으로 복원 tput rc
...
다른 답변과 함께 가려면 zsh를 살펴보십시오. bash와 역 호환되므로 대체품으로 사용할 수 있지만 크게 확장 된 기능을 지원하며 그중 하나는 컨텍스트 인식 탭 완성 기능이 크게 향상되었습니다.
zsh Completion FAQ 는 사용 사례에 따라 확장되지만 귀하의 예에 따라 COMPLETE_IN_WORD
기능에 가장 관심이 있다고 생각 합니다. 그것은 바람직한 행동은 아니지만 가깝습니다. 요점은 bash를 사용하는 것보다 더 접근하기 쉬운 방법으로 기본 기능을 확장하는 방법이 많이 있다는 것입니다.
다음은 더 구체적으로 원하는 내용과 비슷한 퍼지 일치 확장 프로그램입니다. zsh- 퍼지 매치
몇 가지 아이디어를 얻으려면 zsh 를 관리하고 확장하는 데 필요한 여러 기능이 있는 인기있는 oh-my-zsh 프레임 워크를 살펴볼 수 있습니다 . 원하는 것보다 많지만 플러그인 아래에서 다양한 역할을위한 자동 완성 스크립트에 주목할 것입니다. 기능에 대한 아이디어를 얻습니다.
cat Th
+ 하지tab
않습니까?