Centos7 安装 Zsh 与 Guake

Zsh 介绍

Shell 是在开发人员与服务器间建立一个桥梁,它对外提供一系列命令,让我们得以控制服务器。常用的 Bash 就是 Shell 的一种,也是 Linux 下默认 Shell 程序。Zsh 属于 Shell 中的一种,但比 Bash 好用,而且完全兼容 Bash,拥有及其丰富的插件、强大的命令自动补全能力、以及自定义功能,可以大大提供使用 Linux 的效率。

Zsh 安装

1
2
3
4
5
6
7
8
# 安装依赖
# yum install git curl wget

# 查看是否存在zsh
# cat /etc/shells

# 如果zsh不存在,则安装zsh
# yum install zsh

本地 Shell 切换到 Zsh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 以下操作,不同的Linux用户需要单独安装或者配置(YUM操作除外)

# 查看当前shell
# echo $SHELL

# 切换shell到zsh
# chsh -s /bin/zsh

# 重启系统
# reboot

# 查看当前shell是否切换成功
# echo $SHELL

# 默认的zsh配置文件(自动生成):~/.zshrc

# 提示:切换到zsh后,以前在bash shell里添加的环境变量(~/.bashrc)可能会失效,此时需要在zsh的配置文件(~/.zshrc)中重新添加相关环境变量

解决切换到 Zsh 导致 Fcitx + 搜狗输入法无法使用的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 以下操作,不同的Linux用户需要单独安装或者配置(YUM操作除外)

# 更改zsh的配置文件,添加fcitx相关的环境变量(不同的Linux用户需要单独配置)
# vim ~/.zshrc
export XIM=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export QT4_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

# 设置GNOME的注册表(或者使用dconf-editor可视化工具来设置注册表)
# gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gtk/IMModule':<'fcitx'>}"

# 重启系统
# reboot

# 如果上述方法都无法解决,那么可查看fcitx的错误日志信息来排查问题
# cat ~/.config/fcitx/log/crash.log

# 或者查看fcitx的安装状态,重点查看红色部分(错误)的日志信息
# fcitx-diagnose

Zsh 的一些骚气操作

1
2
3
4
5
6
7
8
9
10
1. 连按两次 Tab 会列出所有的补全列表并直接开始选择,补全项可以使用 ctrl+n/p/f/b 上下左右切换
2. 命令选项补全:在 zsh 中只需要键入 tar -<tab> 就会列出所有的选项和帮助说明
3. 命令参数补全:键入 kill <tab> 就会列出所有的进程名和对应的进程号
4. 更智能的历史命令:在用或者方向上键查找历史命令时,zsh 支持限制查找。比如,输入 ls,然后再按方向上键,则只会查找用过的 ls 命令。而此时使用则会仍然按之前的方式查找,忽略 ls
5. 多个终端会话共享历史记录
6. 智能跳转:安装了 autojump 之后,zsh 会自动记录你访问过的目录,通过 j 目录名 可以直接进行目录跳转,而且目录名支持模糊匹配和自动补全,例如你访问过 hadoop-1.0.0 目录,输入 j hado 即可正确跳转,输入 j --stat 可以看你的历史路径库
7. 目录浏览和跳转:输入 d,即可列出你在这个会话里访问的目录列表,输入列表前的序号,即可直接跳转
8. 在当前目录下输入 .. 或 ... ,或直接输入当前目录名都可以跳转,你甚至不再需要输入 cd 命令了。在你知道路径的情况下,比如 /usr/local/bin 你可以输入 cd /u/l/b 然后按进行补全快速输入
9. 通配符搜索:ls -l **/*.sh,可以递归显示当前目录下的 shell 文件,文件少时可以代替 find,文件多的时候不建议使用
10. 在 ~/.zshrc 中添加 setopt HIST_IGNORE_DUPS 可以消除重复记录,也可以利用 sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history 手动清除

oh-my-zsh 安装

Zsh 虽然炫酷,但是炫酷的背后是复杂的配置,有较高的使用门槛。oh-my-zsh 是一群开源爱好者一起维护的一套 Zsh 配置文件,专门为 Zsh 打造,简化了 Zsh 的使用细节。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 以下操作,不同的Linux用户需要单独安装或者配置(YUM操作除外)

# 安装oh-my-zsh
# sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

# 安装oh-my-zsh后,如果执行命令时提示:warning:cannot set LC_CTYPE locale,添加以下环境变量即可
# vim ~/.zshrc
export LC_ALL=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8

# 使环境变量生效
# source ~/.zshrc

# 默认安装位置:~/.oh-my-zsh

oh-my-zsh 使用 agnoster 主题

oh-my-zsh 各种主题的显示效果可以点击这里查看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 以下操作,不同的Linux用户需要单独安装或者配置(YUM操作除外)

# 安装powerline字体
# git clone https://github.com/powerline/fonts.git --depth=1
# ./fonts/install.sh
# rm -rf fonts

# 验证powerline字体是否安装成功
# echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699"

# 更改zsh的主题,如果将值设为空,表示不使用任何主题,也可以设置为"random",每次打开终端都会随机选择一种主题
# vim ~/.zshrc
ZSH_THEME="agnoster"

# 使配置生效
# source ~/.zshrc

# 字体powerline的安装路径:~/.local/share/fonts

oh-my-zsh 安装自定义插件

oh-my-zsh 提供了完善的插件体系,相关的插件文件在 /.oh-my-zsh/plugins 目录下,默认提供了 100 多种插件,可以根据自己的实际学习和工作环境选择性采用。oh-my-zsh 的插件也是在 /.zshrc 里配置,找到 plugins 关键字,添加自己的插件即可,也可以采用以下的方法安装自定义的插件,系统默认加载了 git 插件。最后,虽然 oh-my-zsh 提供了很多插件,不过也不要贪多,加载大量的插件会拖慢 oh-my-zsh 的运行速度,因此建议按自己的实际需求加载插件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 以下操作,不同的Linux用户需要单独安装或者配置(YUM操作除外)

# 安装自动提示插件
# git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions

# 安装语法高亮插件
# git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting

# 文件授权
# chmod -R 755 ~/.oh-my-zsh/custom/plugins

# 启用插件
# vim ~/.zshrc
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

# 使配置生效
# source ~/.zshrc

# 自定义插件的安装路径:~/.oh-my-zsh/custom/plugins

oh-my-zsh 安装 autojump 插件

autojump 是一个命令行工具,它可以使用快捷命令直接跳转到预配置好或者曾经进入过的目录,而不用管当前处在哪个目录下;默认是通过记录目录路径到本地文件或者数据库来实现,所以必须是预配置好或者曾经进入过的目录才能跳转。类似的命令行工具还有 z.lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 以下操作,不同的Linux用户需要单独安装或者配置(YUM操作除外)

# 安装
# yum instal autojump autojump-zsh

# 启用插件
# vim ~/.zshrc
plugins=(git zsh-autosuggestions zsh-syntax-highlighting autojump)

# 使配置生效
# source ~/.zshrc

# 查看是否运行正常
# j --stat

ZSH 隐藏命令行前面的用户名和主机名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 以下操作,不同的Linux用户需要单独安装或者配置(YUM操作除外)

# 修改ZSH的配置文件,在文件末尾追加以下内容(下面四种方式任意选一种即可)
# vim ~/.zshrc

# 第一种方式:隐藏用户名和主机名
prompt_context() {}

# 第二种方式:使用任意自定义字符串作为用户名和主机名
prompt_context() {
prompt_segment black default "xxxx"
}

# 第三种方式:只保留用户名,隐藏主机名
prompt_context() {
if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
fi
}

# 第四种方式:只保留主机名,隐藏用户名
prompt_context() {
if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
prompt_segment black default "%(!.%{%F{yellow}%}.)$HOST"
fi
}

# 使配置生效
# source ~/.zshrc

解决 oh-my-zsh + git 响应慢 / 卡顿的问题

1
2
3
4
5
6
7
8
# 进入git项目的根目录
# cd git-project

# 设置不读取文件变化信息
# git config --add oh-my-zsh.hide-dirty 1

# 或者不读取任何git信息(速度更快)
# git config --add oh-my-zsh.hide-status 1

解决切换主题后,终端显示乱码的问题

1
2
3
1. 运行终端
2. 导航到菜单栏 --> 编辑 --> 首选项 --> 文本 --> 自定义字体,选择powerline字体,否则agnoster主题的箭头会显示乱码
3. 导航到菜单栏 --> 编辑 --> 首选项 --> 颜色 --> 调色板,选择内置方案,更改终端的不同显示样式(可选操作)

Guake 安装

Guake 是一个下拉式的 GNOME 桌面环境下的终端程序,只需要按一个键就可以调用出终端界面,失去焦点后会自动隐藏掉。当有些时候需要临时执行一两个命令,但是又不想额外启动一个终端的情况下,Guake 是个不错的选择。Guake 还支持快捷键、标签、背景透明、背景图片等特性。

1
2
3
4
5
6
7
8
9
# 安装guake
# yum install guake

# 导航到应用程序 --> 系统工具 --> Guake Terminal,点击即可启动Guake;或者按下F12即可调出Guake,再次按下F12即可隐藏掉

# 配置guake
$ guake-prefs

# 提示:Guake完美支持oh-my-zsh,具体配置方法与上面给出的终端配置(解决终端显示乱码)大致相同

oh-my-zsh 最终运行效果图

oh-my-zsh-preview