前言
我们好,我是Kira。
作为前端猴子,在开发的时分,不可避免运用到终端指令行进行一些操作。但是原生的终端软件非常粗陋,不只不美观,还不好用。
今天就给我们带来我自己Mac终端的终极解决方案:iTerm2 + Zsh + tmux + Powerline
。
iTerm2
iTerm2是Mac的一款终端模拟器,和原生Terminal比较,它有许多长处和功用。
- 美观!
- 多用户profile装备,自定义空间非常大也很便利
- 多Tab
- 设置半通明(能够一边开发一边观察前端作用)
- 热键呼出(这个很牛逼,不论你当时在什么软件下作业,乃至是全屏的作业空间,都能够直接呼出终端)
- 主动填充、查找、终端内图片显现等等(不过个人觉得用得不多,许多与本解决方案中其他软件供给的功用重复)
装备项
大部分选用默许装备即可,下面列出一些实用装备。
Profiles
Profiles选项下能够装备不同的装备文件,以便不同的用户或许不同的情境下运用不同的成套装备。
-
Profiles -> Window
Window, 顾名思义,关于窗口的装备。
-
Style: 窗口巨细和方位
-
Screen: 热键呼出时窗口呈现的方位(哪个屏幕)
-
Space: 热键有效的作业空间
(强烈建议All Spaces)
其他装备诸如是否通明、窗口巨细(行数/列数)、背景图等等按自己喜爱来就行。
-
-
Profiles -> Keys
Keys, 热键装备。
翻开
A hot opens a dedicated window with this profile.
选项。假如想要装备呼出窗口的热键,点击下面的按钮自己随心配。
其他(To-Do)
等用到的时分再渐渐研讨吧,咱这初级用户暂时用不上。列个To-Do。
Zsh
Zsh是操作体系指令行东西(说是言语也能够)里的佼佼者。它1990年发布的时分就既吸收了ksh在指令式可编程脚本言语上的杰出逻辑设计,又吸收了tcsh丝滑般的交互体会,集众家之长。
我们作为只在程序开发中运用终端做打包、版别控制等简略操作的轻度运用者,最垂青的,是Zsh完善的插件机制以及杰出的生态。这能够让我们DIY
自己想要的交互、主题等等。
我们能够在~/.zshrc中编写一些脚本以装备自己的Zsh。
oh-my-zsh
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
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字段:
(顺便展现了一下我配成的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字体。
git指令输出问题
就在装置了这一整套东西之后,我的git指令输出的信息忽然从英文变成了中文,还夹杂着些许乱码,在~/.zshrc中做如下修正:
...
export LESSCHARSET=utf-8
alias git='LANG=en_GB git'
# 前面两行最好放在上面,谁知道放在下面又会呈现什么古怪的问题呢?
source $ZSH/oh-my-zsh.sh
...
然后重载zsh装备文件即可。
结语
我们的Mac终端就装备完成啦!欢迎我们私信交流。
基神镇楼
One More Thing…
介绍一个好玩的指令行小东西:The Fuck。
这个小东西能够对你上次输错的指令进行纠错。
Mac下使用homebrew进行装置:
brew install thefuck
你能够给它装备你想要的别号:
eval $(thefuck --alias {你喜欢的别号})
重启终端。