最近发现了一个不错的插件zsh-autosuggestions,这是oh-my-zsh的一个试用插件,可以实现在终端下动态显示历史输入记录的效果。

在 OSX 和 linux 下默认是bash,但是提示功能不够强大。zsh的功能极其强大,只是配置过于复杂,起初只有极客才在用。后来,程序员robbyrussell创建了一个名为oh-my-zsh的开源项目,然后出现了oh-my-zsh的一个试用插件zsh-autosuggestions。

所以安装 zsh-autosuggestions的步骤 是:安装zsh->安装oh-my-zsh->安装zsh-autosuggestions。本文以 mac 为例进行介绍。

1 安装 zsh

使用命令cat /etc/shells可以查看系统安装了哪些 shell。在 mac 中默认安装了zsh,所以将默认 shell 修改为 zsh。

1
2
echo $SHELL  #查看默认shell
chsh -s /bin/zsh #修改shell为zsh

2 安装 oh my zsh

安装 oh my zsh 之前必须安装zsh,否则会收到如下提示:Zsh is not installed! Please install zsh first!

1
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

3 配置 oh my zsh

oh my zsh的配置文件是~/.zshrc,该文件默认是没有的,可以直接拷贝oh-my-zsh中的模板。命令如下:

1
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

在模板文件zshrc.zsh-template中,默认使用的是robbyrussell主题。

通过命令ls ~/.oh-my-zsh/themes可以查看oh my zsh的所有主题。

1
ls ~/.oh-my-zsh/themes

4 安装配置 zsh-autosuggestions

首先 clone zsh-autosuggestions。

1
git clone git://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions

然后配置zsh-autosuggestions。在~/.zshrc文件中添加如下代码:

1
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

5 配置zsh的命令提示符主题

oh-my-zsh默认的命令提示符样式比较繁琐,可以根据自身需要在robbyrussell主题中配置oh-my-zsh命令提示符的样式。需要注意的是,对于bash,其命令提示符配置在.bashrc文件中。

此外,为了避免oh-my-zsh 更新对我们自定义的配置造成影响,所以可以拷贝一份主题进行配置。

1
cp ~/.oh-my-zsh/themes/robbyrussell.zsh-theme ~/.oh-my-zsh/themes/my_robbyrussell.zsh-theme

在my_robbyrussell.zsh-theme中,PROMPT变量就是用来配置命令提示符的格式的,而在 bash 中,PS1变量是用来配置命令提示符格式的。可以修改PROMPT的值如下:

1
PROMPT='%{$fg_bold[magenta]%}%n%{$fg_bold[cyan]%}@%{$fg[green]%}%m %{$fg_bold[green]%}%p%{$fg[cyan]%}%1d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$fg[magenta]%}%(?..%?%1v)%{$fg_bold[blue]%}? %{$fg[yellow]%}# '

上面代码中出现的变量,如下表所示:

变量 含义
%% 一个’%’
#%). 一个’)’
%y 当前的tty名
%l 当前的tty名,如 pts/1
%M 完整主机名
%m 主机名(在第一个句号之前截断)
%n 当前用户名
%. %c %C 前两个显示相对路径的当前文件夹名,最后一个是绝对路径(也就是说,前两个在家目录下显示’~’,最后那个显示你的用户名),’%’后的数字表示显示几层路径
%N zsh 正在执行的脚本/函数名。如果’%’后跟了数字,似乎还有其他作用
%L 当前shell的层数,可以参考《盗梦空间》的层数
%j 当前正在进行的工作数量
%i 与%!类似:The line number currently being executed in the script, sourced file,
or shell function given by %N. This is most useful for debugging as part of $PS4.
%! 显示当前历史事件号码(也就是打开shell后第几条命令)
%/ %d 显示当前工作路径($pwd)。如果’%’后面是一个整数,它指定显示路径的元件的数量;没有数字就显示整个路径。一个负整数就是指定主目录,即%-1d代表第一部分
%~ 目前的工作目录相对于~的相对路径
%? 返回最后命令的执行结果的代码
%# 用户组,#(普通用户)/%(超级用户)

然后在.zshrc 文件中修改主题:

1
ZSH_THEME="my_robbyrussell"

大功告成!

参考文献

  1. Mac、Linux 安装zsh & ohmyzsh
  2. oh-my-zsh 安装 zsh-autosuggestions 插件
  3. zsh 自定义命令提示符(PS1/ prompt)
  4. zsh 命令提示符 PROMPT
  5. oh-my-zsh终端用户名设置(PS1)