![配置 zsh 在单词中间使用制表符自动补全(忽略光标后的字符),就像在 bash 中一样](https://linux22.com/image/217402/%E9%85%8D%E7%BD%AE%20zsh%20%E5%9C%A8%E5%8D%95%E8%AF%8D%E4%B8%AD%E9%97%B4%E4%BD%BF%E7%94%A8%E5%88%B6%E8%A1%A8%E7%AC%A6%E8%87%AA%E5%8A%A8%E8%A1%A5%E5%85%A8%EF%BC%88%E5%BF%BD%E7%95%A5%E5%85%89%E6%A0%87%E5%90%8E%E7%9A%84%E5%AD%97%E7%AC%A6%EF%BC%89%EF%BC%8C%E5%B0%B1%E5%83%8F%E5%9C%A8%20bash%20%E4%B8%AD%E4%B8%80%E6%A0%B7.png)
在 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
了解详情。