在Vim中,如何使Esc和箭头键在插入模式下工作?

时间:2012-01-11 03:40:09

标签: vim tmux

终端发送箭头键作为以Esc开头的序列。在Vim中,有一个选项'esckeys',它允许以Esc开头的键在插入模式下工作。它是以牺牲实际Esc键为代价来实现的,因为Vim不再知道您是只是按Esc还是开始拼写箭头键。

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

  1. 按箭头键使光标朝这个方向移动,然后
  2. Esc并立即退出插入模式。
  3. 我已经有了解决方案的开端。即使使用:set noesckeys,我仍然可以将密钥映射到<Up>,如下所示:

    imap q <Up>
    

    当然,q不是使光标上升的好钥匙。相反,我想将我的终端模拟器的箭头键映射到不以Esc开头的东西(就像我永远不会输入的一些随机Unicode字符)然后imap那些指向方向在Vim。

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

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

    (顺便说一下,我很乐意在插入模式下完全没有使用箭头键,但我会与期望他们工作的人配对,我想成为一个有礼貌的一对。)

4 个答案:

答案 0 :(得分:6)

究竟是什么问题?你的箭头键是否在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

答案 1 :(得分:2)

只需将ttimeoutlen(注意:两个前导t,而不是一个)设置为非常小的值。类似于10毫秒的东西,但即使零也可以工作。对于任何正ttimeoutlen你将几乎立即退出(它将等待该毫秒数),将其设置为零它应该是立即的(意味着它不会等待箭头键完全完成:要么整个序列是在stdin缓冲区中它被认为是一个箭头键,它被认为是一个独立字符序列)。我有100毫秒,没有注意到这个超时。

答案 2 :(得分:0)

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

 set t_ku=^[OA
 set t_kd=^[OB
 set t_kr=^[OC
 set t_kl=^[OD

答案 3 :(得分:0)

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

您可以将其放在.vimrc文件中,或仅在编辑器中进行设置以查看其是否有效。