iterm2配置与使用
[TOC]
iterm2快捷键
Mac按键符号
⇧
: shift ⌃
: control ⌥
: option/alt ⌘
: command ↩
: return ⌅
: enter
快捷键
窗口(window)
⌘N
: 新建窗口
⌘⇧w
: 关闭当前窗口
⌘↩
/自定义⌘⌃F
: 切换全屏, 自定义动作名为 Toggle Full Screen
标签页(tab)
⌘t
: 新建标签页
⌘⌥w
: 关闭当标签页
⌘⌥e
:全屏展示所有窗口的所有 tab,可在所有tab中搜索
⌘⇧[/]
/ 自定义 ⌘⇧←/→
: 按方向切换标签页 (⌘←/→
被光标移动到行首/未用了) , 自定义动作名为 Previous/Next Tab
自定义 ⌘Fn←/→
:, 按方向移动标签页 (⌘⇧←/→
被 按方向切换标签页 用了) , 自定义动作名为 Move Tab Left/Right
⌘
+ <数字>
: 切换标签页
分屏(panel)
⌘(⇧)d
: 垂直(水平)分屏
⌘w
: 关闭当前分屏
⌘⇧↩
: 最大化当前分屏/解除此最大化
⌘[/]
: 跳转到(按使用历史)前/后一个分屏
⌘⌥←/→/↑/↓
: (按位置)跳转分屏
⌘⌃←/→/↑/↓
: (按位置)平移分屏界
鼠标操作:
- 拖动分屏眉换位置
- 拖动分屏界
分屏内
⌘k
: 清空屏幕,之后仍无法上翻到屏幕历史
⌘r
=linux快捷键⌃l
=shell命令 clear
:(reflash之意)下翻屏幕至全空,之后仍可上翻屏幕
⌘f
: 查找,支持正则
⌘/
: 高亮当前鼠标的位置
⌘Fn ↑/↓
: 上翻/下翻一页
⌘Fn ←/→
/ 自定义 ⌘⇧FN↑/↓
: 上翻/下翻到顶, 自定义动作名为 Scroll To Top/End
补全
⌘;
: 自动补全历史命令
⌘⇧h
: 显示所有历史命令及其时间,非补全
⌘⌥/
: 显示所有补全历史用过的路径,按使用频率显示,非补全
在命令行快速移动
⌥
+←/→
:左/右移一词 ⌥
+Del/FnDel
: 左/右删一词
⌘
+←/→
,或Fn
+←/→
:左/右移动到行尽头 ⌘
+Del/FnDel
: 左/右删到行尽头
上述快捷键,与linux快捷键的映射关系
前/首 | 后/尾 | |
---|---|---|
光标移一词 | Esc+b (NE ⌥← =escape seq b) |
Esc+f (NE ⌥→ =escape seq f) |
移到行之 | ⌃a (自设⌘← =hex 0x01)或 Home =Fn← =escape seq [1~ |
⌃e (自设⌘→ =hex 0x05)或 End =Fn→ =escape seq [4~ |
删一词 | ⌃w (自设 ⌥Del =hex 0x17) =⌃[ 松手+Del (Del即Backspace) (NE⌥Del = hex 0x1b 0x7f) |
Esc+d (NE ⌥FnDel =escape seq d) |
删光标前/后的全部 | ⌃u ( 自设⌘Del =hex 0x15, 再去掉NE的 ⌘Del =hex 0x15) |
⌃k (自设⌘FnDel =hex 0x0b) |
删除整行 | ⌃e⌃u (^e 移到行尾,^u 删除光标到行首) (自设⇧Del =hex 0x05 0x15) |
– |
- 表格含义:
linux下的快捷键
(预设/自设iterm2快捷键
=自设快捷键的指令
) - NE(快捷键预设):nutral editing,选择预设方法详见下文之 自设快捷键
- 自设:用户自己添加的快捷键,法详见下文之 自设快捷键
自设快捷键
(本文参考自定义快捷键 )
在iterm2软件中,iterm2/preferences
(即⌘,
),然后依次
-
选择预设快捷键,见下图2.5
-
添加自定义快捷键,方法例如下
-
自设快捷键的指令的写法
快捷键 action action下一栏 又记作 Esc+一些按键
(要按的足够快)send escape sequence 一些按键
^[一些按键
⌃键
send hex code 0x十六进制数
(参见 按键的十六进制码)例如 \x09\x9f
-
然后删掉预设
natural editing
自带的→Del
=Send hex Codes: 0x4
(即ctrl+d,linux命令行自带的删除右侧一个字符) -
然后加上
Home
=escape seq [1~
,End
=escape seq [4~
,这是因为tmux下,不接受预设快捷键默认Home
,End
的键值(keycode),但接受^[[1~, ^[[4~
集成tmux
iTerm2可与本机或ssh远程的tmux关联,用iterm操作tmux
- tmux的session映射iterm2的window
- tmux的window映射iterm2的tab
- tmux的panel映射iTerm2的panel
适用版本:tmux版本>=1.8, iterm2>=2.9
启动tmux client
启动tmux client,以使iterm2关联tmux : tmux -CC
tmux -CC new -s 新session名
: 新iterm2窗口新建tmux session (推荐)tmux -CC attach -t session名
: 新iterm2窗口连指定tmux session (推荐)tmux -CC attach
: 新窗口连接最近的在tmux dashboard里的tmux session(推荐)
连接后:tmux的一切快捷键前缀会被覆盖掉
开闭
新建
⌘⇧⌃t
:新建 tmux session 为 标签页(推荐)⌘⇧⌃n
:新建 tmux session 为 窗口
关闭窗口
导致tmux session将关闭,然后弹出对话框点
hide
: 隐藏当前所有tmux windowdetach
:detach当前tmux sessionkill
:kill当前tmux session
关闭tmux client,并detach 当前 tmux session
-
在tmux session的页面
⌘⇧⌃d
(推荐) -
在在运行tmux client的页面
esc
(推荐)
关闭标签页
导致tmux window将关闭,然后弹出对话框点
hide
: 隐藏当前tmux windowkill
:kill当前tmux window
tmux dashboard (仪表盘)
需要有tmux -CC开启的session处在attach时,dashboard才能启动
⌘⇧⌃↩
:打开dashboard。进入dashboard后,(推荐)
-
选中tmux session/window,再点击其名字,即可更名(推荐)
-
选中一或多个tmux window,点
hide
,则该标签页藏起来 -
选中多个tmux window,点
Open in Tabs
, 同一个窗口打开为多个标签页 -
attach
/detach
tmux session -
选中tmux session/window,点
-
kill之(推荐) -
+
,新建tmux session/window,打开为现有窗口的新标签页,其设置方法如下
-
⌘w
=点红叉叉,退出dashboard(推荐)
标签页标题
- [ ↣ xxx xxx] :在运行tmux client
- ↣ xxx:tmux的windows
- xxx:非tmux的页标题
让tmux加载默认profile
初次使用tmux -CC
时,会将默认profile自动复制一份成tmux
的profile。在tmux -CC
时,只加载名为”tmux“的profile。为方便统一在tmux内外的快捷键和配色等设置,需让tmux加载默认profile
法一:将其他profile设置成功tmux所加载的profile(推荐)
如需要将已经配置好的profile(如上图中的``Default)**设置成tmux所加载的profile**,只需要删除
tmux profile,并将
Default profile重命名为
tmux`即可,然后将它设置为默认(标星)。
法二:将tmux profile设置为默认profile
- 设
tmux
profile 为默认,被视为默认的profile前会标★
- 删除
Default
profile
则之后,不论戳iterm2图标,或tmux -CC
,开的页面皆使用tmux
profile。
shell integration:远程tmux映射成本地GUI窗口
安装shell integration 的 utility
在本地分别运行
curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash
即安装完成
单文件上传与下载
shell integration仅支持单文件的上传与下载, 多文件(如文件夹)则不支持.
配置
仅支持下载: 仅在本地运行如下命令
支持下载与上传: 在本地与远程都运行如下命令
curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash
而后会出现 ~/.iterm2_shell_integration.zsh
文件, 而~/.zshrc
里会自动添加如下一行
test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
用法
ssh登录远程主机, 然后
- 下载单文件:
⌘
+左键单击文件 - 上传单文件: 从finder里拖拽文件到iterm中, 按着
⌥
松开鼠标
从融合的远程tmux中闪退
ssh连接到远程服务器,并执行tmux -CC
,进入融合tmux。有时会从融合的远程tmux窗口中闪退,并报错
** tmux mode started ** Command Menu ---------------------------- esc Detach cleanly. X Force-quit tmux mode. L Toggle logging. C Run tmux command. Unrecognized command from tmux. Did your ssh session die? The command was: channel 9: open failed: connect failed: Connection refused Detached channel 9: open failed: connect failed: Connection refused channel 9: open failed: connect failed: Connection refused channel 9: open failed: connect failed: Connection refused %exit ** tmux mode started ** Command Menu ---------------------------- esc Detach cleanly. X Force-quit tmux mode. L Toggle logging. C Run tmux command. tmux failed with error: “duplicate session: pytorch_template” Detached
原因分析:
-
本地
ssh
连接远程时加了-L
参数,然而远程映射端口上没开网络服务器进程,此时本地若访问本地映射端口,则本地ssh
进程会报ERROR曰channel 数字: open failed: connect failed: Connection refused
没开tmux时,此报错会直接输出在屏幕上;用
tmux
不加-CC
进入tmux,此报错会直接输出在tmux中你当前所在的分屏上。这两者情况都不会闪退。 -
然而若用
tmux -CC
进入tmux,shell integration以为这是tmux发出的,且是未见命令,故退出集成tmux窗口并报错Unrecognized command from tmux. Did your ssh session die? The command was: channel 9: open failed: connect failed: Connection refused Detached
解决办法:
-
法一:让ssh不要输出报ERROR
channel 数字: open failed: connect failed: Connection refused
:- 在本地
~/.ssh/config
中加上
Host <服务器名> LogLevel QUIET
这样ERROR就不会输出到屏幕了。
- 或使用
ssh -q 其余参数
连接服务器
缺点:ssh连接异常时不利于debug
- 在本地
-
法二:设置iTerm2,让它收到tmux发出的未见命令时不要退出集成tmux窗口
iTerm2中,
Preferences
-Advanced
-搜索框输入"tolerate"-"tolerate unrecognized commands from tmux"选off
缺点:这样就无法检测到死掉的tmux session并自动detach
报错This instance of iTerm2 is already attached to this session
当使用iterm2,ssh到远程主机,用tmux -CC
开启远程的tmux session(如名为<current-session-name>
),映射为本地iterm2的窗口。若此时本地电脑断网,再次联网,则映射窗口会卡死。
在卡死的窗口中,按cmd+w
、cmd+ctrl+shitf+d
均不会有反应。
-
此时若想恢复连接,正确的操作应该是:
cmd+n
开启一个新iterm2窗口,ssh连接远程主机,tmux -CC attach -t <current-session-name>
,弹出Could not attach to session
This instance of iTerm2 is already attached to this session
Reveal
Ok
点
Reveal
,则之前卡死的窗口会恢复连接,现在可以在其中操作了。 -
此时若如下误操作则会出现bug:按窗口左上角的红
x
,则会弹出对话框Close Window #1?
This window will be closed.
cancel
ok
点
OK
,然后又弹出对话框,Warning
Kill window and its jobs, hide window from view, or detach from tmux session?
Hidden windows may be restored from the tmux dashboard.
Kill
Detach tmux session
Hide
一般不想
Kill
,故选Detach tmux session
或者Hide
,而后在cmd+n
开启另一个iterm2窗口,重新ssh远程主机,然后tmux -CC attach -t <current-session-name>
,则会弹出对话框报错如下Could not attach to session
This instance of iTerm2 is already attached to this session
Reveal
Ok
不论点那个都无法打开`<current-session-name>`窗口
点`Reveal`会开启tmux Dashboard,在其中仍无法detach或开启 `<current-session-name>`;点Ok会直接输出
> ** tmux mode started **
>
> Command Menu
> /----------------------------
> esc Detach cleanly.
> X Force-quit tmux mode.
> L Toggle logging.
> C Run tmux command.
> Detached
> %output %34 \015\015\033[0m\033[27m\033[24m\033[J\033[39m\033[0m\033[49m\033[42m\033[30m haoyu@jungpu3 \033[44m\033[32m\033[30m /home/haoyu/mfs/project/pytorch_learn/my_template/code \033[43m\033[34m\033[30m dev ● \033[49m\033[33m\033[39m \033[K
> %begin 1571724889 24 1
> %end 1571724889 24 1
> %exit
但是
* `tmux attach -t <current-session-name>`则可打开,没有映射成本地窗口
* `tmux attach -t <other-session-name>`也可打开,且能映射成本地窗口
解决方法:`cmd+Q`退出iterm2.app,然后重启iterm.app,再ssh远程服务器,`tmux -CC attach -t <current-session-name>`,则可打开并映射成本地窗口。