前言

我们好,我是Kira

作为前端猴子,在开发的时分,不可避免运用到终端指令行进行一些操作。但是原生的终端软件非常粗陋,不只不美观,还不好用。

今天就给我们带来我自己Mac终端的终极解决方案:iTerm2 + Zsh + tmux + Powerline


iTerm2

Mac终端终极解决方案一揽子计划

iTerm2是Mac的一款终端模拟器,和原生Terminal比较,它有许多长处和功用。

  • 美观!
  • 多用户profile装备,自定义空间非常大也很便利
  • 多Tab
  • 设置半通明(能够一边开发一边观察前端作用)
  • 热键呼出(这个很牛逼,不论你当时在什么软件下作业,乃至是全屏的作业空间,都能够直接呼出终端)
  • 主动填充、查找、终端内图片显现等等(不过个人觉得用得不多,许多与本解决方案中其他软件供给的功用重复)

装备项

大部分选用默许装备即可,下面列出一些实用装备。

Profiles

Profiles选项下能够装备不同的装备文件,以便不同的用户或许不同的情境下运用不同的成套装备。

  • Profiles -> Window

    Window, 顾名思义,关于窗口的装备。

    Mac终端终极解决方案一揽子计划

    • Style: 窗口巨细和方位

    • Screen: 热键呼出时窗口呈现的方位(哪个屏幕)

    • Space: 热键有效的作业空间(强烈建议All Spaces)

    其他装备诸如是否通明、窗口巨细(行数/列数)、背景图等等按自己喜爱来就行。

  • Profiles -> Keys

    Keys, 热键装备。

    Mac终端终极解决方案一揽子计划

    翻开A hot opens a dedicated window with this profile.选项。

    假如想要装备呼出窗口的热键,点击下面的按钮自己随心配。

其他(To-Do)

等用到的时分再渐渐研讨吧,咱这初级用户暂时用不上。列个To-Do。


Zsh

Mac终端终极解决方案一揽子计划

Zsh是操作体系指令行东西(说是言语也能够)里的佼佼者。它1990年发布的时分就既吸收了ksh在指令式可编程脚本言语上的杰出逻辑设计,又吸收了tcsh丝滑般的交互体会,集众家之长。

我们作为只在程序开发中运用终端做打包、版别控制等简略操作的轻度运用者,最垂青的,是Zsh完善的插件机制以及杰出的生态。这能够让我们DIY自己想要的交互、主题等等。

我们能够在~/.zshrc中编写一些脚本以装备自己的Zsh。

oh-my-zsh

Mac终端终极解决方案一揽子计划

oh-my-zsh是Zsh生态中一款153k Stars的装备办理结构。

它精干啥?

  • 帮忙我们DIY自己的Zsh theme
  • Plugins机制帮助拓展Zsh功用(包含但不限于一些东西的Tab键autocomplete)

装置

curl、wget以及一些其他相似的装置东西都能够,以curl为例:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Tips 国内因为一些众所周知的原因,在装置的时分或许无法衔接,我们能够访问IPAddress,查找raw.githubusercontent.com,拿到ip地址后,修正电脑的hosts文件,把对应联系加上去,如下(ip地址不一定准确,请自行查询):

185.199.108.133 raw.githubusercontent.com

然后我们就能够顺利装置啦。

Notice 装置完之后,原本的.zshrc会重命名为.zshrc.pre-oh-my-zsh,我们能够在装置之后把内容复制到新的.zshrc中。

运用

~/.zshrc中增加如下内容:

export ZSH=$HOME/.oh-my-zsh
plugins=(
    # 这儿填上你想要运用的插件
    git
)
source $ZSH/oh-my-zsh.sh

重启终端软件,或许履行:

source ~/.zshrc

然后就能够快乐地运用oh-my-zsh啦!

Plugins

oh-my-zsh的丰厚插件,使得我们的shell能够得到极大的扩展。一切内置的插件都放在~/.oh-my-zsh/plugins里了。

这儿介绍几个常用的插件吧。

  • git

    供给了惯例git指令的主动填充,还有许多有用的alias和functions,比方ga => git add等等。

  • macos

    供给了许多终端操作MacOS的指令,比方showfiles/hidefiles来显现/躲藏在体系中被躲藏的文件等等。

  • iterm2

    供给了一些终端操作iTerm2的指令,配合上一节引荐的iTerm2能够使某些场景下操作更有功率。

