发布于 2026-01-06 7 阅读
0

如何在 Zsh DEV 中设置基于历史的自动完成功能?Mux 呈现的全球展示与讲述挑战赛:展示你的项目!

如何在 Zsh 中设置基于历史记录的自动补全

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

是的,Oh My Zsh太棒了!我从 Bash 切换到 Zsh 时安装的第一个软件就是它,我用了好几年。

在那之后,我意识到在日常使用中,我唯一用到的功能是:

  • 使用方向键实现自动补全基于历史记录的自动补全。

  • 炫酷的多行彩色用户提示符显示工作目录,并在上一个命令执行失败/成功切换颜色

  • 用户提示符处的git仓库信息

  • 该命令由ZSH-z插件z提供

我忍不住觉得 Oh My Zsh 框架的功能远远超出了我的需求。所以我决定卸载 Oh My Zsh,重新安装 Zsh,这样我就可以只配置和安装我需要的功能了。

这是一个分为四部分的系列文章,解释如何在全新的 Zsh 安装中设置这些功能:

Zsh 自定义教程(第一部分)- 自动补全 👈

自定义 Zsh 第 2 部分 - 用户提示

Zsh 自定义教程(第三部分)- Git 信息

自定义 Zsh Pt.4 - ZSH-z 插件


自动补全

Zsh 默认内置了强大的代码补全系统。你需要加载并初始化它才能使用它。如果你想深入了解,有很多内容可以学习,但本文的目标是:

  • 启用标准自动补全功能。

  • 设置基于历史记录的自动补全功能。

如何设置

Zsh 全新安装后,首次登录 shell 时会运行一个辅助程序:



This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

--- Type one of the keys in parentheses --- 


Enter fullscreen mode Exit fullscreen mode

避免使用辅助函数,而是将设置应用到 .zshrc 文件中,具体操作如下:

  • 输入此命令0退出 Zsh 助手,并.zshrc在您的目录中创建一个空白文件$HOME

  • 要加载并初始化 Zsh 代码补全系统,请.zshrc在代码编辑器中打开该文件,并在文件顶部添加以下行:



# AUTOCOMPLETION

# initialize autocompletion
autoload -U compinit && compinit


Enter fullscreen mode Exit fullscreen mode

(了解更多:man zshcompsys并访问Use of compinit

  • 要启用基于历史记录的自动补全功能,首先需要进行一些配置,以改进 Zsh 的历史记录管理,方法是将以下几行添加到.zshrc文件中:


# history setup
setopt SHARE_HISTORY
HISTFILE=$HOME/.zhistory
SAVEHIST=1000
HISTSIZE=999
setopt HIST_EXPIRE_DUPS_FIRST


Enter fullscreen mode Exit fullscreen mode

(请阅读选项和参数说明:man zshoptionsman zshparam

  • 设置好 Zsh 历史记录后,创建快捷键绑定,以便使用上下箭头键浏览指定命令的历史记录:


# autocompletion using arrow keys (based on history)
bindkey '\e[A' history-search-backward
bindkey '\e[B' history-search-forward


Enter fullscreen mode Exit fullscreen mode

上面的代码假设这[A是你的终端模拟器发送的键盘向上箭头的值,这[B是键盘向下箭头的值。

您可以通过在 Zsh 提示符中按 + 进行二次检查更多<Ctrl>信息请参见此处v<up-arrow>

(了解更多信息:man zshzle请访问ZLE BUILTINS[此处](链接)查看按键绑定,并访问[此处](链接history-search-)。)

  • .zshrc在 Zsh shell 中再次加载该文件,输入:


source ~/.zshrc


Enter fullscreen mode Exit fullscreen mode

自动补全功能已准备就绪!

gif01

最终.zshrc文件必须如下所示:



# AUTOCOMPLETION

# initialize autocompletion
autoload -U compinit
compinit

# history setup
setopt APPEND_HISTORY
setopt SHARE_HISTORY
HISTFILE=$HOME/.zhistory
SAVEHIST=1000
HISTSIZE=999
setopt HIST_EXPIRE_DUPS_FIRST
setopt EXTENDED_HISTORY

# autocompletion using arrow keys (based on history)
bindkey '\e[A' history-search-backward
bindkey '\e[B' history-search-forward

# GENERAL

# (bonus: Disable sound errors in Zsh)

# never beep
setopt NO_BEEP


Enter fullscreen mode Exit fullscreen mode

只需这些简单的步骤,自动补全功能即可启用,您的 Zsh shell 也将变得更加强大。

第二部分探讨如何应用简单的配置来改进用户提示。


下一个:

自定义 Zsh 第 2 部分 - 用户提示


实用链接及参考资料:


脚注:

  • 本文最初发表于alldrops.info

  • 关注我的推特账号,即可在你的信息流中获取更多类似帖子和其他实用技巧。

  • 如果您对这篇文章有任何疑问或建议,欢迎在评论区留言讨论。

  • 由于英语并非我的母语,如有错误,敬请谅解。欢迎指正。

  • 非常感谢Eric Nielsen指出 Zsh 历史记录设置中的一些改进之处。

文章来源:https://dev.to/rossijonas/how-to-set-up-history-based-autocompletion-in-zsh-k7o