配置 zsh 在单词中间使用制表符自动补全(忽略光标后的字符),就像在 bash 中一样

And*_*5_5 5 zsh autocomplete

在 bash ( \\bash --noprofile --norc) 中,当脱字符/回车/光标 ( |) 位于单词 ( ) 中间时l|!@#asdf,您可以双击 Tab 以显示ls脱字符 ( ) 之前单词的建议(对于本例)l。但在 zsh ( \\zsh -f) 中它根本不起作用 \xe2\x80\x94 你必须在插入符号之后有一个空格才能自动完成插入符号 ( l| !@#asdf) 之前的单词。

\n

这是 bash 更擅长的几件事之一。谁能告诉我 zsh 中是否有启用此功能的设置?

\n

Sté*_*las 4

在这方面,看起来更接近 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。其实有一个:

# TODO: _prefix completer should make sure completeinword is set.
Run Code Online (Sandbox Code Playgroud)

在那条线compinstall函数中的行。

info zsh _prefix详情请参阅。