Mac终端-iTerm2

https://www.zhihu.com/question/27447370

https://medium.com/ayuth/iterm2-zsh-oh-my-zsh-the-most-power-full-of-terminal-on-macos-bdb2823fb04c

https://jeremysu0131.github.io/Tool-Mac-iTerm-2-Oh-My-Zsh-Powerlevel9k-設定/

智能选中

双击选中、三击选中整行、四击智能选中(智能规则可配置),选中即复制

巧用 ⌘ 键

按住 ⌘ 键

  • 可以拖拽选中的字符串;
  • 点击 url:调用默认浏览器访问该网址;
  • 点击文件:调用默认程序打开文件;
  • 如果文件名是filename:42,且默认文本编辑器是 MacvimTextmateBBEdit,将会直接打开到这一行;
  • 点击文件夹:在 finder 中打开该文件夹;
  • 同时按住键,可以以矩形选中,类似于 vim 中的⌃ v操作。

快捷键

标签

新建标签:⌘ + t

关闭标签:⌘ + w

切换标签:
⌘ + 数字 ⌘ + 左右方向键

切换全屏:⌘ + enter

查找:⌘ + f

分屏

垂直分屏:⌘ + d

水平分屏:⌘ + ⇧ + d

切换屏幕:
⌘ + ⌥ + 方向键
⌘ + [⌘ + ]

查看历史命令:⌘ + ;

查看剪贴板历史:⌘ + ⇧ + h

其他

清除当前行:⌃ + u

到行首:⌃ + a

到行尾:⌃ + e

前进后退:⌃ + f/b (相当于左右方向键)

上一条命令:⌃ + p

搜索命令历史:⌃ + r

删除当前光标的字符:⌃ + d

删除光标之前的字符:⌃ + h

删除光标之前的单词:⌃ + w

删除到文本末尾:⌃ + k

交换光标处文本:⌃ + t

清屏 1:⌘ + r

清屏 2:⌃ + l

时间线:⌘ + ⇧ + e

自带有哪些很实用的功能/快捷键

⌘ + 数字 在各 tab 标签直接来回切换

选择即复制 + 鼠标中键粘贴,这个很实用

⌘ + f 所查找的内容会被自动复制

⌘ + d 横着分屏 /
⌘ + ⇧ + d 竖着分屏

⌘ + r = clear,而且只是换到新一屏,不会想 clear 一样创建一个空屏

⌃ + u 清空当前行,无论光标在什么位置

输入开头命令后 按 ⌘ + ; 会自动列出输入过的命令

⌘ + ⇧ + h 会列出剪切板历史

可以在 Preferences > keys 设置全局快捷键调出 iterm,这个也可以用过 Alfred 实现

常用的一些快捷键

⌘ + 1 / 2 左右 tab 之间来回切换,这个在 前面 已经介绍过了

⌘← / ⌘→ 到一行命令最左边/最右边 ,这个功能同 C+a / C+e

⌥← / ⌥→ 按单词前移/后移,相当与 C+f / C+b,其实这个功能在 Iterm 中已经预定义好了,⌥f / ⌥b,看个人习惯了

好像就这几个

设置方法如下

当然除了这些可以自定义的也不能忘了 linux 下那些好用的组合

C+a / C+e 这个几乎在哪都可以使用

C+p / !! 上一条命令

C+k 从光标处删至命令行尾 (本来 C+u 是删至命令行首,但 iterm 中是删掉整行)

C+w A+d 从光标处删至字首/尾

C+h C+d 删掉光标前后的自负

C+y 粘贴至光标后

C+r 搜索命令历史,这个较常用

标记跳转

类似编辑器的 mark 工具,iTerm2 也可以在命令行位置设置标记

设置标记:⌘ + ⇧ + m

跳转到上个标记:⌘ + ⇧ + j

多个标记切换:⌘ + ⇧ + 方向键

选中即复制

iterm2 有 2 种好用的选中即复制模式。

一种是用鼠标,在 iterm2 中,选中某个路径或者某个词汇,那么,iterm2 就自 动复制了。
另一种是无鼠标模式,⌘+f,弹出 iterm2 的查找模式,输入要查找并复制的内容的前几个字母,确认找到的是自己的内容之后,输入 tab,查找窗口将自动变化内容,并将其复制。如果输入的是 ⇧+tab,则自动将查找内容的左边选中并复制。

