萌生想法
- 作为一名喜欢折腾的程序员,我选择
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