终端发送箭头键作为以Esc
开头的序列。在Vim中,有一个选项'esckeys'
,它允许以Esc
开头的键在插入模式下工作。它是以牺牲实际Esc
键为代价来实现的,因为Vim不再知道您是只是按Esc
还是开始拼写箭头键。
以下是我希望能够在插入模式下执行的操作:
Esc
并立即退出插入模式。我已经有了解决方案的开端。即使使用:set noesckeys
,我仍然可以将密钥映射到<Up>
,如下所示:
imap q <Up>
当然,q
不是使光标上升的好钥匙。相反,我想将我的终端模拟器的箭头键映射到不以Esc
开头的东西(就像我永远不会输入的一些随机Unicode字符)然后imap
那些指向方向在Vim。
问题在于:当我离开Vim时,我的箭头键将停止工作。只有Vim知道他们现在的意思。
我在iTerm2里面的tmux里面工作。有没有办法只在一个tmux窗格中生成这样的绑定?或者让Vim告知tmux它应该在运行时使用疯狂的箭头键绑定?还有其他想法吗?
(顺便说一下,我很乐意在插入模式下完全没有使用箭头键,但我会与期望他们工作的人配对,我想成为一个有礼貌的一对。)
答案 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文件中,或仅在编辑器中进行设置以查看其是否有效。