自动完成
输入打头几个字母,然后输入 ⌘+; iterm2 将自动列出之前输入过的类似命令。

剪切历史

输入 ⌘+⇧+h,iterm2 将自动列出剪切板的历史记录。如果需要将剪切板的历史记录保存到磁盘,在 Preferences > General > Save copy/paste history to disk 中设置。

及时回放

某个交互命令会覆写屏幕上的输入,之前的历史信息可能会被覆盖掉,无法查看,iterm2 这个及时回放功能,会记录历史输入,输出,有点类似视频录制。

进入回放:⌘ + opt + b

方向键控制时间 :arrow

退出回放:esc

oh-my-zsh

https://www.zhihu.com/question/29977255

智能补全

cd ~/ 切换目录,敲击两下tab,会列出当前目录下的所有目录,并且可以使用键盘上下左右键来选择要进入的目录。

命令选项补齐,比如输入 docker,然后按 tab,即可显示出 docker 都有哪些命令选项。

智能切换目录

进入一个很深的目录,例如 /var/log/nginx/error/lastyear/may/first/monday, 用 zsh 可以这样输入 cd /v/l/n/e/l/m/f/m 然后按 tab 即可补全整个路径。或者你实现知道当前目录名称,可以直接输入目录,即可进去目录。

在 zsh 下可以记录最近进过的 10 个目录,只需要输入d,然后就可以看到对应的 0-9 的目录,输入cd -数字即可进入对应的目录。

或者直接输入 cd - 然后 tab,会列出最近使用过的 31 个目录。

Tmux

http://louiszhai.github.io/2017/09/30/tmux/

tmux是一款优秀的终端复用软件,它比Screen更加强大,至于如何强大,网上有大量的文章讨论了这点,本文不再重复。tmux之所以受人们喜爱,主要得益于以下三处功能:

  • 丝滑分屏(split),虽然iTem2也提供了横向和竖向分屏功能,但这种分屏功能非常拙劣,完全等同于屏幕新开一个窗口,新开的pane不会自动进入到当前目录,也没有记住当前登录状态。这意味着如果我ssh进入到远程服务器时,iTem2新开的pane中,我依然要重新走一遍ssh登录的老路(omg)。tmux就不会这样,tmux窗口中,新开的pane,默认进入到之前的路径,如果是ssh连接,登录状态也依旧保持着,如此一来,我就可以随意的增删pane,这种灵活性,好处不言而喻。
  • 保护现场(attach),即使命令行的工作只进行到一半,关闭终端后还可以重新进入到操作现场,继续工作。对于ssh远程连接而言,即使网络不稳定也没有关系,掉线后重新连接,可以直奔现场,之前运行中的任务,依旧在跑,就好像从来没有离开过一样;特别是在远程服务器上运行耗时的任务,tmux可以帮你一直保持住会话。如此一来,你就可以随时随地放心地进行移动办公,只要你附近的计算机装有tmux(没有你也可以花几分钟装一个),你就能继续刚才的工作。
  • 会话共享(适用于结对编程或远程教学),将 tmux 会话的地址分享给他人,这样他们就可以通过 SSH 接入该会话。如果你要给同事演示远程服务器的操作,他不必直勾勾地盯着你的屏幕,借助tmux,他完全可以进入到你的会话,然后静静地看着他桌面上你风骚的键盘走位,只要他愿意,甚至还可以录个屏。
1
2
# 安装tmux
brew install tmux

会话

新建会话

新建一个tmux session非常简单,语法为tmux new -s session-name,也可以简写为tmux,为了方便管理,建议指定会话名称,如下。

1
2
tmux # 新建一个无名称的会话
tmux new -s demo # 新建一个名称为demo的会话

断开当前会话

会话中操作了一段时间,我希望断开会话同时下次还能接着用,怎么做?此时可以使用detach命令。

1
tmux detach # 断开当前会话,会话在后台运行

也许你觉得这个太麻烦了,是的,tmux的会话中,我们已经可以使用tmux快捷键了。使用快捷键组合Ctrl+b + d,三次按键就可以断开当前会话。

