Linux下接触最多的就是Shell了,之前一直用默认的bash,虽然早就听说过zsh,但是大家都知道的,懒。

今天看阮老师博客的时候看到他介绍fish shell,评论刚好有人提到zsh,我想了一下今晚没多少事就搞了一波,现在我已经zsh上瘾了,无法再回到bash了!

上一张我现在的shell截图:

img

就写一篇简单的教程怎么定制zsh吧!

注:Windows用户就别看了,我的环境是Elementary v0.4, 基于Ubuntu 16.04.

1.安装

安装十分简单。

1
sudo apt update && sudo apt install zsh -y

装好zsh后还没完。zsh能展示出很强的效果,但是配置极其麻烦,导致没什么人用。后面Robby Russell这哥们坐不住了,写了oh-my-zsh来帮大家快速上手zsh,这一做不要紧,zsh直接名声远扬了!所以我们肯定得装一波!

使用curl

1
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

当然了,wget也行:

1
sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

跑完就装好了,输入zsh进入zsh环境,然后输入exit退出到bash。

2.主题配置

zsh有许多十分漂亮的主题,选哪个呢?简单,改一下配置文件。配置文件在~/.zshrc,用文本编辑器打开改这行:

1
ZSH_THEME="robbyrussell"

改成random就行,然后关了再开,就可以看到随机切换的主题啦!如果有哪个是你喜欢的,看第一行会告诉你载入了哪个主题,比如xxx.zsh-theme,把random替换成xxx就行。

我选择了agnoster,虽然很漂亮但是有两个小问题:

  1. 终端显示乱码。看了一下官方文档,我缺字体了。直接跑这一串命令:

    1
    2
    3
    4
    5
    6
    7
    8
    
    # clone
    git clone  https://github.com/powerline/fonts.git
    # install
    cd fonts
    ./install.sh
    # clean-up a bit
    cd ..
    rm -rf fonts

    然后到终端设置把字体换成对应后面有Powerline字样的即可,比如我的是Roboto Mono for Powerline

  2. 时间显示

    有些主题有时间显示,真的实用,但是agnoster默认没有,就很气。但是大家都是写代码的,临时照猫画虎实在是太简单了。我翻了几个其他主题的文件,然后就直接改了:

    首先复制一份:

    1
    
    cp ~/.oh-my-zsh/themes/agnoster.zsh-theme ~/.oh-my-zsh/themes/agnoster-ramen.zsh-theme

    我看了一下这个主题的结构,首先加了显示时间的函数:

    1
    2
    3
    
    prompt_time(){
      prompt_segment green black "%D{%m-%d %I:%M:%S}"
    }

    然后在显示阶段改了一下优先级:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    build_prompt() {
      RETVAL=$?
      prompt_status
      prompt_virtualenv
      prompt_time #加上这行,在显示用户名和主机名前面显示时间
      prompt_context
      prompt_dir
      prompt_git
      prompt_bzr
      prompt_hg
      prompt_end
    }

主题就魔改完了,重启生效。

3.插件配置

zsh还有一个特别强大的地方,就是插件。

配置插件很简单,还是自己的配置文件,找到这一行:

1
plugins=()

往括号里面加上插件名字就行,空格分隔。

我选择了如下插件:

  1. git

    默认开启的插件,提供了很多快捷指令,比如gloggit loggfgit fetch等等,很实用。

  2. autojump

    这个插件需要配合,先装上autojump

    1
    
    sudo apt install autojump -y

    然后重启zsh就能用了。怎么用呢,比如说你从/home/study切换到了/etc/nginx/site-available然后又切换到了~/.oh-my-zsh/,你现在想回去/home/study,只需要:

    1
    
    j study

你就回去了!这个插件会寻找你之前所有访问过的路径然后模糊匹配到最接近的一项。这样在多个目录之间跳转就很快很方便。

  1. zsh-syntax-highlighting

    这个插件更是实用,它可以帮你自动检测你的语法是否正确,正确的命令显示为黄色,不正确的显示为红色,正确的路径会带有下划线,错误的就没有,十分舒畅,保证自己每次输入都是正确的!

    这个插件需要手动安装,也不难:

    1
    2
    
    cd ~/.oh-my-zsh/plugins/
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git

就可以启用了。

  1. nvm

    这个就不说了,我的博客依赖于node.js,然后我是用nvm装的,结果这东西的环境变量有问题,这个插件完美的解决了这个问题(我还绕了不少弯路)

  2. extract

    这个插件就如名字所说,是一个解压的插件。解压有什么难的?那么你告诉我.tar.tar.gz.tar.bz2和…………的解压命令都是什么参数。

    这个东西的出现就完美解决了这种背参数的情况,无论是.tar.xxx,还是.zip,只需要

    1
    
    x <filename>

    就解压成功了,轻松随意!

  3. gitignore

    常用git的都知道,总有很多文件,像编译器的项目配置啊,测试文件啊不需要也不应该上传到git版本库里,然后就得写.gitignore文件,手写很烦,http://gitignore.io帮我们解决了这个问题,我们只需要进去填上我们的编辑器/编译器、所使用的语言、开发的平台就能帮我们生成一个.gitignore文件。但是每次开浏览器太麻烦了,所以诞生了这个插件。这个插件就是直接把参数传到这个网站然后返回文件内容,但是用起来真的舒爽:

    1
    
    gi linux c++ visualstudiocode > .gitignore

    结束了,我们开始开发就行了。

总而言之,这些插件的出现都是为了方便我们的开发,你也可以选择更多你喜欢的插件,这里是官方的插件目录,找你熟悉的吧!像Python的lint工具autopep8等都有对应的插件,你一定能配置好你自己独一无二的zsh!

另外,插件在于精不在于多,多了拖慢启动速度,选择那些你经常使用而且的确有很大实用价值的插件就可以了。

4.其他配置

zsh还有很多其他配置,我就简单说一下alias的使用。

进入配置文件,加上这么一行:

1
alias zshconf="vim ~/.zshrc"

这条命令说的是,把zshconf创建为vim ~/.zshrc的别名。保存重启后,当我需要改配置文件的时候,直接打zshconf就行,再也不用vim ~/.zshrc了~

完了吗?没有,zsh包括alias在内还有很多奇妙的玩法,看这里学习吧!

5.切换为默认终端

配置了这么多,每次都要zsh切换进去实在是太麻烦了,zsh已经被我们改造的可以日常使用了,怎么换成默认终端呢?

首先看一下你的zsh安装目录:

1
cat /etc/shells

找到诸如xxx/zsh的目录,比如/bin/zsh

然后运行

1
chsh

跟着提示做就行了。弄完后重启终端模拟器,你的默认shell就变成zsh了!

结果配置了这么多三个小时过去了,也没复习也没干活,一句话总结:

img

大家下篇文章见了~