Sublime Text에서와 같이 퍼지 완료를 지원하는 쉘이 있습니까?


14

bash를 사용하고 있으며 bash 또는 다른 셸에 플러그인이 있는지 궁금해서 숭고한 텍스트의 탭 완성과 같은 방식 으로이 cat tfnislong.txt+ [tab]완료를 수행 할 수 있습니다 cat ThisFileNameIsSoLong.txt.


왜 그냥 cat Th+ 하지 tab않습니까?
daviewales

1
@daviewales 269 개의 ​​이유를 모두 표시 하시겠습니까?
Fax

답변:


11

나는 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 이 유용하다는 것을 알았습니다 .


6

fzf가 유용 할 수 있습니다 . Ruby로 작성된 범용 퍼지 파인더로 파일, 프로세스, 명령 기록, 자식 분기 등 모든 항목과 함께 사용할 수 있습니다.

설치 스크립트가 CTRL-T쉘의 키 바인딩을 설정 합니다. 다음 GIF는 작동 방식을 보여줍니다.


FZF는 훌륭합니다! 기여해 주셔서 감사합니다. FZF를 발견했을 때 Bash의 퍼지 완성을 쓰기 시작했습니다. 그것은 완벽하게 작동, 난 그냥 호출하기 전에 커서 위치를 저장하는 기억했다 fzf.. (SC tput을) 이상으로 복원 tput rc...
HAKON Hægland

3

다른 답변과 함께 가려면 zsh를 살펴보십시오. bash와 역 호환되므로 대체품으로 사용할 수 있지만 크게 확장 된 기능을 지원하며 그중 하나는 컨텍스트 인식 탭 완성 기능이 크게 향상되었습니다.

zsh Completion FAQ 는 사용 사례에 따라 확장되지만 귀하의 예에 따라 COMPLETE_IN_WORD기능에 가장 관심이 있다고 생각 합니다. 그것은 바람직한 행동은 아니지만 가깝습니다. 요점은 bash를 사용하는 것보다 더 접근하기 쉬운 방법으로 기본 기능을 확장하는 방법이 많이 있다는 것입니다.

다음은 더 구체적으로 원하는 내용과 비슷한 퍼지 일치 확장 프로그램입니다. zsh- 퍼지 매치

몇 가지 아이디어를 얻으려면 zsh 를 관리하고 확장하는 데 필요한 여러 기능이 있는 인기있는 oh-my-zsh 프레임 워크를 살펴볼 수 있습니다 . 원하는 것보다 많지만 플러그인 아래에서 다양한 역할을위한 자동 완성 스크립트에 주목할 것입니다. 기능에 대한 아이디어를 얻습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.