进入之前的会话

断开会话后,想要接着上次留下的现场继续工作,就要使用到tmux的attach命令了,语法为tmux attach-session -t session-name,可简写为tmux a -t session-nametmux a。通常我们使用如下两种方式之一即可:

1
2
tmux a # 默认进入第一个会话
tmux a -t demo # 进入到名称为demo的会话

关闭会话

会话的使命完成后,一定是要关闭的。我们可以使用tmux的kill命令,kill命令有kill-panekill-serverkill-sessionkill-window共四种,其中kill-session的语法为tmux kill-session -t session-name。如下:

1
2
tmux kill-session -t demo # 关闭demo会话
tmux kill-server # 关闭服务器,所有的会话都将关闭

查看所有的会话

管理会话的第一步就是要查看所有的会话,我们可以使用如下命令:

1
2
tmux list-session # 查看所有会话
tmux ls # 查看所有会话,提倡使用简写形式

如果刚好处于会话中怎么办?别担心,我们可以使用对应的tmux快捷键Ctrl+b + s,此时tmux将打开一个会话列表,按上下键(⬆︎⬇︎)或者鼠标滚轮,可选中目标会话,按左右键(⬅︎➜)可收起或展开会话的窗口,选中目标会话或窗口后,按回车键即可完成切换。

Tmux快捷指令

关于快捷指令,首先要认识到的是:tmux的所有指令,都包含同一个前缀,默认为Ctrl+b,输入完前缀过后,控制台激活,命令按键才能生效。前面tmux会话相关的操作中,我们共用到了两个快捷键Ctrl+b + dCtrl+b + s,但这仅仅是冰山一角,欲窥tmux庞大的快捷键体系,请看下表。

表一:系统指令。

前缀 指令 描述
Ctrl+b ? 显示快捷键帮助文档
Ctrl+b d 断开当前会话
Ctrl+b D 选择要断开的会话
Ctrl+b Ctrl+z 挂起当前会话
Ctrl+b r 强制重载当前会话
Ctrl+b s 显示会话列表用于选择并切换
Ctrl+b : 进入命令行模式,此时可直接输入ls等命令
Ctrl+b [ 进入复制模式,按q退出
Ctrl+b ] 粘贴复制模式中复制的文本
Ctrl+b ~ 列出提示信息缓存

表二:窗口(window)指令。

前缀 指令 描述
Ctrl+b c 新建窗口
Ctrl+b & 关闭当前窗口(关闭前需输入y or n确认)
Ctrl+b 0~9 切换到指定窗口
Ctrl+b p 切换到上一窗口
Ctrl+b n 切换到下一窗口
Ctrl+b w 打开窗口列表,用于且切换窗口
Ctrl+b , 重命名当前窗口
Ctrl+b . 修改当前窗口编号(适用于窗口重新排序)
Ctrl+b f 快速定位到窗口(输入关键字匹配窗口名称)

表三:面板(pane)指令。

前缀 指令 描述
Ctrl+b " 当前面板上下一分为二,下侧新建面板
Ctrl+b % 当前面板左右一分为二,右侧新建面板
Ctrl+b x 关闭当前面板(关闭前需输入y or n确认)
Ctrl+b z 最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增)
Ctrl+b ! 将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效)
Ctrl+b ; 切换到最后一次使用的面板
Ctrl+b q 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板
Ctrl+b { 向前置换当前面板
Ctrl+b } 向后置换当前面板
Ctrl+b Ctrl+o 顺时针旋转当前窗口中的所有面板
Ctrl+b 方向键 移动光标切换面板
Ctrl+b o 选择下一面板
Ctrl+b 空格键 在自带的面板布局中循环切换
Ctrl+b Alt+方向键 以5个单元格为单位调整当前面板边缘
Ctrl+b Ctrl+方向键 以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖)
Ctrl+b t 显示时钟

保存Tmux会话

信息时代,数据尤为重要。tmux保护现场的能力依赖于tmux进程,如果进程退出,则意味着会话数据的丢失,因此关机重启后,tmux中的会话将被清空,这不是我们想要见到的。幸运的是,目前有这样两款插件:Tmux ResurrectTmux Continuum,可以永久保存tmux会话(它们均适用于tmux v1.9及以上版本)。

