我喜欢在插入模式下更改光标形状,但是在通过tmux进行ssh时我无法正确配置。以下是我的发现:
我的本地计算机正在运行OS X Sierra,我的远程计算机是CentOS 7.我认为这些都是相关的dotfile设置,如果请求将发布其他设置:
=== ~/.tmux.conf
(在本地和远程计算机上)===
set-option -g default-terminal "screen-256color"
set-option -g xterm-keys on
=== ~/.vimrc
(在远程机器上)===
if empty($TMUX)
let &t_SI = "\<Esc>]50;CursorShape=1\x7" " Vertical bar in insert mode
let &t_EI = "\<Esc>]50;CursorShape=0\x7" " Block in normal mode
else
let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
endif
if &term =~ '^screen'
" tmux will send xterm-style keys when its xterm-keys option is on
execute "set <xUp>=\e[1;*A"
execute "set <xDown>=\e[1;*B"
execute "set <xRight>=\e[1;*C"
execute "set <xLeft>=\e[1;*D"
endif
作为旁注,在任何这些情况下,光标形状似乎永远不会与mosh一起使用。我认为这是一个mosh限制,但如果有人有办法让它与mosh合作会特别有用。
答案 0 :(得分:3)
首先,您应该使用其他转义码。 iTerm2支持xterm DECSCUSR扩展来设置光标形状,因此不需要使用专有的转义码。这三行告诉vim使用xterm代码:
set t_SI=^[[6\ q
set t_SR=^[[4\ q
set t_EI=^[[2\ q
重要提示:^[
是一个字符。您可以按Ctrl-V
输入,然后退出。
我添加了t_SR
来更改替换模式中的光标。
tmux知道这些光标形状代码,因此您无需检查是否在tmux会话中。此外,tmux会自动跟踪不同窗格的光标形状(使用专有代码无法实现)。这些代码也适用于许多其他终端仿真器,例如所有基于VTE的终端仿真器(gnome终端,tilda,xfce终端......)。
之后,本地tmux会话中的vim应该按预期工作,但是需要一些额外的工作才能让它在ssh上运行。默认情况下,如果外部终端为xterm
(或类似xterm-256color
之类的东西),则tmux仅接受游标形状更改。在本地计算机上,一切都很好,因为iTerm2是您的外部终端,并将$TERM
设置为xterm-256color
。使用ssh时,您的本地tmux会话将成为外部终端,并将$TERM
设置为screen-256color
。因此,在连接基于屏幕的终端仿真器时,必须告知远程计算机上的tmux传递光标形状转义码。为此,您可以使用terminal-overrides
选项:
set -ga terminal-overrides ",screen*:Ss=^[[%p1%d q:Se=^[[2 q"
^[
又是一个角色。
重新启动tmux会话,光标形状应在本地和远程计算机上更改。