2012-01-11 54 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 
相關問題