Tmux Resurrect

Tmux Resurrect无须任何配置,就能够备份tmux会话中的各种细节,包括窗口、面板的顺序、布局、工作目录,运行程序等等数据。因此它能在系统重启后完全地恢复会话。由于其幂等的恢复机制,它不会试图去恢复一个已经存在的窗口或者面板,所以,即使你不小心多恢复了几次会话,它也不会出现问题,这样主动恢复时我们就不必担心手抖多按了一次。另外,如果你是tmuxinator用户,我也建议你迁移到 tmux-resurrect插件上来,具体请参考Migrating from tmuxinator

Tmux Resurrec安装过程如下所示:

1
2
3
cd ~/.tmux
mkdir plugins
git clone https://github.com/tmux-plugins/tmux-resurrect.git

安装后需在~/.tmux.conf中增加一行配置:

1
run-shell ~/.tmux/plugins/tmux-resurrect/resurrect.tmux

至此安装成功,按下prefix + r重载tmux配置。

Tmux Resurrec提供如下两个操作:

  • 保存,快捷指令是prefix + Ctrl + s,tmux状态栏在保存开始,保存后分别提示”Saving…”,”Tmux environment saved !”。
  • 恢复,快捷指令是prefix + Ctrl + r,tmux状态栏在恢复开始,恢复后分别提示”Restoring…”,”Tmux restore complete !”。

保存时,tmux会话的详细信息会以文本文件的格式保存到~/.tmux/resurrect目录,恢复时则从此处读取,由于数据文件是明文的,因此你完全可以自由管理或者编辑这些会话状态文件(如果备份频繁,记得定期清除历史备份)。

可选的配置

Tmux Resurrec本身是免配置开箱即用的,但同时也提供了如下选项以便修改其默认设置。

1
2
3
4
set -g @resurrect-save 'S' # 修改保存指令为S
set -g @resurrect-restore 'R' 修改恢复指令为R
# 修改会话数据的保持路径,此处不能使用除了$HOME, $HOSTNAME, ~之外的环境变量
set -g @resurrect-dir '/some/path'

默认情况下只有一个保守的列表项(即vi vim nvim emacs man less more tail top htop irssi mutt)可以恢复,对此 Restoring programs doc 解释了怎么去恢复额外的项目。

进阶的备份

除了基础备份外,Tmux Resurrec还提供进阶的备份功能,如下所示:

  • 恢复vim 和 neovim 会话
  • 恢复面板内容
  • 恢复shell的历史记录(实验性功能)

进阶的备份功能默认不开启,需要特别配置。

1)恢复vim 和 neovim 会话,需要完成如下两步:

  • 通过vim的vim-obsession插件保存vim/neovim会话。

    1
    2
    3
    cd ~/.vim/bundle
    git clone git://github.com/tpope/vim-obsession.git
    vim -u NONE -c "helptags vim-obsession/doc" -c q
  • ~/.tmux.conf中增加两行配置:

    1
    2
    set -g @resurrect-strategy-vim 'session' # for vim
    set -g @resurrect-strategy-nvim 'session' # for neovim

2)恢复面板内容,需在~/.tmux.conf中增加一行配置:

1
set -g @resurrect-capture-pane-contents 'on' # 开启恢复面板内容功能

目前使用该功能时,请确保tmux的default-command没有包含&& 或者||操作符,否则将导致bug。(查看default-command的值,请使用命令tmux show -g default-command。)

3)恢复shell的历史记录,需在~/.tmux.conf中增加一行配置:

1
set -g @resurrect-save-shell-history 'on'

由于技术的限制,保存时,只有无前台任务运行的面板,它的shell历史记录才能被保存。

Tmux Continuum

可能你嫌手动保存和恢复太过麻烦,别担心,这不是问题。Tmux Continuum 在 Tmux Resurrec的基础上更进一步,现在保存和恢复全部自动化了,如你所愿,可以无感使用tmux,不用再担心备份问题。

Tmux Continuum安装过程如下所示(它依赖Tmux Resurrect,请保证已安装Tmux Resurrect插件):

1
2
cd ~/.tmux/plugins
git clone https://github.com/tmux-plugins/tmux-continuum.git

