2010-08-21 77 views
7

在Vim中,在正常模式下使用hjkl會很好,並且非常適合在插入模式下繼續使用它們。我試圖把它們映射到CTRL-H,按Ctrl-J,CTRL-K,CTRL-L:您在VIM插入模式下使用哪些鍵<left>,<down>,<up>,<right>命令?

imap <C-h> <left> 
imap <C-j> <down> 
imap <C-k> <up> 
imap <C-l> <right> 

,但也不是很方便,特別是因爲它掩蓋按Ctrl-H和退格停止響應。 您是否能夠以某種方式在插入模式下使用HJKL鍵進行移動?

+5

你爲什麼要在插入模式下使用正常的命令?只需 [hjkl] + i。如果你想要這種行爲,Emacs可能會更方便。 – alternative 2010-08-21 16:59:58

+1

或者使用箭頭鍵......它們實際上對於移動光標更有意義。 :P – cHao 2010-08-21 17:00:56

+3

說真的。插入模式僅用於插入* - 如果您將所有時間花費在插入模式中,則表明您做錯了。 – 2010-08-21 17:02:20

回答

5

我在插入模式下使用雙大寫映射進行各種映射。除非你從某處粘貼文本,否則這種方式非常有效。插入文本之前清除所有插入映射通常比較明智。

所以,你可以嘗試

imap HH <left> 
imap JJ <down> 

等等

很顯然,你需要兩次擊鍵作爲正常的舉動,所以我想,如果你需要導航「遠」這是更好返回導航模式。

+2

您可以還可以鍵入':set paste!'來打開和關閉粘貼模式。粘貼模式禁用imaps,autoindents等,以便您可以方便地粘貼任何東西。你可以創建一個像'map,p:set paste! '也可以更容易。然後',p'會打開粘貼模式(即使你在插入模式下),你只需要再次從普通模式中點擊',p'就可以將它關閉。 – redbmk 2013-04-10 01:01:59

1

請原諒我這麼說,但如果讓他們像普通模式一樣工作會有多大用處。我的意思是,你會用什麼來輸入hjkl呢?

但是,如果你真的想映射他們,當然,只需將它們與<imap> <something-h> <some operation>映射,然後離開你。

雖然我看不出任何一點。如果你想把手放在鍵盤的中間,爲什麼不把jj映射到<Esc>(有些人更喜歡這種方式,所以他們不必將手指從家裏移開)。

+0

我確實有jj映射到esc,並找到一個方便的確實很好的工作是我的問題 – dimus 2010-08-21 17:17:22

+0

@dimus - 好吧,沒有那麼多的選擇。如果我們假設您不會將插入模式下的hjkl映射到運動,那麼您在使用Ctrl,Alt和Shift(這也是不切實際的)組合卡住(在大多數機器上)。請注意,我仍然不明白爲什麼要在插入模式下進行移動(作爲一個10年前的vimmer,我收集到的會習慣於「在插入模式下寫入,在N和E模式下寫入其他所有內容」例程,但是對於他自己的每一個 – Rook 2010-08-21 18:06:20

+0

。在vim中,實際上你可以映射出任何與其他東西結合時產生信號的任何東西(這意味着不是,例如),所以...其餘的由你決定 – Rook 2010-08-21 18:06:39

3

我已將我的常規模式箭頭鍵映射到「泡泡」文本週圍。對於以最小的代價移動代碼塊或文本塊非常有用。

" Useful bubble text normal mapping for arrow keys.                       
nnoremap <UP> ddkP 
nnoremap <DOWN> ddp 
vnoremap <DOWN> xp`[V`] 
vnoremap <UP> xkP`[V`] 

絕對德魯尼爾的情節上VimCasts.org靈感上Bubbling Text

0

我試圖做同樣的事情。我在以下鏈接找到答案:Traversing text in Insert mode

由於某種原因,我仍然不知道,在插入模式下的Ctrl綁定不適用於我。一種替代方法是按Ctrl-O切換到一個命令的正常模式,因此<C-o>h,<C-o>j,<C-o>k,將允許您在插入模式下移動。另外,我用下面的映射,因爲我覺得它比短按<C-o>加H,J,K,L:

inoremap h<Tab> <Left> 
inoremap j<Tab> <Down> 
inoremap k<Tab> <Up> 
inoremap l<Tab> <Right>