4

终端将箭头键作为以 开头的序列发送Esc。在 Vim 中,有一个选项'esckeys'可以让以插入模式开始的键Esc工作。它这样做的代价是实际Esc键立即响应,因为 Vim 不再知道您是在按下Esc还是开始拼写箭头键。

这是我希望能够在插入模式下执行的操作:

  1. 按箭头键并使光标朝该方向移动,然后
  2. 按下Esc并立即离开插入模式。

我已经有了解决方案的开始。即使使用:set noesckeys,我仍然可以将键映射为<Up>这样:

imap q <Up>

当然,q让光标上去也不是一个好键。相反,我想将我的箭头键映射到我的终端仿真器到不以开头的东西Esc(比如一些我永远不会输入的随机 Unicode 字符),然后映射imap到 Vim 中的方向。

问题是:当我离开 Vim 时,我的箭头键将停止工作。现在只有 Vim 知道它们的意思。

我在 iTerm2 中的 tmux 中工作。有没有办法让这样的绑定只存在于一个 tmux 窗格中?或者让 Vim 通知 tmux 它应该在运行时使用疯狂的箭头键绑定?还有其他想法吗?

(顺便说一句,我很高兴自己根本不在插入模式下使用箭头键,但我与希望他们工作的人配对,我想成为有礼貌的一对。)

4

4 回答 4

7

你的问题到底是什么?您的箭头键在 Vim 中是否有效?他们是否在 tmux 中工作?

我曾经在 Vim/tmux 中使用箭头键显示控制字符(...)时遇到问题[A[B我通过添加解决了这个问题

nnoremap <Esc>A <up>
nnoremap <Esc>B <down>
nnoremap <Esc>C <right>
nnoremap <Esc>D <left>
inoremap <Esc>A <up>
inoremap <Esc>B <down>
inoremap <Esc>C <right>
inoremap <Esc>D <left>

到我的~/.vimrc.

于 2012-01-11T06:19:26.957 回答
3

只需将ttimeoutlen(注意:两个前导ts,而不是一个)设置为非常小的值。大约 10 毫秒,但即使为零也可以工作。使用任何正的 ttimeoutlen 您将几乎立即退出(它将等待该毫秒数),将其设置为零它应该是立即的(这意味着它根本不会等待箭头键完成:要么整个序列是在标准输入缓冲区中,它被认为是箭头键与否,它被认为是独立字符的序列)。我有 100 毫秒并且没有注意到这个超时。

于 2013-03-25T16:49:06.567 回答
1

如果有人使用 Windows 10 来到这里,我可以告诉你什么对我有用。:set term=ansi

你可以把它放在你的 .vimrc 文件中,或者只是在编辑器中设置它,看看它是否可以工作。

于 2018-07-11T15:10:44.777 回答
0

这对我有用:将以下行添加到您的 .vimrc 文件中(键入 Ctrl-V 并向上按光标以获取 ^[OA ...):

 set t_ku=^[OA
 set t_kd=^[OB
 set t_kr=^[OC
 set t_kl=^[OD
于 2013-03-25T09:20:58.283 回答