安装后需在~/.tmux.conf中增加一行配置:

1
run-shell ~/.tmux/plugins/tmux-continuum/continuum.tmux

Tmux Continuum默认每隔15mins备份一次,我设置的是一天一次:

1
set -g @continuum-save-interval '1440'

关闭自动备份,只需设置时间间隔为 0 即可:

1
set -g @continuum-save-interval '0'

想要在tmux启动时就恢复最后一次保存的会话环境,需增加如下配置:

1
set -g @continuum-restore 'on' # 启用自动恢复

如果不想要启动时自动恢复的功能了,直接移除上面这行就行。想要绝对确定自动恢复不会发生,就在用户根目录下创建一个tmux_no_auto_restore空文件(创建命令:touch ~/tmux_no_auto_restore),该文件存在时,自动恢复将不触发。

对于tmux高级用户(可能就是你)而言,同时运行多个tmux服务器也是有可能的。你可能并不希望后面启用的几个tmux服务器自动恢复或者自动保存会话。因此Tmux Continuum会优先在第一个启用的tmux服务器中生效,随后启用的tmux服务器不再享受自动恢复或自动保存会话的待遇。

实际上,不管Tmux Continuum功能有没有启用,或者多久保存一次,我们都有办法从状态栏知晓。Tmux Continuum提供了一个查看运行状态的插值#{continuum_status},它支持status-rightstatus-left两种状态栏设置,如下所示:

1
set -g status-right 'Continuum status: #{continuum_status}'

tmux运行时,#{continuum_status} 将显示保存的时间间隔(单位为分钟),此时状态栏会显示:

1
Continuum status: 1440

如果其自动保存功能关闭了,那么状态栏会显示:

1
Continuum status: off

借助Tmux Continuum插件,Mac重启时,我们甚至可以选择在Terminal 或者 iTerm2 中自动全屏启用tmux。

为此,需在~/.tmux.conf中增加一行配置:

1
set -g @continuum-boot 'on'

Mac下,自动启用tmux还支持如下选项:

  • set -g @continuum-boot-options 'fullscreen'Terminal自动全屏,tmux命令在Terminal中执行。
  • set -g @continuum-boot-options 'iterm'iTerm2 替换 Terminal 应用,tmux命令在iTerm2中执行。
  • set -g @continuum-boot-options 'iterm,fullscreen'iTerm2自动全屏,tmux命令在iTerm2中执行。

Linux中则没有这些选项,它只能设置为自动启用tmux服务器。

Tpm

以上,我们直接安装了tmux插件。这没有问题,可当插件越来越多时,我们就会需要统一的插件管理器。因此官方提供了tpm(支持tmux v1.9及以上版本)。

tpm安装过程如下所示:

1
2
cd ~/.tmux/plugins
git clone https://github.com/tmux-plugins/tpm

安装后需在~/.tmux.conf中增加如下配置:

1
2
3
4
5
6
7
8
9
10
# 默认需要引入的插件
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# 引入其他插件的示例
# set -g @plugin 'github_username/plugin_name' # 格式:github用户名/插件名
# set -g @plugin '[email protected]/user/plugin' # 格式:git@github插件地址

# 初始化tmux插件管理器(保证这行在~/.tmux.conf的非常靠后的位置)
run '~/.tmux/plugins/tpm/tpm'

然后按下prefix + r重载tmux配置,使得tpm生效。

基于tpm插件管理器,安装插件仅需如下两步:

  1. ~/.tmux.conf中增加新的插件,如set -g @plugin '...'
  2. 按下prefix + I键下载插件,并刷新tmux环境。

更新插件,请按下prefix + U 键,选择待更新的插件后,回车确认并更新。

卸载插件,需如下两步:

  1. ~/.tmux.conf中移除插件所在行。
  2. 按下prefix + alt + u 移除插件。

会话共享

结对编程

tmux多会话连接实时同步的功能,使得结对编程成为了可能,这也是开发者最喜欢的功能之一。现在就差一步了,就是借助tmate把tmux会话分享出去。

tmate是tmux的管理工具,它可以轻松的创建tmux会话,并且自动生成ssh链接。

安装tmate

1
brew install tmate

使用tmate新建一个tmux会话