其他各位去plugins文件夹自己探究吧,每个插件都有readme。


主题

后续我们介绍Powerline的运用,不在此赘述直接在oh-my-zsh下装备主题的办法。


tmux

Mac终端终极解决方案一揽子计划

tmux是一个终端复用器。它有两大主要功用:终端复用窗口会话别离

  • 终端复用

    tmux能够复用终端客户端窗口。在一个客户端窗口下,能够创建多个tmux窗口。在一个tmux窗口下,能够创建多个面板,而且自在排布。

  • 窗口会话别离

    要知道这是个啥功用,首要要知道什么是会话。当我们翻开终端客户端,在里面运用指令行与计算机发生暂时的交互,这就叫一次会话。重要的是,正常状况下,会话和窗口是绑定在一同的:窗口翻开,会话就开始了;窗口封闭,会话就over了。

    所以蛋疼的状况来了:你要在一次会话里完成一个杂乱的任务,结果干到一半,窗口噶了。当你匆忙从头翻开窗口的时分,之前干活儿的记录包含干到哪儿了就完全丢了,乃至跑到一半的程序也随着窗口一同噶了,这时你会大叫一声f**k。这就适当于,你在写论文,没保存,忽然电脑崩了,你刚写的一万字没了。

    而tmux能够做到将会话与窗口别离,将会话运行在电脑后台。就算你的窗口遇到问题忽然封闭,你从头翻开的时分,仍然能够经过指令找到之前的会话而且从头接入。

装置

大部分包办理器能够直接装置,以Mac下homebrew为例:

brew install tmux

或许你能够从git上直接下载源代码,然后履行脚本编译装置,详细参阅tmux的github主页。

运用

tmux的运用办法适当简略,根本根据指令和快捷键,由于快捷键能够自在装备,这儿仅叙述指令方法。

发动/退出

发动和退出是两个很简略的指令,如下:

# 发动
tmux
# 退出(封闭一个tmux窗口)
# 留意:假如当时窗口是tmux会话中唯一的窗口,则主动封闭会话
exit

会话办理

tmux能够新建、别离、检查、接入、封闭、切换、重命名会话,详细指令如下:

# 新建会话
# 慎重测验tmux嵌套
tmux new -s <session-name>
# 能够省掉-s部分,假如省掉,则tmux主动从0开始为会话编号
# 别离会话
tmux detach
# 检查会话列表
tmux list-session
# 或许运用缩略指令
tmux ls
# 接入会话
tmux attach -t <session-name>
# 封闭会话
tmux kill-session -t <session-name>
# 切换会话
tmux switch -t <session-name>
# 重命名会话
tmux rename-session -t <old-session-name> <new-session-name>

窗口办理

tmux能够新建、切换、重命名窗口,详细指令如下:

# 新建窗口
tmux new-window -n <window-name>
# 能够省掉-n部分,假如省掉,则tmux主动从0开始为窗口编号
# 切换窗口
tmux select-window -t <window-name>
# 重命名当时窗口
tmux rename-window <new-window-name>

面板办理

tmux能够在窗口中分隔出多个面板而且排布它们,详细指令如下:

# 区分上下面板
tmux split-window
# 区分左右面板
tmux split-window -h
# 将光标移动到上/下/左/右的面板中
tmux select-pane -U/D/L/R
# 交流面板的方位(上或左移/下或右移)
tmux swap-pane -U/D

其他指令

tmux供给了列出一切指令的指令:

# 列出一切tmux指令及其参数
tmux list-commands

有其他需求的指令都能够去查到,或许能够参阅tmux manual page。

装备

tmux支撑各种自定义装备,装备写在~/.tmux.conf

状况栏

tmux底部有一个状况栏,一般左边显现会话和窗口信息,右边显现体系信息,能够自定义:

# status bar
# 背景色
set -g status-bg blue
# 窗口信息格式
set-option -gw window-status-format "#I:#W#F "
# 当时窗口信息格式
set-option -gw window-status-current-format "#I:#{=-20:pane_current_path}#F "
# 右侧信息格式化
set -g status-right "%H:%M:%S %m/%d/%Y %a "
# 状况刷新距离(单位:秒)
set -g status-interval 1

