2012-01-11 59 views
2

终端发送箭头键作为以Esc开头的序列。在Vim中,有一个选项'esckeys',它允许以Esc开头的键以插入模式工作。它会以实际的Esc键为代价立即做出响应,因为Vim不再知道你是在按Esc还是开始拼写箭头键。在Vim中,如何让Esc和箭头键在插入模式下工作?

这里是希望我能在插入模式做到:

  1. 按箭头键,并有光标在那个方向去,
  2. Esc离开插入模式立即。

我已经有了解决方案的开始。即使:set noesckeys,我还可以一键映射到<Up>像这样:

imap q <Up> 

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

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

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

(顺便说一句,我很乐意只是没有在所有插入模式使用箭头键,不过我与谁想到他们工作的人对,我想成为一个有礼貌的对。)

+0

你使用什么终端?在gnome终端,xterm和OSX的终端中,我的箭头键的工作方式与在tmux内部运行vim的插入模式下所期望的完全相同。 – 2012-01-11 04:06:04

+0

我正在使用iTerm2。箭头键可以工作,但只能用'set esckeys'。我澄清了这个问题。 – Peeja 2012-01-11 13:58:59

回答

2

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

5

你确切的问题是什么?你的箭头键是否在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解决了这个问题。

+0

他们使用'set esckeys'工作,但我希望让'Esc'立即离开插入模式,这是'esckeys'无法做到的,因为Vim不知道我是否只是按下'Esc'或开始拼写一个箭头键。我澄清了这个问题。 – Peeja 2012-01-11 13:58:24

+0

我没有'set esckeys'。上面的映射被专门定义为提供没有'esckeys'的箭头导航。如果你坚持使用'set esckeys',':help esckeys'会给你答案('timeoutlen')。 – romainl 2012-01-11 15:03:50

+0

我的问题是:我如何在插入模式下使用箭头键,并让'Esc'立即*使我脱离插入模式*(没有超时)。 – Peeja 2012-01-12 01:42:56

0

这个工作对我来说:将下列行添加到您的.vimrc文件(按Ctrl-V,然后按光标为^ [OA ...):

set t_ku=^[OA 
set t_kd=^[OB 
set t_kr=^[OC 
set t_kl=^[OD 
相关问题