1
tmate

此时屏幕下方会显示ssh url,如下所示:

查看tmate生成的ssh链接

1
tmate show-messages

生成的ssh url如下所示,其中一个为只读,另一个可编辑。

共享账号&组会话

使用tmate远程共享tmux会话,受制于多方的网络质量,必然会存在些许延迟。如果共享会话的多方拥有同一个远程服务器的账号,那么我们可以使用组会话解决这个问题。

先在远程服务器上新建一个公共会话,命名为groupSession

1
tmux new -s groupSession

其他用户不去直接连接这个会话,而是通过创建一个新的会话来加入上面的公共会话groupSession

1
tmux new -t groupSession -s otherSession

此时两个用户都可以在同一个会话里操作,就会好像第二个用户连接到了groupSession的会话一样。此时两个用户都可以创建新建的窗口,新窗口的内容依然会实时同步,但是其中一个用户切换到其它窗口,对另外一个用户没有任何影响,因此在这个共享的组会话中,用户各自的操作可以通过新建窗口来执行。即使第二个用户关闭otherSession会话,共享会话groupSession依然存在。

组会话在共享的同时,又保留了相对的独立,非常适合结对编程场景,它是结对编程最简单的方式,如果账号不能共享,我们就要使用下面的方案了。

独立账号&Socket共享会话

开始之前我们需要确保用户对远程服务器上同一个目录拥有相同的读写权限,假设这个目录为/var/tmux/

使用new-session(简写new)创建会话时,使用的是默认的socket位置,默认socket无法操作,所以我们需要创建一个指定socket文件的会话。

1
tmux -S /var/tmux/sharefile

另一个用户进入时,需要指定socket文件加入会话。

1
tmux -S /var/tmux/sharefile attach

这样,两个不同的用户就可以共享同一个会话了。

通常情况下,不同的用户使用不同的配置文件来创建会话,但是,使用指定socket文件创建的tmux会话,会话加载的是第一个创建会话的用户的~/.tmux.conf配置文件,随后加入会话的其他用户,依然使用同一份配置文件。

配置

需要的时候把 iterm2 呼出来,不需要的时候自动隐藏

iTerm2 > Preferences > Keys,左侧 Hotkey 选项 勾选 Show/hide iTerm2 with a system-wide hotkey,设置快捷键

复用上个会话的目录

iTerm2 > Preferences > Profiles > Working Directory > Reuse previous session’s directory

别名

1
alias zsh-config='vim ~/.zshrc'

终端下命令行下用 Sublime、vscode、atom 打开文件夹或目录

vscode 命令行调用

VS Code 提供了一个 code 命令,用来在 shell 环境下调用编辑器。使用快捷键 ⇧⌘P(或 F1) 唤起命令面板,输入以下命令即可完成安装。

shell command

  • code 命令后可接多个路径或文件:

    1
    code pro6.js pro6.scss ../
  • 文件对比:

    1
    code -d new-file.js old-file.js
  • 打开文件并跳至指定行:

    1
    code -g source/cn/static/global/tracker.js:15

更多 code 命令行使用方法,参见《Additional Command line arguments》。

手动添加

  1. 打开终端,随便一个目录输入

    1
    cd
  2. 检查是否有.zshrc文件

    1
    ls -al

    .zshrc文件

1) 添加启动命令

1
sudo nano .zshrc
在文件末尾加上别名:
1
2
3
alias atom='/Applications/Atom.app/Contents/MacOS/Atom'
alias subl='/Applications/SublimeText.app/Contents/SharedSupport/bin/subl'
alias code='/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code'
`⌘ + X` 再输入 `y` 保存,重启 iterm2。

查找 APP 路径:

finder-应用程序-右键“显示包内容”

vim配色

终端输入vim ~/.vimrc,设置内容如下,

1
2
3
syntax on
set number
set ruler

Prezto

Prezto是Zsh的配置框架,作用是简化Zsh的配置难度,Prezto的使用可以参考这两篇文章:prezto官网Customizing Your Prezto Prompt

