Bash/zsh 탭 자동 완성: 초기 명령이 주어지면 자동 완성을 사용하여 디렉터리의 특정 파일을 무시합니다.

Bash/zsh 탭 자동 완성: 초기 명령이 주어지면 자동 완성을 사용하여 디렉터리의 특정 파일을 무시합니다.

제가 묻는 질문은 약간 구체적이며 Unix Stackexchange의 다른 자동 완성 질문과 다를 수 있습니다.

다음과 같은 디렉터리가 있다고 가정해 보겠습니다.

-rw-r--r-- 1 hlin117 staff 1.1K Sep 19 13:05 doc.aux
-rw-r--r-- 1 hlin117 staff  26K Sep 19 13:05 doc.log
-rw-r--r-- 1 hlin117 staff 177K Sep 19 13:05 doc.pdf
-rw-r--r-- 1 hlin117 staff  13K Sep 19 13:01 doc.tex

그렇게 하려고 해도 별 소용이 없고 , 일반적인 상황이라면 나도 그렇게 vim doc.pdf하지 않을 것이다 . 대신 자주 하는 편이에요vim doc.logvim doc.aux

vim doc.tex

불행하게도 tab-autocomplete는 단지 doc.tex.

vim \t이것을 입력 하고 디렉토리의 일부 파일을 무시하도록 하는 방법이 있습니까 ?

보다 일반적으로 command 를 입력 하고 명령을 입력하면 디렉터리의 파일을 무시하는 X \t설정을 작성할 수 있습니까?X

참고: 저는 zsh를 사용합니다. bash 및 zsh에 대한 유사한 솔루션이 있는지 확실하지 않습니다.

답변1

zsh에서 "새로운" 완성 시스템을 사용하려면(예: 시스템 compinit에 있는 경우 .zshrc) 다음을 사용하세요.file-patterns스타일.

zstyle ':completion:*:*:vim:*' file-patterns '^*.(aux|log|pdf):source-files' '*:all-files'

완료되지 않은 경우 *.(aux|log|pdf)패턴과 일치하는 파일만 명령줄에서 완료됩니다.vim

*특히 명시적으로 일치하는 명령을 제외한 모든 명령을 일치시키기 위해 명령 이름 패턴을 사용할 수 있습니다 .

답변2

zsh를 사용하지 않고 더 일반적인 옵션이 있기 때문에 여기에 추가합니다.

.bashrcbash 내장 명령을 사용하여 한 줄만 입력하면 됩니다 complete. 예를 들어:

complete -f -X '*.@(aux|log|pdf)' -o plusdirs vim

-f파일 이름을 완성할 위치는 -Xglob 문자열을 사용하여 가능한 선택 항목에서 일치하는 패턴을 필터링 -o plusdirs하고~ 후에목록에 하위 디렉터리를 추가합니다.

관련 정보