使用 iTerm2 shell integration

说明

iTerm2 可以与 unix shell 集成在一起,在安装了 iTerm2 的 shell 集成工具后,可以在 iTerm2 中看到命令历史、当前工作目录、主机名、上传下载文件等。

安装

可以点击菜单栏 iTerm2 > Install Shell Integration 或者终端输入指令

1
$ curl -L https://iterm2.com/misc/install_shell_integration.sh | bash

该 bash 脚本会自动安装当前终端 shell 的对应脚本,并写入到对应的 shell 配置文件中。支持的 shell 有:bash、fish、tcsh、zsh 。

例如在 zsh shell 中执行完 bash 脚本后,.zshrc 中间中写入了下面语句:

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

在安装完 iTerm2 的 shell integration 后会在终端界面中最左侧多出一个蓝色三角形的标记。

如图:

iTerm2 shell integration marks

有蓝色三角形的标记说明当前 shell 支持 shell integration。如需关闭标记,可以在 iTerm2 > Preferences > Profiles > (your profile) > Terminal 最下面 > Shell Integration 关闭 Show mark indicators

使用

下载功能

在 iTerm2 中右键点击执行 ls 命令中显示的文件即可看到 Download with scp from <hostname> 的选项。想要实现这个功能需要在对应的 shell 中都安装 iTerm2 shell integration 。例如本地和服务器的 shell 都需要执行安装的步骤。

iTerm2 之后会在 iTerm2 ssh 配置~/.ssh/config/etc/ssh_config 按照优先级从高到低来解析 hostname。如果 hostname 不正确则 iTerm2 不能正确通过 scp 命令来进行文件的下载。

有一个简单的方法是在下载方的 shell config 中指定变量 iterm2_hostname

指定 iterm2_hostname 只需要在 对应的 shell config 中添加下面语句:

1
export iterm2_hostname=<hostname>

hostname 填入对应 ip 或是域名即可。这样 iTerm2 就可以解析到 hostname,也就可以通过 iTerm2 进行文件的上传和下载了。需要注意的是该语句需要在 source "${HOME}/.iterm2_shell_integration.zsh" 执行之前声明。

export iterm2_hostname=example.com

下载示例如下:

iTerm2 shell integration download

但是如果是 root 用户则解析 hostname 还是会有问题,则需要去相应的配置文件如 /etc/hostname 更改主机的 hostname。

上传功能

上传功能只需要按住 Option 键并从文件浏览器(如 Finder)拖入文件到 iTerm2 终端即可,然后选择需要上传的服务器即可完成上传。


参考资料: