萌生想法
作为一名喜欢折腾的程序员,我选择 mac
作为主力机 , linux
作为测试机 , windows
作为备用机的工作搭配组合。而 mac
和 linux
本出生一家他们都有终端操作的场景。而 terminal
里我选择 oh-my-zsh
最为解释器工具。关于 oh-my-zsh
的安装配置入门这里简单介绍,今天将焦点着重放到它的一个智能提示插件上 zsh-autosuggestions
。
接入插件
首先我们通过 github
安装 zsh
, 然后将 zsh-autosuggestions
放到 custom/plugins目录下
。
shell
复制代码
git clone https://github.com/robbyrussell/oh-my-zsh ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
git clone https://github.com/zsh-users/zsh-autosuggestions.git ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
chsh -s $(which zsh)
只需要上述几步即可完成插件的安装。安装完成之后我们在 ~/.zshrc
中引入 zsh-autosuggestions
即可。 source ~/.zshrc
刷新下环境变量。
功能使用介绍
提示
上面接入 zsh-autosuggestions
插件后我们在敲入命令后就会在历史命令中查找匹配项,并进行高亮提示。比如在重启zsh后我敲过 java -version
, 那么当我再次敲入 ja
这两个字符时他就会匹配到 java -version
这个命令。
这个功能简直太舒服了,试想想我们经常会在终端敲很长串的东西,有的时候命令很长而且是别处 copy
过来的。下次再执行我们就忘记了,又或者有的时候我们敲了很多过滤命令来检测日志输出,如果重新敲一遍的话太浪费时间了。用了他就很方便。
上面只是提示出来并通过不同的背景色提示出来,想要真正的显示该命令我们还需要通过键盘上的 方向键右键
进行选择 。
说实话我觉得 zsh-autosuggestions
默认的这种提示已经很好了。能够提高平时的工作效率,这套默认的打法我也用了很久了。直到我翻开了官方的 README.md
文档。
zsh-autosuggestions 能够像鱼一样快速且无感根据你的输入进行智能提示。
上面演示我们是通过 →
来进行使用提示词的。这里的 →
在 zsh-autosuggestions
中官方称之为 widget
(组件) 。
官方提供了大概7个支持自定义绑定快捷键的小组件功能
序号
指令
功能
1.
autosuggest-accept
使用当前提示
2.
autosuggest-execute
使用并执行当前提示命令
3.
autosuggest-clear
清空当前提示词
4.
autosuggest-fetch
即使提示功能被禁用了,也要获取提示词
5.
autosuggest-disable
禁用提示
6.
autosuggest-enable
开启提示
7.
autosuggest-toggle
开启提示/禁用提示
我的编辑器使用的是 neovim
, 它的主旨就是减少我们手指在键盘上的挪动区域, 然而为了使用 zsh-autosuggestions
的提示词我该必须移动到方向键,这点我觉得很不舒服。有了上面的小组件功能,那么我可以自定义在我的配置文件中。 官方也表示我们可以将自定义的配置文件放在 custom/
文件夹下最好命名为 config.zsh
, 不过经我测试使用默认的example.zsh
也是可以的。
shell
复制代码
bindkey '^ ' autosuggest-accept
只需要上面一段配置放在 custom/example.zsh
文件中重启zsh 既可实现通过 Ctrl + SPACE
来选择建议词了。 这样避免了我们手指在键盘上大幅度移动了。
策略
上面我提到 zsh-autosuggestions
的 默认提示已经很好了,完全符合我们平时的需求。但那仅仅是他的一半的功能,上文我们了解如何定制我们小组件快捷键。下面我要讲的是如何配置他的建议词生成策略。
序号
策略
场景
1
history
该策略也是 zsh-autosuggestions
默认的策略。基于历史命令根据你输入的词根进行分析推荐符合的命令
2
completion
根据 Tab
补全策略来生成建议命令 。 这种就无须依赖历史命令了
3
match_prev_cmd
和 history类似 , 但是他主要从历史命令和最近执行的命令中筛选推荐词。 因为需要记录最近执行的命令所以当 HIST_IGNORE_ALL_DUPS
或者 HIST_DUPS_FIRST
开启是该策略就无法正常使用了。
经过使用我目前使用的是前两种策略,这也是官方推荐的策略。该策略也是按顺序排序,前一个没有获取到推荐词则后一个生效。
shell
复制代码
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
保护自己
有的时候我们会复制大量文本执行。比如有的时候在终端执行接口需要携带登录token。 往往token是很长很大的内容。这个在历史记录里如果被检测关联那么无疑对 buffer
缓冲区造成很大压力。我们可以通过 ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE
设置上限大小。
shell
复制代码
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE =20
禁用提示
智能提示是 zsh-autosuggestions
的亮点,往往亮点太锋芒也是其缺点。有些命令我们不希望他进行提示。我们就可以设置 ZSH_AUTOSUGGEST_COMPLETION_IGNORE
shell
复制代码
ZSH_AUTOSUGGEST_COMPLETION_IGNORE = ("git *")
总结
在巨人肩膀上稍微做点改动都是香的 , 剩下就是绑定快捷键了。关于vim 下的快捷键也是很多模式,这个以后再说。
shell
复制代码
ZSH_AUTOSUGGEST_COMPLETION_IGNORE=("git *")
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
bindkey '^ ' autosuggest-accept
bindkey '\eq' autosuggest-execute