快捷键

  • 前缀键

    tmux有丰厚的快捷键来供给快速的指令操作,而大部分快捷键都需求运用前缀键引发。默许是Ctrl+b,比方别离会话的快捷键是Ctrl+b d,就需求先一起按下Ctrl和b,然后松掉,再按下d,就能够别离会话了。

    前缀键是能够装备的,如下:

    # 设置前缀键
    set -g prefix C-a
    # 解绑默许前缀键
    unbind C-b
    
  • 窗口和面板

    窗口和面板的快捷键绑定,运用bind-key指令,这个指令有几个常用选项:

    -T: 设置key-table,假如不加这个参数,则默许绑定到prefix key table,就是需求运用前缀引发快捷键。

    -n: 等同于-T root,绑定到root key table,无需任何多余操作,就能够运用快捷键。比方bind-key -n M-1,就是直接按下Meta(alt)和1键就能够触发快捷键功用。

    我的快捷键装备,供我们参阅一下:

    # window
    bind-key t new-window # 新建窗口
    bind-key w confirm-before -p "kill-window #W? (y/n)" kill-window # 封闭窗口前承认
    bind-key & choose-window # 挑选窗口
    bind-key -n C-v split-window -v \; select-layout even-vertical # 纵向切开窗口
    bind-key -n C-h split-window -h \; select-layout even-horizontal # 水平切开窗口
    # panel
    bind-key -T prefix x kill-pane # 封闭面板
    # 挑选面板布局
    bind-key -n M-1 select-layout even-horizontal
    bind-key -n M-2 select-layout even-vertical
    bind-key -n M-3 select-layout main-horizontal
    bind-key -n M-4 select-layout main-vertical
    bind-key -n M-5 select-layout tiled
    
  • 其他快捷键

    tmux还有一些其他功用,比方时钟模式、reload装备文件等,我自己是依照下面的绑定的:

    # system
    bind-key -T prefix c clock-mode
    # easy config reload
    bind-key -T prefix r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"
    

Powerline

Powerline是一个状况栏插件,它支撑shell、vim、tmux等等。你能够自定义状况栏显现内容、颜色等等。这儿我们只讲shell下Powerline的装备。

装置

引荐运用pip/pip3装置,如下:

pip install powerline-status

装置完毕后,能够检查装置信息:

pip show powerline-status

找到你的Powerline程序地址,一般来说在~/Library/Python/3.9/bin,取决于你的Python装在哪儿。

在你的~/.zshrc中增加如下两行:

export PATH={你的powerline程序地点目录}:$PATH
. {powerline_root}/bindings/zsh/powerline.zsh

留意:以上代码中{powerline_root}是指,经过pip show powerline-status指令输出的内容的Location字段下的powerline文件夹。

随后:

source ~/.zshrc

Powerline发动!

装备

说装备之前,我们得重视几个东西:主题配色segments

  • segments

    这是Powerline statusline每个末节显现的内容。想要显现啥随你定。

  • 主题

    一整套完整的segments以及其他的装备组成的方案。

  • 配色

    这个不必解释了吧。

装备文件都放在{powerline_root}/config_files里了。

config.json

这个文件规则了Powerline选用什么主题和什么配色。我们只在shell中运用,所以我们只重视其中的shell字段:

Mac终端终极解决方案一揽子计划

(顺便展现了一下我配成的iTerm2+tmux)

一般来说这儿不必改,除非你想要仅在左边展现Powerline statusline。我们直接进对应装备文件进行修正就能够了。

当然,备份是个好习惯,当你把文件改噶了的时分,便利你恢复过来。

colors.json

这个文件枚举了颜色名称和编号的对应联系,之后能够用上。

themes

关于主题的装备,都在这个文件夹了。

  • powerline.json

    包含了一切主题统一运用的一些通用装备,比方距离符用哪个字符、segments函数的参数等等,根本运用默许装备就能够了。

  • shell

    这是我们需求重点重视的文件夹,关于shell下Powerline的主题装备都放在这儿面了。

    __main__.json枚举了shell一切主题通用的公共装备。假如我们选用的是default主题,那我们只需求重视default.json就能够了。

    {
        "segments": {
                "left": [
                        {
                                "function": "powerline.segments.common.env.user",
                                "priority": 30
                        },
                        {
                                "function": "powerline.segments.shell.cwd",
                                "priority": 10
                        },
                ],
                "right": [
                        {
                                "function": "powerline.segments.common.vcs.stash",
                                "priority": 50
                        },
                        {
                                "function": "powerline.segments.common.vcs.branch",
                                "priority": 40
                        }
                ]
        }
    }
    

    清楚明了,这儿装备了default主题显现哪些字段。left和right别离表示左右显现的字段参数。一切支撑的函数都能够在{powerline_root}/segments里找到,不过需求耐性、耐性、耐性,假如没有,抄我的就好了。

    至于continuation.json和select.json是干嘛的,我也没研讨明白,不过我暂时不需求用到。