根据第一篇文章安装好Prezto后,需要按需配置Prezto,配置文件是~/.zpreztorc文件,将历史记录补全、语法高亮、git等插件的功能打开,另外在选择主题的时候,可以根据命令prompt -l列举出所有的主题,根据prompt -p themename预览主题的样式。我使用的就是它经典的主题sorin,其他的主题没有尝试过,你可以根据自己的喜好安装和配置。

Spaceship ZSH

powerlevel9k主题

配置项

Stylizing Your Prompt

其他人的配置

Show Off Your Config

我的配置

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# =======================================================================================================================================
# 以下是 .zshrc 配置信息
# =======================================================================================================================================

# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH

# Path to your oh-my-zsh installation.
export ZSH=/Users/leo/.oh-my-zsh
export DEFAULT_USER="Leo"
export LPASS_AGENT_TIMEOUT=0
export TERM="xterm-256color"

# # 代理
# export https_proxy=http://127.0.0.1:7890
# export http_proxy=http://127.0.0.1:7890
# export all_proxy=socks5://127.0.0.1:7891

# Set name of the theme to load. Optionally, if you set this to "random"
# it'll load a random theme each time that oh-my-zsh is loaded.
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
# 主题
# ZSH_THEME="robbyrussell"
# ZSH_THEME="agnoster"
# ZSH_THEME="powerline"

# =======================================================================================================================================
# powerlevel9k 主题
# https://github.com/bhilburn/powerlevel9k
# https://github.com/bhilburn/powerlevel9k/wiki/Show-Off-Your-Config#v1rguls-configuration
# =======================================================================================================================================
ZSH_THEME="powerlevel9k/powerlevel9k"
# 调整字体模式
POWERLEVEL9K_MODE='nerdfont-complete'
# 左侧提示符显示内容:系统时间(time)、root权限指示(root_indicator)、username and host(context)、当前工作目录(dir)、目录写入权限(dir_writable)、git信息(vcs)
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(time context root_indicator dir dir_writable vcs)
# 右侧提示符显示内容:上一命令执行状态(status)、后台任务个数(background_jobs)、上一命令执行时间(command_execution_time)、可用RAM(ram)、系统的负载均值(load)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs command_execution_time ram load)
# context也就是你的用户名以及终端名称,默认是 `%n@%m`。
POWERLEVEL9K_CONTEXT_TEMPLATE="Leo"
# 低于这个值的命令执行时间不显示,0 也就是命令执行时间多长都显示
POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD="1"
# 时间格式化
POWERLEVEL9K_TIME_FORMAT="%D{%H:%M}"
# 显示分支版本
POWERLEVEL9K_SHOW_CHANGESET=true
# =======================================================================================================================================
# powerlevel9k-配置结束
# =======================================================================================================================================


# Uncomment the following line to use case-sensitive completion.
# 取消注释以下行使用区分大小写的完成。
# CASE_SENSITIVE="true"

# Uncomment the following line to use hyphen-insensitive completion. Case
# sensitive completion must be off. _ and - will be interchangeable.
# 取消注释下面的行以使用连字符不敏感的完成。区分大小写的完成必须关闭。_ 和-将是可互换的。
# HYPHEN_INSENSITIVE="true"

# Uncomment the following line to disable bi-weekly auto-update checks.
# 取消注释以下行禁用每两周检查自动升级。
# DISABLE_AUTO_UPDATE="true"

# Uncomment the following line to change how often to auto-update (in days).
# 取消注释以下行来改变频率自动更新(天)。
# export UPDATE_ZSH_DAYS=13

# Uncomment the following line to disable colors in ls.
# 取消注释以下行ls禁用的颜色。
# DISABLE_LS_COLORS="true"

# Uncomment the following line to disable auto-setting terminal title.
# 取消注释以下行禁用自动对焦功能终端标题。
# DISABLE_AUTO_TITLE="true"

# Uncomment the following line to enable command auto-correction.
# 取消注释以下行来启用命令自动校对功能。
# ENABLE_CORRECTION="true"

# Uncomment the following line to display red dots whilst waiting for completion.
# 取消注释以下行来显示红点同时等待完成。
COMPLETION_WAITING_DOTS="true"

# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# 如果要禁用在 VCS 下标记未跟踪文件为脏, 请取消注释以下行。这使得存储库状态对大型存储库的检查速度要快得多。
# DISABLE_UNTRACKED_FILES_DIRTY="true"

# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# 如果要更改历史命令输出中显示的命令执行时间戳, 请取消注释以下行。可选的三格式: "mm/dd/日/日 " | "dd.mm.yyyy " | "日"-mm-dd "
# HIST_STAMPS="mm/dd/yyyy"

# Would you like to use another custom folder than $ZSH/custom?
# 是否要使用其他自定义文件夹而不是 $ZSH/自定义?
# ZSH_CUSTOM=/path/to/new-custom-folder

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(zsh-syntax-highlighting zsh-autosuggestions z brew node npm osx git git-extras)

source $ZSH/oh-my-zsh.sh

source $HOME/.bash_profile # 环境变量

# User configuration

# export MANPATH="/usr/local/man:$MANPATH"

# You may need to manually set your language environment
# export LANG=en_US.UTF-8

# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi

# Compilation flags
# export ARCHFLAGS="-arch x86_64"

# ssh
# export SSH_KEY_PATH="~/.ssh/rsa_id"

# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"

# =======================================================================================================================================
# 别名
# =======================================================================================================================================
alias code='/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code'
alias zsh-config='code ~/.zshrc'
alias zsh-badges='code ~/.badges'
alias nginx-config='code /usr/local/etc/nginx/nginx.conf'
alias nginx-services='cd /usr/local/etc/nginx/servers/ && ls'
alias nginx-log='cd /usr/local/Cellar/nginx/ && ls'
alias npm-registry-zpfe='npm config set registry http://npm.zhaopin.com'
alias npm-registry-npm='npm config set registry https://registry.npmjs.org/'
alias glog="git log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"

# =======================================================================================================================================
# 别名-配置结束
# =======================================================================================================================================


# =======================================================================================================================================
# badge徽标
# 徽标配置文件:~/.badges
# /Users/leo/OneDrive 📦
# /Users/leo 🏠
# Profiles Badge Text
# \(user.badge) \n \(session.name) \n \(session.path) \n \(session.username)@\(session.hostname)
# =======================================================================================================================================
function iterm2_print_user_vars() {
iterm2_set_user_var badge $(dir_badges)
}
function dir_badges() {
while read directory badge || [[ -n "$directory" ]]
do
if [[ "$PWD" == $directory* ]]; then
echo $badge
break
fi
done < ~/.badges
}
# =======================================================================================================================================
# badge徽标-配置结束
# =======================================================================================================================================

test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"

# =======================================================================================================================================
# Auto add env parameter $PROMPT_COMMAND when use non-Linux tty login by ssh.
# =======================================================================================================================================
# export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
if [ "$SSH_CONNECTION" != '' -a "$TERM" != 'linux' ]; then
declare -a HOSTIP
HOSTIP=`echo $SSH_CONNECTION |awk '{print $3}'`
export PROMPT_COMMAND='echo -ne "\033]0;${USER}@$HOSTIP:[${HOSTNAME%%.*}]:${PWD/#$HOME/~} \007"'
fi
###-tns-completion-start-###
if [ -f /Users/leo/.tnsrc ]; then
source /Users/leo/.tnsrc
fi
###-tns-completion-end-###

如果图标显示不出来可以进入 iTerm 的设置 > Profiles > Text > Change Font > 选择 Hack Nerd Font 字体 Regular 大小 18pt,完成后重新启动 iTerm ,设置完成。

插件

打开配置文件:~/.zshrc

  • autojump:快速切换目录

  • z: 功能同autojump,比autojump更轻量更快

    1
    brew install z

  • fzf: 快速模糊搜寻器

    1
    brew install fzf

    在命令行的任何地方按下 CTRL-T, CTRL-R, and ALT-C (bash, zsh, fish),就可以开启交互式模糊搜索界面,递归搜索当前目录下的文件。输入搜索项后,上、下键选择结果,回车上屏:

  • zsh-syntax-highlighting:zsh 可用命令高亮

    1
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
  • zsh-autosuggestions:命令自动提示

    1
    git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
  • 优秀的命令行工具整理

  • 开发工具分享
坚持原创技术分享,您的支持将鼓励我继续创作!
  • 本文作者: Leo
  • 本文链接: https://xuebin.me/posts/14eb7497.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!