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# cat /etc/shells# yum install zsh
本地 Shell 切换到 Zsh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # echo $SHELL # chsh -s /bin/zsh# reboot # echo $SHELL
解决切换到 Zsh 导致 Fcitx + 搜狗输入法无法使用的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # vim ~/.zshrcexport XIM=fcitxexport GTK_IM_MODULE=fcitxexport QT_IM_MODULE=fcitxexport QT4_IM_MODULE=fcitxexport XMODIFIERS="@im=fcitx" # gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gtk/IMModule':<'fcitx'>}" # reboot # cat ~/.config/fcitx/log /crash.log # 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 # sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh) " # vim ~/.zshrcexport LC_ALL=en_US.UTF-8export LC_CTYPE=en_US.UTF-8# source ~/.zshrc
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 # git clone https://github.com/powerline/fonts.git --depth =1# rm -rf fonts# echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699" # vim ~/.zshrcZSH_THEME="agnoster" # source ~/.zshrc
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 # 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 ~/.zshrcplugins=(git zsh-autosuggestions zsh-syntax-highlighting) # source ~/.zshrc
oh-my-zsh 安装 autojump 插件
autojump 是一个命令行工具,它可以使用快捷命令直接跳转到预配置好或者曾经进入过的目录,而不用管当前处在哪个目录下;默认是通过记录目录路径到本地文件或者数据库来实现,所以必须是预配置好或者曾经进入过的目录才能跳转。类似的命令行工具还有 z.lua 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # yum instal autojump autojump-zsh# vim ~/.zshrcplugins=(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 # vim ~/.zshrcprompt_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 # cd git-project# git config --add oh-my-zsh.hide-dirty 1# 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 # yum install guake$ guake -prefs
oh-my-zsh 最终运行效果图