书签

你还没有保存任何书签. 要将某篇文章加入书签, 请点击

  • 从零开始打造优雅易用的 macOS 之终端配置

  • 前言

    终端是我们非常常用的工具,如果你拥有足够技巧,它几乎无所不能,可以管理本地文件,可以通过ssh命令管理远程服务器,可以查看进程、端口信息、网络信息等所有你想要的信息,有了Homebrew以后还可以安装大部分你想要安装的软件,这样一个全能的工具,怎么能容忍它像macOS自带的一样难看又不易用,本文的目的就是分享一下终端配置,照着我的步骤一步一步来,你就能拥有同样美观易用的终端。

    最终效果

    最终效果

    具体步骤

    1. 安装iTerm2

    推荐使用Homebrew Cask安装:在终端输入homebrew cask install iterm2即可,稍等片刻即可完成安装,安装完成后打开,会提示我们是不是要移动到“应用程序”文件夹,移动不移动均可,打开后界面是这样的:

    有朋友可能要问,说好的美观呢?不要着急,要一步一步来,我们先解决Zsh的问题,最后再换最合适的配色。

    2. 切换默认shell到Zsh

    shell和终端是两回事,你可以使用不同的终端程序,同样也可以使用不同的shell,macOS默认的shell是bash,但shell远不止bash一种,macOS自带的就有好几种,可以通过终端运行cat /etc/shells查看:
    查看macOS自带的shell
    从列表中可以看到macOS默认已经安装了我们需要的Zsh,输入shell名称就可以进入对应的shell,这里我们不关注其他的shell,我们只关注Zsh,这就是传说中的“终极shell”,毕竟人家名字就是最后一个英文字母Z,很霸气。

    但如果只是通过输入shell名字来切换shell,那每次打开终端都需要手动切换一次,这也太麻烦了,可以通过chsh -s命令来切换默认shell,注意这个命令后面不能只跟shell名称,需要完整路径,我们可以通过which命令获取,然后使用chsh -s命令修改即可:

    chsh -s /bin/zsh
    

    OK,现在我们已经将默认shell切换成了Zsh,可以继续下面的配置了。

    Zsh配置

    传说中,zsh虽然是一个很棒的shell,但配置复杂,让普通用户望而却步,直到后来有一个叫robbyrussell的大神自己配置了一套方案并制作了一个叫Oh My Zsh的工具把自己的配置文件共享了出来才让Zsh逐步流行开来。

    如今Zsh的配置工具已经不止Oh My Zsh一种了,我使用的是配置更为直观方便的antigen。

    安装antigen

    Oh My Zsh比起来,antigen要冷门的多,但经过使用本人发现,antigen更符合我们的操作习惯,如果你使用过Vundle来管理Vim的插件的话,你一定会更偏爱antigen这种管理Zsh插件的方式的,更详细的介绍可以打开项目Github主页查看。

    antigen安装非常简单:

    Github上提供了两种安装方式,使用curl或者git:

    curl -L git.io/antigen > antigen.zsh
    or use git.io/antigen-nightly for the latest version

    但我推荐使用万能的Homebrew来安装,命令如下:

    brew install antigen
    

    执行命令的时候发现报错,告诉我们需要修改/usr/local/share/man/man8目录的所有者:

    经Google搜索决定直接修改/usr/local的所有者,命令如下:

    sudo chown -R 你的用户名 /usr/local
    

    之后再执行brew install antigen就可以完成安装:

    antigen安装成功

    OK,antigen安装成功,下面我们需要做的是:

    • 创建~/.zshrc文件作为zsh的配置文件
    • 初始化antigen的Zsh配置

    Zsh基本配置

    我们直接复制antigen的Github主页的~/.zshrc配置内容模板:

    source /path-to-antigen/antigen.zsh
    
    # Load the oh-my-zsh's library.
    antigen use oh-my-zsh
    
    # Bundles from the default repo (robbyrussell's oh-my-zsh).
    antigen bundle git
    antigen bundle heroku
    antigen bundle pip
    antigen bundle lein
    antigen bundle command-not-found
    
    # Syntax highlighting bundle.
    antigen bundle zsh-users/zsh-syntax-highlighting
    
    # Load the theme.
    antigen theme robbyrussell
    
    # Tell Antigen that you're done.
    antigen apply
    

    需要注意的是,其中path-to-antigen需要换成我们的antigen安装路径,这个路径在安装antigen完成后已经提示我们了:

    因此,需要我们把第一行改为

    source /usr/local/share/antigen/antigen.zsh
    

    下面我们在Home文件夹下新建.zshrc,直接使用vim ~/.zshrc新建即可,然后将上面的模板内容粘贴进去,不过要记得改第一行。

    完成之后在终端输入source ~/.zshrc马上生效,如果有新增加的插件,会显示Installing XXX,这里忘了截图,完成后你的终端就变成了这样:

    很好,antigen的安装和基础配置已经生效了,下面我们需要做的是:

    • 更换喜欢的主题,养眼最重要
    • 安装其他实用插件,增强Zsh

    修改主题

    zsh自带了很多很多主题,使用antigen theme 主题名命令就可以直接在终端中更换,也可以用antigen theme random来更换为随机主题,可以自行体验各种主题。

    作为外貌党,本人尝试了很多主题,最后还是觉得**agnoster**这个主题最符合本人审美,所以一直使用,当然不排除有其他更棒的主题我没有发现,有兴趣的朋友可以再发掘,有能力的朋友还可以自己修改主题,这里我们先看一下agnoster的样子:
    agnoster主题
    不出意外的出现了乱码,因为这个主题需要Melso等字体的支持,现在这台全新安装的系统自然是没有的,我们从这里下载字体,进入页面后,点击“View Raw”即可下载,下载完成后双击安装即可。

    也可以选择其他Powerline字体,可查看这个页面中的“Install a patched font”部分。

    安装完成后需要到iTerm2的设置中修改字体为Melso,

    Preference——>Profiles——>左侧Default——>Text——>下方Change Font

    选择Melso LG M Regular for Powerline,修改完成后,乱码问题就解决了:

    不过我们只是通过antigen theme命令临时更换了主题,如果需要永久更换为agnoster主题,在终端中输入vim ~/.zshrc之后,将主题设置行的antigen theme robbyrussel修改为antigen theme agnoster,保存退出后source ~/.zshrc即可,若看不到效果生效重启终端即可。

    主题的工作就完成了,下面我们需要做的是:

    • 了解Zsh的强大功能
    • 通过插件增强Zsh的功能

    功能展示及插件安装

    通过安装插件,Zsh可以变得非常强大,知乎用户韦易笑的一个回答中非常直观的展示了Zsh的强大,可以点击点击链接查看——为什么说 zsh 是 shell 中的极品? - 韦易笑的回答 - 知乎

    作为普通macOS用户,我们并不需要太多的功能,毕竟功能强大同时也意味着需要额外的配置、额外的学习成本以及额外的系统资源,因此我们需要一个折衷,在这里我们参考知乎上的内容进行功能展示,分享一下本人目前的简单配置,并说明如何通过安装插件实现。

    色彩高亮

    检查命令输入是否错误

    这一插件很实用,能够根据你的输入实时判断命令的正确与否,红色代表错误命令,绿色代表正确命令,白色则为参数、文件名等,如果你敲完了命令,发现是红的,不用运行你就应该知道你哪里输错了。

    色彩高亮

    插件安装方法

    这一功能已经包含在了antigen的模板配置文件中,~/.zshrc中的

     # Syntax highlighting bundle.
     antigen bundle zsh-users/zsh-syntax-highlighting
    

    实现的就是这个功能,无须额外安装。

    命令提示

    越来越聪明的智能提示

    终端下命令非常多,即使是使用终端多年的朋友也无法全部记住,特别是各种参数更是令人眼花缭乱,这个时候命令提示功能就能一展身手了,当你输入时,插件会根据你的历史输入信息自动提示,比如我这一会经常在用vim ~/.zshrc命令来修改Zsh配置,安装这个插件后,我一输入v,插件就根据我的历史输入情况,用浅色显示提示了后面内容:

    命令提示

    这个时候只要按住Ctrl+F键,就可以自动输入提示的内容,非常方便。这个功能对于那些输入次数不多内容又长的命令实在是神器,比如你偶尔需要登录的远程服务器,你输入一个ssh,后面就给你补全了,还有解压缩命令的参数,运行过一次后就能智能提示,再也不怕记不住了。

    插件安装方法

    终端中输入vim ~/.zshrc,在.zshrc中添加如下内容:

    antigen bundle zsh-users/zsh-autosuggestions
    

    保存之后,source ~/.zshrc或者重启终端即可。

    智能补全

    一个Tab走遍天下

    Zsh的补全功能非常强大,不需要插件就能拥有非常好的体验,比如知乎那篇介绍中提到的几个功能,均不需要安装额外的插件,比如你知道目录子目录情况下,可以通过类似这样的命令使用Tab补全:

    补全前

    Tab补全前

    按Tab补全效果

    Tab补全后

    cd命令加Tab你几乎可以在目录里自由跳转,输入cd后按Tab键会出现所有目录,再按一次Tab键则可以在所有目录里跳转,这时不仅可以使用Tab键跳转,还可以使用方向键,避免只能一个一个的跳转,这样文件夹再多也不怕了,这体验真的是好极了。

    放一个动图展示一下:
    Tab自动补全

    对于命令参数的补全功能也非常实用,输入命令 -,按Tab就可以提示该命令包含的参数,用Tab键选中参数后,回车就可以直接输入。

    插件安装方法:

    Zsh自身已经包含了大量补全功能,通过插件可以强化这一功能,终端中输入vim ~/.zshrc,在.zshrc中添加如下内容:

    antigen bundle zsh-users/zsh-completions
    

    保存之后,source ~/.zshrc或者重启终端即可。

    快速跳转

    切换目录随心所欲

    • 利用cd -配合Tab键快速切换历史目录:
      系统自带的bash只能一级一级的切换到上一次查看的目录,Zsh则完全不受此约束,结合Tab键可以快速跳转到之前访问过的任一目录:
      cd -跳转
    • 通过安装z.sh实现更强大的跳转
      如果你是一个运维人员,可能会很需要这样的工具,但对于大部分普通用户而言,需求比较有限,因此我没有安装这一插件,z.sh可以认为是cd -的强化版,后者只能记录本次使用Zsh访问过的目录,而z.sh则可以记住从使用Zsh以来你访问过的目录,并会统计次数形成权重,基于权重让你能够最快的访问到你最经常访问的目录,具体可以查看知乎韦易笑的回答来了解z.sh的强大功能。

    插件安装方法:

    需要z.sh的朋友,只需要在终端中输入vim ~/.zshrc,在.zshrc中添加如下内容:

    antigen bundle rupa/z z.sh
    

    保存之后,source ~/.zshrc或者重启终端即可。

    另外几个Zsh的实用技巧

    • 使用cd命令的时候,若不带参数,cd可以省略
    • 隐藏命令提示符前的主机名用户名:
      只需要在.zshrc中添加DEFAULT_USER="你的用户名",source或者重启终端即可,要注意用户名大小写。

    隐藏主机名用户名

    • man命令彩色显示:
      只需要在.zshrc中添加如下内容:
    #为man命令增加结果高亮显示
    export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking
    export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold
    export LESS_TERMCAP_me=$'\E[0m'           # end mode
    export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode
    export LESS_TERMCAP_so=$'\E[38;5;246m'    # begin standout-mode - info box
    export LESS_TERMCAP_ue=$'\E[0m'           # end underline
    export LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline
    

    之后,source ~/.zshrc或重启终端即可,效果:

    man命令高亮显示

    iTerm配置

    Zsh的主要配置已经完成了,喜欢折腾的朋友可以自己去安装新插件,不喜欢折腾的朋友可以至此为止了,拥有了上面几个简单的插件,Zsh带给我们的用户体验已经非常棒了,现在我们一起来对iTerm进行一些配置,让iTerm与系统更协调。

    更换配色主题

    美观永远是第一位的,看上面这些截图的配色,实在谈不上美观,话不多说,我们动手修改一下,前人已经建立了iTerm主题站,将大量主题打包提供,我们只需下载这个主题包,并通过查看主页选择自己喜欢的主题后导入即可:

    点击访问iTerm2主题站
    iTerm2主题站

    导入方式如下:
    导入iTerm2主题
    很多好看的主题,这里我暂时直接导入了经典的Molokai主题,可以自己进行一些微调。
    导入iTerm2主题

    OK,主题暂不折腾,有时间可以从那么多主题里面慢慢挑。

    Hotkey Window

    终端作为常用工具,时不时呼出一下是很有必要的,如果呼出的界面再能有点逼格那就现好不过了,很久以前我就参考网上教程设置了Hotkey Window,虽然很简单,但逼格十足,所以这里还是要说一下:

    1. 进入Preference设置界面,目前我们已经有了一个Default默认配置,点击左下角的+号,新增一个设置,命名为Hotkey Window
    2. 选择Window选项卡,配置Hotkey Window
      Hotkey Window
      和要的是Style要选择Full-Width Top of Screen,透明度等自己根据喜好设置。
    3. 选择Keys选项卡,为Hotkey Window添加快捷键,我使用的是Command+option+T
      Hotkey Windows设置快捷键
      Hotkey Windows设置快捷键

    设置完成后就可以用全局快捷键Command+option+T在屏幕上方呼出一个半透明的终端窗口,再按一次Command+option+T关闭。

    Hotkey Window效果

    结语

    对终端的配置暂时告一段落,日后有精力可能会增加一下antigen的几个常用命令使用,增加几个Zsh插件的说明,并补充一下使用iTerm2配置快速登录SSH服务器等内容。

    感谢

    本文内容部分参考了以下文章,向作者表示感谢: