高级插件

高级插件 #

我们再来了解 4 个非 oh-my-zsh 内置插件,它们 zsh-syntax-highlighting、zsh-autosuggestions、zsh-substring-history-search 和 you-should-use。这两个插件由 zsh 社区开发。

开始介绍前,先将这两个插件全部安装配置完成。

下载 #

下载命令如下所示:

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-history-substring-search ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-history-substring-search
git clone https://github.com/MichaelAquilina/zsh-you-should-use.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/you-should-use

配置 #

打开 .zshrc 完成配置:

plugins=(..., zsh-syntax-highlighting zsh-autosuggestions zsh-history-substring-search you-should-use))

记得执行 source ~/.zshrc 生效配置。

插件 1:zsh-syntax-highlighting #

zsh-syntax-highlighting 是 zsh 的语法高亮插件,如果输入的命令不存在,或者输入 shell 语法不正确,将会自动以红色表示。它的优点就是,当我们在终端输入,实时输入实时反馈。

首先,我们尝试下错误命令,提示效果,如下所示:

再来看看,正确命令提示效果,如下所示:

对,就是这么简单。通过这个插件提供的实时反馈,可以防止我们在命令执行后,才知道输入错了。

插件 2:zsh-autosuggestions #

zsh-autosuggestions 可以说是我最喜欢的插件了。

它的作用是什么呢?

它可用于提示补全建议,当输入字符,默认情况下,它基于我们的历史命令自动提供输入建议。还记得前面提到的,zsh 的历史命令是在不同的会话间共享。现在,再结合 zsh-autosuggestions 插件,简直不要太爽。哈哈。

我们先看下效果,如下所示:

默认情况下,输入右方向键 → 可将建议直接输入终端。

但这个其实体验很差,对于一个双手不想离开键盘中心区域的人而言,通过右键接受提示建议,这简直不能忍啊。是否能改变这个默认快捷键呢?

我的目标是希望通过输入 Ctrl + / 接受建议,配置实现,如下所示:

# <Ctrl+/> 接受 auto-suggestion 的补全建议
bindkey '^_' autosuggest-accept

对!不要怀疑,CTRL+/ 的的字符表示就是 ‘^_’,我们可以通过执行 cat 命令查看,输入 CTRL+/,会到看如下输出。

如果你不知道想要设置的快捷键的字符表示,可以通过这种方式找到。

另外,如果希望 zsh-autosuggestion 不仅支持 history,也支持自动补全的建议提示,即原来那些要输入 tab 才能出现的内容,如子命令、命令选项、目录文件等提示,也能在提示建议的范围中。我们只需增加 completeion 这个配置项。

如下所示:

export ZSH_AUTOSUGGEST_STRATEGY=(history completion)

现在,如果输入时,还没有历史命令可作为建议,会提供类似于目录、参数选项等建议。

类似于如下的效果:

先介绍 zsh-history-substring-search。它的主要用途是什么?

一般情况下,在使用 zsh 时,通过 ↑ 或 ↓ 方向键,能实现类似按前缀匹配补齐的效果。

而如果输入的是中间的字符串,则没法自动补齐。这个插件真是为这个目的而生的。

使用这个插件前,除了启用插件以外,还需要进一步配置下,将 zsh-history-substring-search 提供的能力绑定到快捷按键。

例如,上下方向键 ↑ 和 ↓。

bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down

在生效配置后,测试失败的话,查看文档,其中有介绍:

However, if the observed values don’t work, you can try using terminfo:

bindkey “$terminfo[kcuu1]” history-substring-search-up bindkey “$terminfo[kcud1]” history-substring-search-down

那我们就增加这两行配置吧。

bindkey "$terminfo[kcuu1]" history-substring-search-up
bindkey "$terminfo[kcud1]" history-substring-search-down

除了 ↑ ↓ 按键外,我一般还习惯使用 CTRL+P/N 上下查找历史记录,配置如下:

bindkey '^p' history-substring-search-up
bindkey '^n' history-substring-search-down

如果希望支持 vi 的 jk,配置如下:

bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-up

保存生效配置,测试下最终的成功成果吧。效果如下所示:

另外,高亮样色可配置化的,可通过类似如下语法实现:

export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND=(bg=none,fg=magenta,bold)

设置 background 为 none,即无色,而 front 设置为 magenta,bold。效果如下:

如上的 zsh 的颜色变量,可查看 zsh 仓库文档 发现更多颜色。

color=(
# Codes listed in this array are from ECMA-48, Section 8.3.117, p. 61.
# Those that are commented out are not widely supported or aren't closely
# enough related to color manipulation, but are included for completeness.

# Attribute codes:
  00 none                 # 20 gothic
  01 bold                 # 21 double-underline
  02 faint                  22 normal
  03 italic                 23 no-italic         # no-gothic
  04 underline              24 no-underline
  05 blink                  25 no-blink
# 06 fast-blink           # 26 proportional
  07 reverse                27 no-reverse
# 07 standout               27 no-standout
  08 conceal                28 no-conceal
# 09 strikethrough        # 29 no-strikethrough

# ...

# Bright color codes (xterm extension)
  90 bright-gray            100 bg-bright-gray
  91 bright-red             101 bg-bright-red
  92 bright-green           102 bg-bright-green
  93 bright-yellow          103 bg-bright-yellow
  94 bright-blue            104 bg-bright-blue
  95 bright-magenta         105 bg-bright-magenta
  96 bright-cyan            106 bg-bright-cyan
  97 bright-white           107 bg-bright-white
)

插件 4:you-should-use #

you-should-use 用途是,如果执行的命令存在别名,会自动提示推荐使用的别名;

由于,默认的提示信息在命令输出之前,添加如下配置:

export YSU_MESSAGE_POSITION="after"

它的作用是,实现将提示信息打印在命令输出的最后。

最终效果演示,如下:

总结 #

本文介绍了 4 个 zsh 高级插件,每个插件都有特定的场景用途,希望能给大家的日常工作提升效率。