将 Shift+箭头映射到使用 vim 的 tmux 中选择文本

将 Shift+箭头映射到使用 vim 的 tmux 中选择文本

我在 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

最容易出错的是以下两件事:

  1. tmux 和终端对发送的键不一致S-Left,因此 tmux 无法识别终端正在发送的内容。

  2. vim 和 tmux 对按键发送的内容不一致,因此 vim 无法识别 tmux 发送的内容。

您可以运行cat并按下S-Left以查看正在发送的内容。

TERM由于您没有提及 tmux 版本、您正在使用的终端仿真器或您已设置的内容,因此很难太具体,但是:

在 tmux 中你应该看到^[[1;2DS-Left如果没有看到,那么 tmux 可能无法识别终端发送的内容,你应该:

  • 确保TERM在 tmux 外部正确设置。

  • cat确保在S-Lefttmux 外部看到的是^[[1;2D或 与 的输出匹配tput kLFT2|cat -v。如果不是,您需要一个不同的TERM或 来覆盖 tmux 对这些键的期望terminal-overrides

类似地,对于C-Left除了它将是^[[1;5DkLFT5S-RightkRIT2S-UpkUP2S-DownkDN2

如果你确实看到了^[[1;2Dtmux 内部,那么问题很可能出在 vim 上:

  • 如果您的 tmux 版本早于 2.4,请确保xterm-keys设置为开启(set -g xterm-keys on)。

  • 确保TERM在 tmux 中正确设置 - 如果设置为screen,请尝试使用tmux其他选项(如果可用)。您可能需要更改default-terminal选项。

  • 如果这没有帮助,您可能需要在 vim 配置中明确配置键。

相关内容