在 bash ( \\bash --noprofile --norc
) 中,当脱字符/回车/光标 ( |
) 位于单词 ( ) 中间时l|!@#asdf
,您可以双击 Tab 以显示ls
脱字符 ( ) 之前单词的建议(对于本例)l
。但在 zsh ( \\zsh -f
) 中它根本不起作用 \xe2\x80\x94 你必须在插入符号之后有一个空格才能自动完成插入符号 ( l| !@#asdf
) 之前的单词。
这是 bash 更擅长的几件事之一。谁能告诉我 zsh 中是否有启用此功能的设置?
\n在这方面,看起来更接近 bash 的完成行为是使用expand-or-complete-prefix
小部件而不是默认的expand-or-complete
(或者complete-word
如果_expand
启用了完成器)
bindkey '^I' expand-or-complete-prefix
Run Code Online (Sandbox Code Playgroud)
否则,_prefix
如果当前单词无法完成,但光标左侧的部分可以完成,您可以配置默认的完成器:
至少添加:
zstyle ':completion:*' completer _complete _prefix
set -o completeinword
Run Code Online (Sandbox Code Playgroud)
前
autoload -Uz compinit
compinit
Run Code Online (Sandbox Code Playgroud)
在你的~/.zshrc
。
最简单的方法是根据compinstall
您的喜好调整完成度。仅拥有这些而不受益于 zsh 完成的所有强大功能将是一种浪费。跑步:
autoload compinstall
compinstall
Run Code Online (Sandbox Code Playgroud)
运行compinstall
也作为一个选项提供,zsh-newuser-install
您应该在第一次调用时调用该选项zsh
而没有~/.zshrc
.
您需要_prefix
在那里启用完成器。您仍然需要set -o completeinword
手动添加,因为目前还没有完成compinstall
。其实有一个:
Run Code Online (Sandbox Code Playgroud)# TODO: _prefix completer should make sure completeinword is set.
在那条线compinstall
函数中的行。
info zsh _prefix
详情请参阅。