값을 기반으로 퍼지 검색을 수행하고 제안을 반환하는 gd
zsh autocomplete라는 명령이 있습니다 . $words[CURRENT]
검색은 제대로 작동하지만 입력한 텍스트가 제안된 접두사가 아니기 때문에 zsh는 어떤 후보도 표시하지 않습니다.
예를 들어
% gd hw
생성될 수 있다oh hello there, world
hw
그러나 zsh는 제안 시작 부분에서 찾을 수 없기 때문에 이를 표시하지 않습니다 .
선택 시 현재 단어를 바꾸도록 zsh에서 제안을 제공하도록 할 수 있습니까?
_gd
다음은 my 라는 파일에 있는 완성 스크립트의 단순화된 버전입니다 fpath
.
#compdef gd
_gd() {
local -a list
clue="$words[CURRENT]"
pattern=""
for i in $(seq $#clue)
do
pattern="$pattern.*${clue[i]}"
done
while read dir
do
list=( $list $dir )
done <<<$(grep "$pattern" ~/.recent-dirs)
_describe gd list
}
답변1
함수 를 제거 _gd
하고 파일에 다음을 추가합니다 .zshrc
.
autoload -Uz compinit
compinit
zstyle ':completion:*' matcher-list 'r:|?=**'
이는 입력하는 내용 사이와 그 주변에 추가 콘텐츠를 허용하도록 완성 코드에 지시합니다. 이를 통해 Zsh는 이제 완료를 흐리게 할 수 있습니다.아무것.
r:X|Y=Z
패턴과 일치하는 겹치지 않는 모든 하위 문자열을 찾아XY
일치 항목으로 만듭니다.X
반품Z
일치가 완료되면 패턴과 일치하는 항목이 있는지 확인하세요.?
임의의 문자와 일치합니다.- 같 거나
X
같으면 임의 개수의 연속 문자와 일치합니다.Y
*
Z
같음 인 경우*
임의 개수의 연속 문자와 일치합니다.와는 별개로무엇이든 일치합니다Y
.Z
같음 인 경우**
임의 개수의 연속 문자와 일치합니다.- 에서는 빈 문자열과 같습니다
r:|?=**
.X
- 기본적으로 Zsh는 이미 입력 끝에 와일드카드를 추가하여 전체 퍼지 일치 주기를 완료합니다.
여기에서 문서를 찾을 수 있습니다:http://zsh.sourceforge.net/Doc/Release/Completion-Widgets.html#Completion-Matching-Control
답변2
좀 더 합리적인 답변을 기다리는 동안 이것은 해킹입니다 ...
내가 한 일은 제안 생성기가 다음과 같은 제안을 생성하도록 하는 것뿐이었습니다.
hw»oh hello there, world
명령(실제로는 함수)이 내가 제어할 수 있으므로 처음부터 쓰레기를 제거하기만 하면 됩니다.
input="${input#*»}"
하지만 올바르게 수행하는 방법을 아는 것이 좋을 것입니다.