Mac/Linux下配置iTerm2+zsh+powerline美化终端窗口
Table of Contents
一、Mac/Linux支持哪些shell?
不管是在macOS还是Linux/Unix,默认使用的shell都是bash,但实际上,macOS/Linux/Unix有很多种shell可以用,如zsh、csh、ksh、fish、tcsh等等,默认支持的shell可以查看/etc/shells
文件:
cat /etc/shells
二、为什么要使用zsh?
zsh是很多Mac用户喜欢使用的一个shell,我没有具体了解它相比bash有哪些优势,但就使用的体会来说,比bash好的几个地方是:
- 1)按tab键跳转更智能,看,我输入
cd
后,直接按tab,或者输入想要进的文件夹按tab,它就会自动显示出匹配的目录,并且还可以通过按tab键/上下左右键来选中:
- 2)目录和文件都有颜色,很方便看出哪个是目录,哪个是文件
- 3)样式好看,而且可以自己选择不同的主题样式
- 4)如果当前目录是支持git的,还可以显示git当前是在哪个分支
- 5)回删更方便,按
command+w
(macOS)或ctrl+w
(Linux)可一段一段的回删(如果bash的话,是直接整段回删的,不能一节一节的删除)
三、怎样安装配置zsh?
1、安装zsh
对于Mac,系统本身就自带zsh,在/bin/zsh
下,所以无需要安装。
对于Linux,如果是最小化安装的系统,有可能没有zsh,这时你直接使用以下命令安装就可以:
CentOS:
sudo yum -y install zsh
对于Debian系列Linux(如Debian、Ubuntu)
sudo apt -y install zsh
2、安装Oh My Zsh
由于自己配置zsh比较复杂,所以已经有人写好了配置zsh的工具,这个工具叫 Oh My Zsh,执行下面的命令即可安装(执行该命令必须先安装git: yum -y install git
):
#国外服务器用这个安装
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
#国内服务器如果用上边的命令安装不了,可以用gitee同步的仓库来安装
sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"
由于这属于个性化配置,所以普通用户和超级用户各都要自装一遍,由于Mac一般不直接使用超级用户,而是通过sudo -s
进入超级用户,所以Mac一般情况一只需要普通用户装一遍即可(因为sudo -s
进入超级用户后执行环境还是原来的用户),如果你需要用su
或sudo -i
切换到超级用户,那么mac的超级用户也要再安装一遍,至于Mac到底怎样才算是超级用户,有几种切换到超级用户的方法,请认真看完以下两篇文章:
Mac开启root用户及切换到root用户的方法
Linux为普通用户设置sudo权限及通过sudo切换到root
如果是centos,你有可能遇到这个报错:
Cloning Oh My Zsh...
正克隆到 '/root/.oh-my-zsh'...
fatal: unable to access 'https://github.com/robbyrussell/oh-my-zsh.git/': Peer reports incompatible or unsupported protocol version.
Error: git clone of oh-my-zsh repo failed
如果遇到上述报错,请执行以下命令更新后,再重新安装:
yum update -y nss curl libcurl
安装好之后,光标应该是变成这样(可以换其他样式,往下看):
其实所谓的安装,是下载了 Oh My Zsh 到你的家目录,执行cd ~
即可进入家目录,Oh My Zsh就在.oh-my-zsh
目录中,注意,由于点开头的文件是隐藏的,如果要用ls
显示的话,需要用-a
选项来显示ls -la ~ | grep oh
:
但其实除了下载,它还自动执行了shell切换,即使用chsh
命令执行了chsh -s /bin/zsh
,用于把默认shell设置为zsh,所以网上很多教程说要执行chsh -s /bin/zsh
,其实我实际测试,并不需要,因为安装Oh My Zsh
的时候它已经帮我们执行了,用echo $SHELL
即可检测你当前是什么shell,正常的话应该输出:
/bin/zsh
如果不是zsh,或者你退出再进再检测,发现不是zsh,那就执行一次chsh -s /bin/zsh
命令切换到zsh就行,其实该命令就是修改/etc/passwd
中用户对应的默认shell,比如以下就是root用户在/etc/passwd
文件中的内容,它的最后一段/usr/bin/zsh
就是登录该用户后默认执行的shell
root:x:0:0:root:/root:/usr/bin/zsh
3、配置Oh My Zsh
注意,由于已经切换成了zsh
,所以对于以前开机启动的配置文件~/.bashrc
、/etc/bashrc
等这些文件,都要换成~/.zshrc
、/etc/zshrc
。
对于Mac由于是使用普通用户安装的,当用切换到超级用户时,会报以下错误(Linux由于是普通用户和超级用户各自安装一遍,不会出现这个问题):
[oh-my-zsh] Insecure completion-dependent directories detected:
drwxr-xr-x 16 bruce staff 512 11 5 01:46 /Users/bruce/.oh-my-zsh
drwxr-xr-x 257 bruce staff 8224 11 5 00:20 /Users/bruce/.oh-my-zsh/plugins
drwxr-xr-x 4 bruce staff 128 11 5 00:20 /Users/bruce/.oh-my-zsh/plugins/git
drwxr-xr-x 3 bruce admin 96 11 4 22:14 /usr/local/share/zsh
drwxr-xr-x 4 bruce admin 128 11 4 22:31 /usr/local/share/zsh/site-functions
lrwxr-xr-x 1 bruce admin 39 11 4 22:31 /usr/local/share/zsh/site-functions/_brew -> ../../../Homebrew/completions/zsh/_brew
lrwxr-xr-x 1 bruce admin 44 11 4 22:31 /usr/local/share/zsh/site-functions/_brew_cask -> ../../../Homebrew/completions/zsh/_brew_cask
[oh-my-zsh] For safety, we will not load completions from these directories until
[oh-my-zsh] you fix their permissions and ownership and restart zsh.
[oh-my-zsh] See the above list for directories with group or other writability.
[oh-my-zsh] To fix your permissions you can do so by disabling
[oh-my-zsh] the write permission of "group" and "others" and making sure that the
[oh-my-zsh] owner of these directories is either root or your current user.
[oh-my-zsh] The following command may help:
[oh-my-zsh] compaudit | xargs chmod g-w,o-w
[oh-my-zsh] If the above didn't help or you want to skip the verification of
[oh-my-zsh] insecure directories you can set the variable ZSH_DISABLE_COMPFIX to
[oh-my-zsh] "true" before oh-my-zsh is sourced in your zshrc file.
从报错倒数第二行可以看出,我们在~/.zshrc
中添加ZSH_DISABLE_COMPFIX=true
即可解决这个错误,我把它加在这个位置:
位置不一定要加在这,只要加在source $ZSH/oh-my-zsh.sh
之前即可。
注意,修改.zshrc文件后,要用source ~/.zshrc
重新加载该配置文件才能生效。
如果是Linux普通用户和root用户都要安装的话,一般是重复安装,普通用户装一遍,root用户装一遍,但root用户也可以不安装,直接把普通用户的.zshrc
复制一份到root用户的根目录即可,但因为是root用户加载使用普通用户的配置,所以也需要设置ZSH_DISABLE_COMPFIX=true
,否则进入的时候会报错,并且不会加载该配置。
4、配置zsh主题
在~/.zshrc
文件中,ZSH_THEME="robbyrussell"
这一行即是设置主题的,robbyrussell
就是主题名称,你可以把它换成别的名称,怎么知道有哪些名称可以换呢?执行命令ls -l ~/.oh-my-zsh/themes
出来的都是主题,但要注意主题名称不包括.zsh-theme
后缀,至于每个主题的样式是怎样的,你可以查看该项目的WIKI Oh My Zsh Themes 注意设置后用source ~/.zshrc
重新加载一下。
debian系统如果出现类似这样的错误
zsh (xxxx):12: character not in range
请运行以下命令并选择en_US.UTF8(空格选择,上下键移动,回车确定),然后重启服务器即可解决
sudo dpkg-reconfigure locales
5、修改zsh主题
比如我用agnoster
主题(需要安装powerline字体,往下看)的时候,觉得前面这个“用户名@主机”太长了,主机没必要显示,因为肯定是本机,如果登录了其他远程机器,主题就由那个远程机决定了,跟本机没关系,所以我想要把@Bruces-MacBook-Pro
去掉,并且修改一下背景颜色(黑色太难看了):
把agnoster.zsh-theme
复制一份再改个名字,我改成了agnoster-custom.zsh-theme
,在.zshrc
里引用的时候,引用自定义的那个就好:
cp agnoster.zsh-theme agnoster-custom.zsh-theme
修改前:
修改后:
zsh语法手册:https://wiki.archlinux.org/index.php/zsh
解释一下:001、white、”%B%n%b”分别是三个参数,按顺序分别表示:背景色、前景色(文字颜色)、文字。%n表示当前用户名(比如切换到root,%n就是root),%n被大写的%B和小写的%b包起来,表示加粗(Bold粗体):
prompt_segment 001 white "%B%n%b"
另外,其实Oh-My-Zsh是有个自定义目录的~/.oh-my-zsh/custom
,该目录下有“themes”和“plugins”两个目录,建议自定义的文件放到这里好点,当然你要放在原themes目录也可以。
后记:后来我还是觉得有个主机名好点,又修改了一下,有两种,大家可以直接下载使用:
样式一:点击下载
样式二:点击下载
前面说的背景色、前景色,既可以用颜色英文单词表示,也可以用数字表示,使用以下命令来显示色值表(安装oh-my-zsh后才会有这两个命令):
显示背景色:
spectrum_bls
显示前景色:
spectrum_ls
256种颜色色值表,左侧的数字即为颜色值,共256种(0—255),故颜色值最大为255。(完整图请看好用的vim配置文章的最后,或者你自己执行命令来显示也一样)
当然也可以直接查看我这张色值图(每个格子左下角的三位数即为色值,而中间的是16进制色值,我们要填的是3位数的色值,16进制色值只是标明是什么颜色):
6、omz命令的使用
其实安装OhMyZsh后是有一个omz
命令的(就是OhMyZsh的三个首字母),执行omz
即可查看帮助
Usage: omz <command> [options]
Available commands:
help Print this help message
changelog Print the changelog
plugin <command> Manage plugins
pr <command> Manage Oh My Zsh Pull Requests
reload Reload the current zsh session
theme <command> Manage themes
update Update Oh My Zsh
version Show the version
我们主要用plugin(插件)和theme(主题),运行omz plugin
即可查看它的用法
Usage: omz plugin <command> [options]
Available commands:
disable <plugin> Disable plugin(s)
enable <plugin> Enable plugin(s)
info <plugin> Get information of a plugin
list List all available Oh My Zsh plugins
load <plugin> Load plugin(s)
同理,运行omz theme
即可查看它的用法
Usage: omz theme <command> [options]
Available commands:
list List all available Oh My Zsh themes
set <theme> Set a theme in your .zshrc file
use <theme> Load a theme
四、配置powerline
1、什么是powerline?
Powerline官网
powerline,power是强大的意思,line在这里指statusline(状态行/状态栏),合起来就是强大的状态栏,意思就是能让一些程序,比如vim/zsh/bash/tmux等状态栏变的更好看。
先放一个vim使用powerline后的演示,可以看到vim底部多了一个状态栏,当vim在命令模式时,显示NORMAL
,在插入模式时显示INSERT
,当vim在替换模式(按大写R进入)时,显示REPLACE
,另外我还忘了演示按v
进入可视化操作的时候,会显示VISUAL
,并且还有文件名,当前系统编码等:
zsh使用powerline的演示,主要是不同用户颜色不一样,然后如果是git目录会显示当前分支(其实git是否有文件可以add,commit等等都会显示不同的状态的):
注意:安装powerline后,vim和zsh都可以设置powerline支持,但也可以单独设置,比如我只想让vim使用powerline,而zsh不使用,这是可以的,因为zsh本身也有很多样式,未必没有powerline好看,这个看不同人喜欢的风格。
2、安装powerline
powerline其实就是用python写的一些脚本,所以所谓的安装,就是把它的这些脚本文件下载下来放到随便一个你想放的位置即可。
为了避免多用户使用多份powerline,我们把powerline脚本放在/usr/local
下,就像我们安装软件也放在那下边一样。
powerline是开源的,代码就在github上,所以我们直接把它clone下来即可:
git clone https://github.com/powerline/powerline.git /usr/local/powerline
注意,网上很多用pip
安装的,其实是一样的,最后也是下载这个github上的powerline而已,并且安装的目录会不一样。
如何更新:由于是用git下载的,所以以后偶尔到/usr/local/powerline
目录下git pull
一下即可更新。
我们刚刚从git下载到/usr/local
的powerline的/usr/local/powerline/scripts
目录中有一些命令会被powerline脚本调用的:
├── powerline-config
├── powerline-daemon
├── powerline-lint
├── powerline-release.py
└── powerline-render
我们要把这些命令要添加到环境变量中(添加到你的.bashrc
或.zshrc
中,最后要source一下):
export PATH=/usr/local/powerline/scripts:$PATH
3、安装powerline字体
如果是服务器,可以略过这一步,字体只给有界面的系统用,如果你用的是linux桌面系统比如CentOS或Fodera或Ubuntu等等,才要做这一步
因为powerline会使用一些特殊符号来表示一些状态(比如目录箭头,git库状态等等),所以需要安装它提供的特殊的字体(其实就是普通字体加上了对powerline特殊符号的支持)。
因为Linux的系统字体是放在/usr/share/fonts
目录中的,我们要支持powerline的特殊符号,按道理,把字体文件丢进该目录,然后重建字体缓存即可,实际上也可以这么做。但由于使用powerline是个性化设置,我们一般会把它放在用户的家目录中(这就意味着不同用户各自都要有一份字体在自己的家目录中)。
powerline的字体,也是在github上开源的,我们要安装,就要先把它下载下来(随便下载到哪个文件夹都行,反正安装好后就没用了,安装好后是要把它删除掉的):
git clone https://github.com/powerline/fonts.git
然后进入字体目录:
cd fonts
运行安装字体工具(其实所谓安装,对于linux,就是把它拷贝到用户家目录下的.local/share/fonts
目录下而已(fonts目录默认不存在,是安装的时候它自动创建的),对于mac,就是把它拷贝到~/Library/Fonts/
目录中):
./install.sh
安装好之后,就可以把刚才下载的字体删除了,因为“安装”这个操作已经把字体拷贝到~/.local/share/fonts
(linux)或~/Library/Fonts/
(mac)目录下了。
然后我们还要把一个特殊字体PowerlineSymbols.otf
字体也下载到用户自定义字体目录中,从名字上看,它是用于支持一些符号的字体,但实际上在设置字体的时候又找不到这个字体,所以我也不是很清楚,官方文档是要把它跟github上的那组字体放在一起的:
对于Linux:
wget -O ~/.local/share/fonts/PowerlineSymbols.otf https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf
对于mac:
wget -O ~/Library/Fonts/PowerlineSymbols.otf https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf
然后把字体文件对应的配置文件下载到字体配置文件目录中(这一步mac不用做,Linux要做):
wget -O /etc/fonts/conf.d/10-powerline-symbols.conf https://github.com/powerline/powerline/raw/develop/font/10-powerline-symbols.conf
强制刷新字体缓存(这一步mac不用做,Linux要做):
fc-cache -vf ~/.local/share/fonts/
fc-cache
命令不存在?你需要安装fontconfig
:
yum -y install fontconfig
3、使用powerline
zsh使用powerline风格:
在.zshrc文件末尾引用powerline.zsh
(前面我们是把powerline放在/usr/local下,所以powerline.zsh就在那里),引用方式是开头一个英文句点,然后空格隔开,然后是powerline.zsh的路径(不管你用pip安装还是自已git clone下来都是一样的道理):
. /usr/local/powerline/powerline/bindings/zsh/powerline.zsh
注意,如果你是bash shell,那么也是有bash shell支持的(目录结构是相似的,自己找找就找的到),powerline不只是支持zsh,它还支持bash,fish等等。
然后执行source ~/.zshrc
加载配置文件,加载完,效果就出来了:
然后我们在iterm2的偏好设置里把字体换成powerline的字体(我觉得Roboto Mono for Powerline最好看,你也可以试试其他的,只要powerline结尾的都可以)
切换字体后的效果(可以看到?号已经没了),注意,在.zshrc里引用powerline后,powerline风格将替代zsh的主题风格,也就是说你现在去改zsh的主题,不管你怎么改主题都不会变了,因为已经被powerline替代了,而powerline又只有这一种风格(你可以改配置,但感觉也改不了太多):
由于使用了powerline,Mac系统自带的『终端』也一样会有?号出现,虽然我平时都用iTerm2,但是终端的字体我也会改一下:
由于启用powerline后,就无法修改主题,如果你觉得powerline那种主题不好看,也可以把.zshrc里引入powerline的语句前面加个#号注释掉,然后换一个你喜欢的zsh主题,其中agnoster
是一个比较多人用的powerline风格的主题。
vim使用powerline风格:
对于mac,如果你用brew
安装过vim,那么要先把它卸载了(默认的vim不支持使用powerline):
brew uninstall --force vim
然后重新安装macvim(使用的时候还是用vim
,完全一样使用的):
brew install macvim
然后在.bashrc
或.zshrc
里添加以下命令(相当于把/usr/local/bin/
目录下的所有命令都添加到环境变量,这样brew安装的vim就能覆盖系统自带的vim)
export PATH=/usr/local/bin:$PATH
然后记得source一下
# 如果你没安装过zsh
source ~/.bashrc
# 如果你安装了zsh
source ~/.zshrc
然后用以下命令检查一下它是否支持python:
vim --version | grep +python
只要出现python的,就说明支持python,就可以用powerline(因为powerline是python写的),否则就要重装支持python的vim了:
对于Linux也一样,比如Debian默认的安装方式apt install vim
安装的vim是不支持python的,只能卸载了手动编译(centos yum安装的默认是支持的)
先卸载原来的vim
sudo apt remove vim vim-runtime gvim vim-tiny vim-common vim-gui-common vim-nox
然后安装python-dev
# 对应python2.7
apt install python-dev
# 对应python3.5
apt install python3.5-dev
需要安装,不然下边的编译会报错
checking for tgetent()... configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with --with-tlib.
sudo apt install libncurses5-dev
下载vim源码
git clone https://github.com/vim/vim.git
编译vim
cd vim
./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=yes \
--enable-pythoninterp=yes \
--with-python-config-dir=/usr/lib/python2.7/config \
--enable-python3interp=yes \
--with-python3-config-dir=/usr/lib/python3.5/config \
--enable-perlinterp=yes \
--enable-luainterp=yes \
--enable-gui=gtk2 \
--enable-cscope \
--prefix=/usr/local
# 如果是vim8的话,需要这一句,注意你的未必是vim82,你的版本可能更新
make VIMRUNTIMEDIR=/usr/local/share/vim/vim82
sudo make install
这里需要注意的是:对于debian系统来说,是不能同时支持python2和python3的。所以上面的配置项中,--enable-pythoninterp
和--enable-python3interp
只能开启一个。同时需要注意的是把配置路径替换为自己系统中的。
另外/usr/lib/python2.7/config
这个目录默认是没有的,要安装前边提到的python3.5-dev
或python-dev
才有的,而且目录名字也不是config,而是类似config-3.5m-x86_64-linux-gnu
这样的,具体以你的系统的为准。
以上适用于其他debian系的系统,比如ubuntu。
安装完成之后,再次测试是否生效:
vim --version | grep +python
确定了vim支持python后,我们往vim配置文件.vimrc
里加一句配置即可在vim中使用powerline:
set rtp+=/usr/local/powerline/powerline/bindings/vim
注意这个路径不用死记,你只要记得前面下载下来的powerline里面还有一个叫powerline的文件夹,然后powerline文件夹里又有一个叫bindings的文件夹(绑定的意思),我们要加载的东西,全部在这里面呢,看,除了vim和zsh,还有很多其他的:
注意我们用的时候只要写到bindings下的某个目录即可,比如vim目录。
但这样还没完,你这样加,还是看不到vim有什么变化,还需要在刚刚那句后面加这个配置:
set laststatus=2
添加完全后,保存退出,然后用vim随便打开一个文件,就能看到vim的状态栏了:
注:vim还有另一个插件叫vim-airline,与powerline类似但功能更强大。
五、使用iTerm2预设配色(Mac专用)
注意:这个调色不一定要做,只是个性化设置,你喜欢那些颜色就设置,不喜欢就不设置(保持默认纯黑色)。
下载并解压iTerm2预设配色(主要用于改变iTerm2的文字和背景颜色等,当然你也可以自己调):https://iterm2colorschemes.com。
打开iTerm2,按cmd+i
打开首选项,点击Colors
→Color Presets
→import
,然后进入刚刚解压好的文件夹中的schemes
文件夹,全选,导入,然后你就可以再次点Color Presets
→选择你喜欢的配色。
最终我只在vim中使用了powerline,而没有在zsh中使用powerline(当然powerline字体是必须装的),而是使用了自已修改过的agnoster
主题,因为powerline也只有一种风格,而我又不知道怎么自定义。
六、安装zsh-syntax-highlighting
安装 zsh-syntax-highlighting 后可以区分命令是否存在,敲命令的时候,存在的命令会显示绿色,不存在的命令会显示红色,这样很方便区分:
zsh-syntax-highlighting github地址:zsh-syntax-highlighting。
把zsh-syntax-highlighting
clone下来放到~/.oh-my-zsh/custom/plugins/
中,或者直接用下面这句写好的,执行这句就直接clone到~/.oh-my-zsh/custom/plugins/
中了。
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
这里解释一下${ZSH_CUSTOM:-~/.oh-my-zsh/custom}
,这个可以简化成${var:-string}
,分割一下分别是:${}
、var
、:
、-
(减号,另有+号用法)、string
,var是变量,-
(减号)代表当var为空时,用string替换整个${var:-string}
,否则用var的值替换整个${var:-string}
,当减号改为加号,即${var:+string}
时,则反过来,+
代表var不为空时,用sring替换整个${var:+string}
,如果var为空时,则用var替换整个${var:+string}
,也就意味着这么写,如果var为空,那么就代表整个${var:+string}
为空。现在我们套入,var即为ZSH_CUSTOM
,string为~/.oh-my-zsh/custom
,则意味着如果ZSH_CUSTOM不为空,那么整个${ZSH_CUSTOM:-~/.oh-my-zsh/custom}
就是ZSH_CUSTOM
的值,否则如果ZSH_CUSTOM
为空,那么整个${ZSH_CUSTOM:-~/.oh-my-zsh/custom}
的值为~/.oh-my-zsh/custom
,更多请参考:shell中的括号(小括号,中括号,大括号)
然后在~/.zshrc
中的plugins里添加一下(每个插件名之间用空格隔开):
plugins=(
git zsh-syntax-highlighting
)
退出重新进,或者新开一个tab重新进即有效果。它的效果主要表现在,如果一个命令没有的话它是红色的,有的话会变绿色,另外它会有个下划线,目前就知道这个效果。
七、安装zsh-autosuggestions
先来看看安装zsh-autosuggestions
后的效果:
安装方法与安装zsh-syntax-highlighting
完全一样,只不过插件名字不同而已。
先从github上下载到/.oh-my-zsh/custom/plugins
目录中(这就是所谓的“安装”):
git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
然后在你的~/.zshrrc
文件的plugins
中,添加一个zsh-autosuggestions
即可(与原来的项用空格隔开):
plugins=(
git zsh-syntax-highlighting zsh-autosuggestions
)
最后读取一下新修改的.zshrc
文件:
source ~/.zshrc
安装后,在你打命令的前几个字母后,即可以灰色(或其它颜色)自动显示该命令可能是哪个命令,如果你认为显示出来的是你想要的,那么你可以直接按方向键→
直接采用。自动提示,基本上是根据你输入过的历史来提示的。
注意1:自动提示并非“自动输入”(虽然看起来像是已经输入了),所以你必须按右方向键→
才能自动输入提示的内容。
注意2:可以echo $TERM
看看输出的是否为xterm-256color
,如果不是,那请运行以下语句,该语句会在~/.zshrc
中添加一句export TERM=xterm-256color
:
echo "export TERM=xterm-256color" >> ~/.zshrc #声明终端类型
另外,刚才说到,自动提示的颜色是灰色或其它颜色,以下是设置提示颜色为灰色的命令:
echo "ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=247'" >> ~/.zshrc #设置建议命令的文字颜色
fg=
后面的数字就代表颜色值,至于什么数字代表什么颜色,请查看下表(每个格子左下角的三位数字就是颜色值,前面的0可以不写):
最后,别忘了读取一下修改后的.zshrc
文件才会让配置生效:
source ~/.zshrc
八、zsh安装autojump支持
autojump可用于快速跳转到某个常用的目录:
这样,对于常用的又特别深的目录,只需要简单的敲几个字母即可直接跳转过去,减少了很多不必要的输入。
安装autojump
对于macOS:
brew install autojump
CentOS:
sudo yum -y install autojump
Debian/Ubuntu:
sudo apt-get install autojump
如果Linux无法用yum/apt安装autojump,请手动下载安装(下载到家目录即可):
#国内服务器从gitee中下载
git clone https://gitee.com/mirror-github/autojump.git ~
#国外服务器从github中下载
git clone https://github.com/wting/autojump.git ~
#进入下载好的autojump目录
cd ~/autojump/
#运行安装(因为是python的,所以要先安装python)
./install.py
配置zsh支持autojump
ohmyzsh有一个autojump的插件:
~/.oh-my-zsh/plugins/autojump/autojump.plugin.zsh
要配置zsh支持autojump,我们只需要启用这个插件即可,在.zshrc
的plugins里加上autojump
就行(多个插件空格隔开):
plugins=(
git zsh-syntax-highlighting zsh-autosuggestions autojump
)
然后,对于macOS,直接source一下~/.zshrc
即可:
source ~/.zshrc
但对于centos(其他linux应该也一样),则还需要安装autojump-zsh
(如果你前面是手动安装的autojump,则不用这一步,因为手动安装它会自动执行这一步):
sudo yum -y install autojump-zsh
#国内服务器yum安装可能失败,如果安装失败,就用这个命令
curl -fsSL https://gitee.com/mirror-github/autojump/raw/master/bin/autojump.zsh > /usr/share/autojump/autojump.zsh
然后再source:
source ~/.zshrc
centos安装的autojump-zsh,实际上是往/usr/share/autojump
目录中增加了一个autojump.zsh
文件,在Linux中该目录默认只有autojump.bash
,这是bash用的,不适合zsh,所以我们才需要安装适合zsh用的“autojump-zsh”。
zsh加载autojump的顺序
.zshrc
加载了source $ZSH/oh-my-zsh.sh
$ZSH/oh-my-zsh.sh
加载了autojump的zsh插件:
~/.oh-my-zsh/plugins/autojump/autojump.plugin.zsh
- Linux:
autojump.plugin.zsh
加载了/etc/profile.d/autojump.sh
Mac:autojump.plugin.zsh
加载了/usr/local/etc/autojump.sh
- Linux:autojump.sh加载了
/usr/share/autojump/autojump.zsh
Mac:autojump.sh加载了/usr/local/Cellar/autojump/22.5.1/share/autojump
- autojump.zsh调用了系统中的autojump命令,并且autojump.zsh中有一个叫
j()
的函数,正是因为有这个函数,所以我们在使用autojump的时候,可以直接用j
来表示,这并不需要用alias来设置。其实不止有j()
函数,还有jc()
/jo()
/jco()
,这些命令都可以在终端直接使用,至于是什么意思可以网上查查。
autojump基本用法
前面用的j
命令其实就相当于autojump
命令的alias,就相当于我们在~/.zshrc
中设置了alias j = autojump
,autojump本身是一个独立工具,与zsh和ohmyzsh都没有必然的关系,也就是说,你用bash,一样可以用autojump,也可以自己把autojump设置简写为j
,只不过我们现在用了ohmyzsh,就顺便用它来使用autojump而已。
j -h
:查看autojump的用法。
autojump的原理是自动存储你平时用cd
命令进入过的目录,并对它们自动进行排序,用j -s
可以查看当前已存储的目录(第一列数字是排序权重,从小到大排):
33.2: /usr/local/var/mysql
44.7: /Library
53.9: /Users/bruce/www/personal/PicUploader
56.6: /Users/bruce/PicUploaderHelper-macOS
57.4: /Users/bruce/Downloads
________________________________________
2758: total weight
191: number of entries
57.45: current directory weight
data: /Users/bruce/Library/autojump/autojump.txt
j 关键字
:从已存储的目录列表中搜索关键字
所指定的目录(关键字不区分大小写),如果未匹配到就不会转到到任何目录,如果匹配到了多个,那就会跳转到权限最大的那个目录里。
不在autojump数据库中的目录,你可以用j -a 目录绝对路径
手动添加目录到autojump数据库中。
j -i
(increase)增加当前目录的权重,也可指定增加多少j -i 整数
(不过我测试了这个增加步长好像并不是按指定的数字增加的,我也不知道为什么);
j -d
(decrease)减小当前目录的权重,也可指定减小多少j -d 整数
。
j --purge
清除autojump数据库中不存在的目录(比如目录已经被你删除了)
安装zsh-abbr
我们都知道,alias
命令可以定义一个命令的别名,比如
alias ll="ls -l"
alias gco="git checkout"
定义了以上别名,我们就可以用ll
命令代替ls -l
,用gco
代替git checkout
,但是这种用法有两个缺点:
- 1、用久了别名,自己可能连原始命令都给忘了;
- 2、如果你在博客写文章或者录视频教程发到B站等等,用这种别名命令,很多基础不好的朋友可能都看不懂为什么是这么写的。
为了解决以上两个问题,fish shell引入了abbr功能,而zsh的使用者因为看到fish有这个功能,觉得很不错,于是也开发了让zsh也支持abbr功能的插件:zsh-abbr。
abbr是abbreviation(意思是“缩写”),它也类似alias
能用短名称代替长名称,但不同的是,只要你敲了短名再按一下空格(或回车),它马上会把短名称还原为原始的长名称,这样即不怕自己用久了缩写忘了原始命令,也不怕写的文章和录的视频有人看不懂缩写的意思。
安装zsh-abbr:按照zsh安装自定义插件的惯例,只需要把zsh-abbr的github项目clone到oh-my-zsh自定义插件目录(~/.oh-my-zsh/custom/plugins/
)
git clone https://github.com/olets/zsh-abbr.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-abbr
然后在~/.zshrc
中的以下位置添加一下自定义插件目录名称
plugins=(
git zsh-syntax-highlighting zsh-autosuggestions autojump zsh-abbr
)
最后source一下,让添加的配置生效
source ~/.zshrc
zsh-abbr常用命令:
# 查看abbr命令帮助手册
abbr --help
abbr help
# 添加一个abbr,添加后直接生效,无需source载,以下两个命令等效
abbr add ll="ls -l"
abbr a ll="ls -l"
# 列出当前已设置的abbr,以下两个命令等效
abbr list
abbr
# 删除一个abbr,以下两个命令等效
abbr erase <缩写名>
abbr e <缩写名>
# 重命名一个abbr,以下两个命令等效
abbr rename <旧名> <新名>
abbr r <旧名> <新名>
其它命令请看文档:zsh-abbr v4
好文!收藏了,谢谢博主分享
感谢收藏
写得好详细啊,都是干货,good
感谢你的肯定!
帅气
谢谢!