모든 별칭에 대해 완성 기능이 작동하지 않는 이유는 무엇입니까?

모든 별칭에 대해 완성 기능이 작동하지 않는 이유는 무엇입니까?

.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그러나 사용하려고 하면 작동하지 않습니다 .emevgvv

:~/$ 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 이를 처리하는 방법에는 두 가지가 있습니다.

  1. 별칭 완성을 gv다른 함수로 설정하세요. 예를 들어, _longopt귀하의 경우:

    complete -F _longopt gv
    
  2. 일반적인 별칭 완성 함수를 작성하고 에서 실행해 보세요 gv. 다행히 누군가가 이미 이 작업을 수행했습니다.https://github.com/cykerway/complete-alias

관련 정보