내 .bash_aliases
파일에는 다음과 같은 여러 별칭이 있습니다.
shopt -s expand_aliases
alias emx='emacs'
alias em='emacs -nw'
alias gv='gvim'
alias v='vi'
alias ev='evince'
내가 그것을 사용하고 자동 완성을 위해 [tab]을 누르면 작동합니다.
:~/$ emx main-0 [press tab]
main-04.cpp main-05.cpp main-06.cpp main-06-test.cpp
또는
:~/$ em main-0 [press tab]
main-04.cpp main-05.cpp main-06.cpp main-06-test.cpp
그것은 작동합니다(또한 작동합니다) . emx
그러나 사용하려고 하면 작동하지 않습니다 .em
ev
gv
v
:~/$ gv main-0 [press tab]
<nothing happens>
왜? ?
답변1
이것이 혼란스러운 점이라면 expand_aliases
명령을 처리할 때 별칭을 확인할지 여부를 결정하는 것은 완전히 다른 문제입니다.마치다.
각 명령에 대해 완성을 설정한 것 같습니다. complete
(인수 없이) 출력을 확인하세요. gv
협약에 따르면,신기루gv
명령을 실행하므로 PS/EPS/PDF 파일만 검색 하면 완료될 수 있습니다 .
답변2
첫째, Bash 자동 완성은 별칭을 구문 분석하지 않고 명령줄에 입력한 내용만 읽습니다. 명령어 이름을 입력하면 명령어 이름을 읽어줍니다. 별칭을 입력하면 별칭을 읽습니다. 따라서 완료에 관한 한 귀하의 사건과는 아무런 관련이 없습니다 gv
. gvim
실제로는 gv
다음과 같은 정의가 있습니다.배쉬 완료스크립트는 다음과 같습니다
_install_xspec '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))' gv ggv kghostview
complete -F _filedir_xspec gv
따라서 기본적으로 압축되지 않은 ps 및 pdf 파일과만 일치합니다.
AFAIK 이를 처리하는 방법에는 두 가지가 있습니다.
별칭 완성을
gv
다른 함수로 설정하세요. 예를 들어,_longopt
귀하의 경우:complete -F _longopt gv
일반적인 별칭 완성 함수를 작성하고 에서 실행해 보세요
gv
. 다행히 누군가가 이미 이 작업을 수행했습니다.https://github.com/cykerway/complete-alias