我在 Linux 中使用 vim,最近也开始使用 tmux。我使用 vim 的 Windows 快捷键而不是 vim 的快捷键,例如:Shift+箭头用于选择而不是 HJKL,Shift+箭头用于选择文本,Ctrl+C 复制,Ctrl+V 粘贴,Ctrl+箭头用于导航。
自从使用 tmux 转到 vim 后,我遇到了一个问题,当我在 tmux 中使用 vim 时,我无法使用 Shift+箭头选择文本,因为这会删除行。我怀疑 tmux 绑定和 Windows 快捷方式之间存在冲突。当我使用 Ctrl+箭头时也是如此。我想在单词之间导航,但由于某些特殊原因,这会删除文本。
我是否可以更改任何内容~/.tmux.conf
以删除它并允许我在 vim 中使用 Shift+Arrows 进行选择?到目前为止,我不愿意更改为传统的 vim 绑定。
我还注意到 GNU screen 中也存在同样的问题,所以它并非 tmux 独有的。
我想问的是,在终端多路复用器中,如何才能让我的终端和 vim 正常运行?
任何帮助将不胜感激。
答案1
最容易出错的是以下两件事:
tmux 和终端对发送的键不一致
S-Left
,因此 tmux 无法识别终端正在发送的内容。vim 和 tmux 对按键发送的内容不一致,因此 vim 无法识别 tmux 发送的内容。
您可以运行cat
并按下S-Left
以查看正在发送的内容。
TERM
由于您没有提及 tmux 版本、您正在使用的终端仿真器或您已设置的内容,因此很难太具体,但是:
在 tmux 中你应该看到^[[1;2D
。S-Left
如果没有看到,那么 tmux 可能无法识别终端发送的内容,你应该:
确保
TERM
在 tmux 外部正确设置。cat
确保在S-Left
tmux 外部看到的是^[[1;2D
或 与 的输出匹配tput kLFT2|cat -v
。如果不是,您需要一个不同的TERM
或 来覆盖 tmux 对这些键的期望terminal-overrides
。
类似地,对于C-Left
除了它将是^[[1;5D
和kLFT5
。S-Right
是kRIT2
,S-Up
是kUP2
和S-Down
是kDN2
。
如果你确实看到了^[[1;2D
tmux 内部,那么问题很可能出在 vim 上:
如果您的 tmux 版本早于 2.4,请确保
xterm-keys
设置为开启(set -g xterm-keys on
)。确保
TERM
在 tmux 中正确设置 - 如果设置为screen
,请尝试使用tmux
其他选项(如果可用)。您可能需要更改default-terminal
选项。如果这没有帮助,您可能需要在 vim 配置中明确配置键。