Tmux 的配置有很项,网上说的够多了,这里我就说两条,网上经常弄错的地方:

第一:escape-time 该设置成多少?

很多配置都不解释一下,直接一句:

set-option -g escape-time 0

好点的还会说一下,可以解决 ESC 键延迟,终端标准 VT220 下面,所有游标,功能键都是一系列以 ESC 字元(ascii 码 0x1b)开头的字元串,你可以终端下用下面命令:

showkey -a

测试下各种 F1-F12,游标键,ALT+字元,Hom/End 等按键是不是如此。那么终端,包括 ncurses 库都是根据一个超时(默认一秒)来判断用户到底是单独按下了 ESC 键,还是按下了一个功能键,如果是按下一个功能键,后面的控制字元串应该很快一起发送过来,如果超时了,就判断为单独按下 ESC。

那么除非你不打算在 tmux 里使用 ALT 键或者功能键来控制 tmux,否则你设置成 0的话,tmux中判断功能键和 ALT+字元 会经常失效,因为不可能每次键盘扫描码都同时到达,你在本机测似没问题,但透过网路的话,功能键就会经常失效。

比如我们如果想在 tmux 中绑定一些 F1/F12,功能键,ALT+字元 等按键,就必须设置成一个合理值,比如久经考验的 50 毫秒:

set-option -g escape-time 50

那么当 tmux 通过 50 毫秒,通常更短(没有匹配被绑定的热键的键盘码字元串,或者匹配到了)就可以决定是要把该键盘码传给低下的程序呢,还是该按键是需要触发一个 tmux 功能?

所以我们里面使用 vim 的话,设置 ttimeoutlen 时就需要判断一下:

if $TMUX !=
set ttimeoutlen=20
elseif &ttimeoutlen > 60 || &ttimeoutlen <= 0
set ttimeoutlen=60
endif

如果外层已经有一个 tmux 了,那么 tmux 服务相对 vim 是本地通信,可以把 ttimeoutlen 设置短一些,因为是本地网路传输,否则长一点。

这样就不会因为 tmux 的超时设置影响 vim 里面的超时判断的时间了。

第二:tmux 快捷键要修改么?

不少人不修改默认的 prefix CTRL+b 就直接用了,我只能说 tmux 的这个默认快捷键设计的很糟糕,很多软体都在用 CTRL+b:

  • bash/python/zsh:所有基于 readline 写的命令行软体,CTRL+B 都用作 「游标左移」
  • emacs/nano/info:大量编辑器/文档阅读器中 CTRL+B 同样被用作「游标左移」
  • vim:CTRL+B 是向后翻页的意思

可以看得出来,CTRL+B是一个高频使用的按键,要高效的使用上述软体,CTRL+B必不可少,所以除非你不用上面的软体,或者用了却要想办法绕过 CTRL+B 换用更麻烦的方式。否则的话,tmux 快捷键请选择一个不太常用的组合。

比如我用的:

ALT+`

就是 ALT 和 1左边那个按钮一起按,我没有在任何软体里面发现有这个快捷组合,留给 tmux 正好,如果你的终端 ALT 键支持有问题,搞不定的话,还可以用:

  • CTRL+A:至少不像 CTRL+B 那么常用,但是不少软体也还是会用到。
  • CTRL+Z:有些软体用,bash下用于将进程挂到后台,但是频率不算高,按两次也行。
  • CTRL+_:就是 CTRL+减号(mintty/wsltty下面是按 CTRL+/),很好的避开了字母区。
  • CTRL+:CTRL+反斜杠,也很好的避开了字母区。
  • CTRL+@:就是 CTRL+数字2
  • `:直接数字1左边那个键(评论区推荐),该键再各种软体中用的不多,转义也很方便。

这三个快捷键都避开了常用的 CTRL 组合,不容易影响 tmux 里面运行的程序,但就按起来的手感的话,ALT+` 是最好按的,左手拇指按住 ALT,小指按反引号。

比如焦点在不同窗口中移动:

ALT+` H
ALT+` L
ALT+` J
ALT+` K

左手负责先按下 ALT+反引号,右手负责控制跳转方向,明显比其他的前缀更好按

不修改配置文件的情况下,你可以在 tmux 的窗口中用命令行临时更改 tmux 快捷键:

tmux set-option -g prefix c-a
tmux set-option -g prefix c-_
tmux set-option -g prefix c-@
tmux set-option -g prefix c-
tmux set-option -g prefix m-`
tmux set-option -g prefix `

实验好了再固化到 ~/.tmux.conf 中去,比默认的 CTRL+b 合理多了。


推荐阅读:
相关文章