You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Zsh实现Bash式的词中自动补全功能?

Zsh 配置为 Bash 式单词中间补全

要让Zsh实现和Bash一致的单词中间补全行为——基于光标前文本生成补全建议,选中后完整替换当前单词(无残留后缀),可以按以下步骤配置:

1. 开启基础补全选项

首先在~/.zshrc中添加基础配置,允许在单词中间触发补全:

setopt COMPLETE_IN_WORD

2. 自定义补全前缀计算逻辑

Zsh默认会用整个单词作为补全前缀,我们需要覆盖这个逻辑,让它仅以光标前的文本作为前缀。在~/.zshrc中添加以下代码:

autoload -Uz compinit && compinit

# 自定义前缀计算函数,仅取光标到单词开头的文本作为补全前缀
_compute_prefix() {
  local orig_cursor=$CURSOR
  # 从光标位置向前定位到单词起始处
  while (( orig_cursor > 1 )) && [[ "${BUFFER[orig_cursor-1]}" != [[:space:]] ]]; do
    (( orig_cursor-- ))
  done
  # 设置前缀为光标前的单词部分,后缀为光标后的剩余字符
  PREFIX="${BUFFER[orig_cursor,CURSOR]}"
  SUFFIX="${BUFFER[CURSOR+1,-1]}"
}

# 将自定义前缀计算应用到所有补全场景
zstyle ':completion:*' compute-prefix _compute_prefix

3. 确保补全后替换整个单词

为了避免补全后残留原单词的后缀,还需要配置补全器的行为,让它直接替换当前单词的全部内容:

# 配置补全器优先使用前缀匹配,并替换整个单词
zstyle ':completion:*' completer _complete _ignored
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'

验证配置

保存~/.zshrc后,执行以下命令使配置生效:

source ~/.zshrc

现在测试单词中间补全:输入fooedit并将光标移到foo和edit之间,按下Tab键,Zsh会基于foo给出补全建议,选中后会直接替换成匹配项(比如foobar),不会残留edit后缀。

内容的提问来源于stack exchange,提问作者pedrosaurio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:12:13