这一切都在 OS X 上的 iTerm2 中。
我曾经有
export TERM='xterm-256color'
在我的 中.bashrc
。这意味着 tmux 中的 Vim 确实使用了 256 种颜色。
我又补充说
set -g xterm-keys on
然后,带修饰符的键盘快捷键在 Vim 中就可以正常工作了。即:shift+left/right
我将其映射到切换 Vim 选项卡,ctrl+up/down
将其映射到移动(“气泡”)行,以及shift+left/right
在命令行模式下按单词跳转(例如,当输入类似 的内容时)的开箱即用功能:e foo bar baz
。
但是,这种设置存在一个问题,即 Vim 背景颜色仅显示在文本后面,如上所述这里。
所以我删除了
export TERM='xterm-256color'
来自我的.bashrc
,而是把这个放在我的.tmux.conf
:
set -g default-terminal "screen-256color"
这修复了 Vim 的背景颜色,但破坏了键盘快捷键 - 它们会执行意想不到的操作(移动光标、删除文本)。
通过使用ctrl+v
插入组合键的逐字输出(如所述这里),我可以解决这个问题:
map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>
这使得快捷方式可以工作,但感觉这不是正确的解决方案。有人能告诉我这里发生了什么以及如何修复它吗?
答案1
您需要设置tmux窗口选项xterm-keys
,以便tmux会将这些密钥传递到其终端。您可能希望将其放入~/.tmux.conf
:
set-window-option -g xterm-keys on
Vim当 TERM 为 -something 时,通常会自动设置对这些键的处理xterm
,但由于 TERM 为 ,它会跳过这一步screen-256color
。您可以像这样手动配置这些键~/.vimrc
:
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
至少这样你就不必映射所有不同的组合。
答案2
正如这里解释的那样,禁用背景颜色擦除(BCE)通过清除t_ut
终端选项(:set t_ut=
在 Vim 中运行,然后按Control+L刷新终端的显示),以便在 tmux 和 GNU 屏幕内部使用 Vim 时配色方案正常工作。
这样,您可以保持您的TERM
值以xterm-256color
进行正确的键检测,同时还可以获得正确的 Vim 配色方案渲染!:-)