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

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

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

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

答案1

在这方面,看起来更接近于 bash 的完成行为是使用小expand-or-complete-prefix部件而不是默认值expand-or-complete(或者complete-word如果_expand启用了完成器)

bindkey '^I' expand-or-complete-prefix

_prefix否则,如果当前单词无法完成,但光标左侧的部分可以完成,您可以配置默认的完成器:

至少添加:

zstyle ':completion:*' completer _complete _prefix
set -o completeinword

autoload -Uz compinit
compinit

在你的~/.zshrc

最简单的方法是compinstall根据您的喜好调整完成度。拥有仅有的如果没有从 zsh 完成的所有强大功能中受益,那将是一种浪费。跑步:

autoload compinstall
compinstall

运行compinstall还作为一个选项提供,在zsh-newuser-install您第一次调用zsh而没有~/.zshrc.

您需要_prefix在那里启用完成器。您仍然需要set -o completeinword手动添加,因为目前还没有完成compinstall。其实有一个:

# TODO: _prefix completer should make sure completeinword is set.

该函数中的行compinstall

info zsh _prefix了解详情。

相关内容