
zsh 완료 및 해당 메뉴의 동작을 수정하려고 합니다. 나는 막혔고 너무 많은 문서를 읽었기 때문에 머리가 어질어질했습니다.
다음은 단지 예시일 뿐입니다. 나는 에 국한되지 않은 답변을 선호합니다 cd
.
완료가 모호하지 않은 경우( ) 선택 메뉴만 표시하도록 zsh를 설정했습니다 zstyle ':completion:*:*:*:*:*' menu select=2
.
나는 별칭을 가지고 있습니다 alias cd='nocorrect cd'
. (공백 없음) 그렇게 하면 cd<TAB>
zsh는 그것이 명확하다고 생각하고 별칭을 완성합니다. zsh는 이것이 모호하지 않다고 생각합니다. 실제로 제가 그렇게 하면 cd<^D>
가능한 완료 항목 하나만 표시됩니다. 내 생각에는 와 같은 다른 완성 옵션이 표시되어야 합니다 cdiff
. 실제로 그렇게 하면 cd<^Xn>
다른 옵션도 보입니다. 이는 또한ZSH 사용자 가이드, 섹션 6.5.2.
나는 무슨 일이 일어나고 있는지 알고 있습니다. 완성자를 로 설정했기 zstyle ':completion:*' completer _expand _expand_alias _complete _ignored _match _correct _approximate _prefix
때문에 해당 별칭을 확장하는 것이 최우선 순위라고 생각하는 이유를 이해할 수 있습니다. 나는 그것이 왜 그런지 알 수 없다.오직옵션.
tag-order
사용자 가이드의 두 번째 예에서와 같이 와 관련이 있다고 생각합니다.섹션 6.4.2. 그러나 이 컨텍스트( :completion::complete:-command-::
)에 대해 설정된 것과 같은 항목이나 상속받을 수 있는 다른 항목이 없습니다 .
내 완료 관련 설정은 모두Github에 있는 이 파일. 거기에서 위로 올라가면 내 zsh 구성 전체를 볼 수 있습니다. 그러나 :completion:
내 파일을 포함하여 이 파일 외부 에 대해 설정된 것이 없으므로 .zshrc
무엇이든 이를 재정의하는 것이 의심됩니다.
그렇다면 제가 원하는 행동을 얻기 위해 무엇을 해야 하는지 누군가 제게 설명해 주실 수 있나요?
참고로 저는 Prezto 프레임워크와 함께 zsh를 사용하고 있는데 문제는 내장된 zsh 기능 및 모듈과 전적으로 관련되어 있기 때문에 관련이 없다고 생각합니다.
일부 출력:
cd<TAB>
: cd
으로 변경되고 nocorrect cd
메뉴가 없습니다.
$ cd<^D>
-- alias --
nocorrect cd
$ cd<^Xn>
-- external command --
cdbs-edit-patch cd-fix-profile cdiff
cd-create-profile cd-iccdump
-- builtin command --
cd
-- shell function --
cdls
-- alias --
cd
-- parameter --
CDPATH cdpath
답변1
@Ilua의 답변작동하지 않았지만 무엇을 검색해야 할지에 대한 몇 가지 아이디어를 얻었고 문제를 해결했습니다.
나에게 필요한 스타일은 regular
. 에서 man zshcompsys
:
regular
This style is used by the _expand_alias completer and bindable command.
If set to ‘true’ (the default), regular aliases will be expanded but only in command position.
If it is set to ‘false’, regular aliases will never be expanded.
If it is set to ‘always’, regular aliases will be expanded even if not in command position.
을 사용했는데 zstyle ':completion:*' regular 'false'
완벽하게 작동합니다.
답변2
accept-exact
나는 당신이 false로 설정하려는 스타일을 찾고 있다고 생각합니다 .
남자 zshcompsys
accept-exact
This is tested for the default tag in addition to the tags valid for the current context. If it is set to `true' and any of the trial matches is the same as the string on the command line, this match will immediately
be accepted (even if it would otherwise be considered ambiguous).