colorschemes

这儿放了一切配色的装备文件。就不需求细讲了,看文件名和字段名就能看明白。

扩展

Powerline怎么都好,但是对于git状况显现的支撑却差强人意,因而我挖到了一个宝藏扩展:powerline-gitstatus。它丰厚了Powerline的git状况展现segments。

装置

pip install powerline-gitstatus

装备

抄作业吧铁子们:

把下面这段配色装备并入{powerline_root}/config_files/colorschemes/default.json

{
    "groups": {
        "gitstatus": { "fg": "gray10", "bg": "gray4", "attrs": [] },
        "gitstatus_branch_clean": { "fg": "gray10", "bg": "gray4", "attrs": [] },
        "gitstatus_branch_dirty": { "fg": "gray10", "bg": "gray4", "attrs": [] },
        "gitstatus_branch_detached": { "fg": "mediumpurple", "bg": "gray2", "attrs": [] },
        "gitstatus_tag": { "fg": "gray10", "bg": "darkcyan", "attrs": ["bold"] },
        "gitstatus_behind": { "fg": "gray10", "bg": "gray2", "attrs": ["bold"] },
        "gitstatus_ahead": { "fg": "gray10", "bg": "gray2", "attrs": ["bold"] },
        "gitstatus_staged": { "fg": "gray10", "bg": "green", "attrs": ["bold"] },
        "gitstatus_unmerged": { "fg": "gray10", "bg": "brightred", "attrs": [] },
        "gitstatus_changed": { "fg": "gray10", "bg": "mediumorange", "attrs": ["bold"] },
        "gitstatus_untracked": { "fg": "gray10", "bg": "darkestred", "attrs": ["bold"] },
        "gitstatus:divider":  { "fg": "gray10", "bg": "gray4", "attrs": [] }
    }
}

把下面这段segments装备并入{powerline_root}/config_files/themes/shell/default.json中的left字段:

{
    "function": "powerline_gitstatus.gitstatus",
    "priority": 40
}

把下面这段格式化装备并入{powerline_root}/config_files/themes/shell/__main__.json

{
    "segment_data": {
        "gitstatus": {
            "args": {
                "formats": {
                    "branch": "",
                    "tag": "★ {}",
                    "behind": "⬇  {}",
                    "ahead": "⬆  {}",
                    "staged": "● {}",
                    "unmerged": "✖ {}",
                    "changed": "{}",
                    "untracked": "… {}",
                    "stashed": ""
                }
            }
        }
    }
}

古怪的问题

到这儿,我们Mac的终端就成为一个美丽又精干的姑娘了。

但是,纵使姑娘再合心意,也有或许会出一些古怪的问题。

Powerline乱码问题

Powerline中有些距离符需求特别字体的支撑,因而我们要装置Powerline字体(Powerline fonts):

从github上直接clone这个项目,然后在根目录下履行install.sh脚本即可。

随后,翻开我们的iTerm2装备,找到Profiles -> Text,把Use built-in Powerline glyphs勾选上,然后在下面Font选项中挑选你喜欢的Powerline字体。

Mac终端终极解决方案一揽子计划

git指令输出问题

就在装置了这一整套东西之后,我的git指令输出的信息忽然从英文变成了中文,还夹杂着些许乱码,在~/.zshrc中做如下修正:

...
export LESSCHARSET=utf-8
alias git='LANG=en_GB git'
# 前面两行最好放在上面,谁知道放在下面又会呈现什么古怪的问题呢?
source $ZSH/oh-my-zsh.sh
...

然后重载zsh装备文件即可。


结语

我们的Mac终端就装备完成啦!欢迎我们私信交流。


Mac终端终极解决方案一揽子计划

基神镇楼


One More Thing…

介绍一个好玩的指令行小东西:The Fuck。

这个小东西能够对你上次输错的指令进行纠错。

Mac下使用homebrew进行装置:

brew install thefuck

你能够给它装备你想要的别号:

eval $(thefuck --alias {你喜欢的别号})

重启终端。

Mac终端终极解决方案一揽子计划