Mac Terminal美化及配置

记录

Terminal

  1. 选择Terminal的配色方案:sindresorhus/terminal-snazzy: Elegant Terminal theme with bright colors
  2. 配置窗口的大小,在14寸MacBook Pro上本人合适的参数如下:
配置项 配置值
字体 Monaco 14
窗口列数 90
窗口行数 32
字符间距 1.05
行间距 1.3

oh-my-zsh

详细过程可以参考Make Mac Terminal App Beautiful and Productive | by Jack Pan | Medium

  1. 安装oh-my-zsh
1
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  1. 安装相关插件,包括autojump、zsh-syntax-highlighting和zsh-autosuggestions,分别可以完成常用目录跳转,命令高亮以及历史命令推荐
  2. 修改主题配置文件.oh-my-zsh/themes/robbyrussell.zsh-theme,修改为下面的内容。相比于默认效果,下面的配置主要完成了全路径显示和用户显示
1
2
3
4
5
6
7
local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT='${ret_status} %{$fg_bold[magenta]%}%n %{$fg[cyan]%}%~%{$reset_color%} $(git_prompt_info)'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"

iTerm2

  1. iTerm2是一款可以代替Mac原生Terminal的应用,能够完成的功能大体上与Terminal相同,同时还提供更多的功能(个人认为最强大的一个功能是通过command+点击在命令行中直接打开目录或者文件)
  2. iTerm2的主题配置选择:Dracula — Dark theme for 270+ apps
  3. Vim的配色也可以选择Dracula

iTerm2 ssh配置

在终端中我们可以通过ssh登录到不同的服务器,但是每次都需要经过下面的一些操作,包括:

  1. 输入ssh命令,例如ssh user@remote-ip,当然如果配置了.ssh/config,可以简化host的写法
  2. 输入密码

虽然只有两步,但是还是非常繁琐。利用iTerm2,我们可以实现ssh的快速自动登录,主要利用的是iTerm2中提供的Profiles配置功能以及expect命令,其中Profiles允许我们在启动新的shell的时候执行预先定义好的命令,而expect可以帮助我们交互式输入密码。

expect自动登录

expect是一个自动化的交互套件。在执行命令或者程序的时候,系统会要求以交互的形式输入字符串,而expect就可以根据关键字进行判断,交互式输入对应的字符串。它的自动交互流程是,首先通过spawn来启动指定的进程,之后通过expect来获取指定关键字,利用send来发送对应的字符串,最后执行完成退出。

下面是一个自动登录的脚本参考,脚本名称假设为loginShell.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/expect

set HOSTNAME [lindex $argv 0]
set PASSWORD [lindex $argv 1]

spawn ssh $HOSTNAME
expect {
"(yes/no)?"
{send "yes\n";exp_continue;}
-re "(p|P)ass(word|wd):"
{send "$PASSWORD\n"}
}
interact

首先该脚本设置了两个变量,分别是hostname和password,这两个变量需要通过命令行执行时以参数形式传递。之后通过spawn启动ssh命令。注意这里的hostname是简化的写法,需要配合.ssh/config中的配置才能达到对应的效果。启动命令之后,expect会判断关键字并输入对应的密码,这里也是支持正则匹配的。

有了这个脚本之后,我们只需要执行下面的命令就可以完成自动登录:

1
./loginShell.sh <hostname> <password>

该脚本具有较强的通用性,当然还可以修改脚本,提供更多的执行参数,达到包括端口转发等更多功能。

profiles配置

下面我们需要进行profiles配置,即每次打开对应shell的时候,都让它首先执行上面的expect命令,这样就可以完成自动登录。

配置profiles在iTerm2的偏好设置中,选择Profiles,里面可以新建对应的配置。配置的名称,标签等可以根据实际情况进行指定,其中最为重要的是Command项的指定。应该指定为执行Command,并且指定为/bin/zsh,在下面的Send text at start中,输入需要执行的脚本绝对路径以及参数,例如:

1
/Users/xxx/loginShell.sh <hostname> <password>

这样,之后需要登录对应的服务器,只需要打开iTerm2,选择对应的Profile即可。

参考文章

  1. oh-my-zsh修改主题添加全路径显示 - 掘金
  2. how to enable username and hostname in the default theme? · Issue #5686 · ohmyzsh/ohmyzsh
  3. iTerm2 实现 ssh 自动登录,并使用 Zmodem 实现快速传输文件 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang|云原生

Mac Terminal美化及配置
http://example.com/2023/08/02/Mac-Terminal美化及配置/
作者
EverNorif
发布于
2023年8月2日
许可协议