2010-08-21 78 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>