如何在 Zsh 中设置基于历史记录的自动补全
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
是的,Oh My Zsh太棒了!我从 Bash 切换到 Zsh 时安装的第一个软件就是它,我用了好几年。
在那之后,我意识到在日常使用中,我唯一用到的功能是:
-
使用方向键实现自动补全和基于历史记录的自动补全。
-
炫酷的多行彩色用户提示符显示工作目录,并在上一个命令执行失败/成功后切换颜色。
-
用户提示符处的git仓库信息。
-
该命令由ZSH-z插件
z提供。
我忍不住觉得 Oh My Zsh 框架的功能远远超出了我的需求。所以我决定卸载 Oh My Zsh,重新安装 Zsh,这样我就可以只配置和安装我需要的功能了。
这是一个分为四部分的系列文章,解释如何在全新的 Zsh 安装中设置这些功能:
Zsh 自定义教程(第一部分)- 自动补全 👈
自动补全
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 ---
避免使用辅助函数,而是将设置应用到 .zshrc 文件中,具体操作如下:
-
输入此命令
0退出 Zsh 助手,并.zshrc在您的目录中创建一个空白文件$HOME。 -
要加载并初始化 Zsh 代码补全系统,请
.zshrc在代码编辑器中打开该文件,并在文件顶部添加以下行:
# AUTOCOMPLETION
# initialize autocompletion
autoload -U compinit && compinit
(了解更多:man zshcompsys并访问Use of compinit)
- 要启用基于历史记录的自动补全功能,首先需要进行一些配置,以改进 Zsh 的历史记录管理,方法是将以下几行添加到
.zshrc文件中:
# history setup
setopt SHARE_HISTORY
HISTFILE=$HOME/.zhistory
SAVEHIST=1000
HISTSIZE=999
setopt HIST_EXPIRE_DUPS_FIRST
(请阅读选项和参数说明:man zshoptions和man zshparam)
- 设置好 Zsh 历史记录后,创建快捷键绑定,以便使用上下箭头键浏览指定命令的历史记录:
# autocompletion using arrow keys (based on history)
bindkey '\e[A' history-search-backward
bindkey '\e[B' history-search-forward
上面的代码假设这[A是你的终端模拟器发送的键盘向上箭头的值,这[B是键盘向下箭头的值。
您可以通过在 Zsh 提示符中按 + 进行二次检查,更多<Ctrl>信息请参见此处。v<up-arrow>
(了解更多信息:man zshzle请访问ZLE BUILTINS[此处](链接)查看按键绑定,并访问[此处](链接history-search-)。)
.zshrc在 Zsh shell 中再次加载该文件,输入:
source ~/.zshrc
自动补全功能已准备就绪!
最终.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
只需这些简单的步骤,自动补全功能即可启用,您的 Zsh shell 也将变得更加强大。
第二部分探讨如何应用简单的配置来改进用户提示。
下一个:
自定义 Zsh 第 2 部分 - 用户提示
实用链接及参考资料:
-
Zsh 文档(使用 man -k zsh 列出 Zsh 手册页的各个部分)
脚注:
-
本文最初发表于alldrops.info。
-
关注我的推特账号,即可在你的信息流中获取更多类似帖子和其他实用技巧。
-
如果您对这篇文章有任何疑问或建议,欢迎在评论区留言讨论。
-
由于英语并非我的母语,如有错误,敬请谅解。欢迎指正。
-
非常感谢Eric Nielsen指出 Zsh 历史记录设置中的一些改进之处。