而在插入模式在Vim,有任何方法来遍历文本移动一些字符向前和向后除了使用方向键?
如果我在插入模式下按下h, j, k和l,实际字符将打印在屏幕上,而不是在文本中移动。
我现在这样做的方式是不得不诉诸Ctrl + [(Esc)和遍历文本;但很明显,这是没有成效的。
而在插入模式在Vim,有任何方法来遍历文本移动一些字符向前和向后除了使用方向键?
如果我在插入模式下按下h, j, k和l,实际字符将打印在屏幕上,而不是在文本中移动。
我现在这样做的方式是不得不诉诸Ctrl + [(Esc)和遍历文本;但很明显,这是没有成效的。
当前回答
为了在插入模式下有更好的导航,为什么不映射一些键呢?
imap <C-b> <Left>
imap <C-f> <Right>
imap <C-e> <End>
imap <C-a> <Home>
" <C-a> is used to repeat last entered text. Override it, if its not needed
如果您可以在您的终端中使用元键,那么您可以更好地模拟emacs模式。正常模式下的导航更好,但对于较短的移动,它有助于保持插入模式。
对于较长的跳跃,我更喜欢以下默认翻译:
<Meta-b> maps to <Esc><C-left>
这将切换到正常模式并返回一个单词
其他回答
Vim社区的许多人认为不应该在插入模式下导航,因为这不是Vim的方式。我认为这是在从标准编辑器过渡到Vim时学到的错误观点。
当您使用Vim的工具创建原子的、可重复的操作或查找时,Vim是最强大的。
如果您正在修复在同一插入会话中所犯的错误,则可以在插入模式下导航。您不应该在您修改的文本范围之外导航。
如果您在输入文本时出错,并退出插入模式来修复它,您将无法重复预期的操作。将重复修正。
Vim支持许多插入模式导航键。显然有方向键、Home键和结束键,但还有许多其他快捷键。参见:h ins-special-keys。
为了在插入模式下有更好的导航,为什么不映射一些键呢?
imap <C-b> <Left>
imap <C-f> <Right>
imap <C-e> <End>
imap <C-a> <Home>
" <C-a> is used to repeat last entered text. Override it, if its not needed
如果您可以在您的终端中使用元键,那么您可以更好地模拟emacs模式。正常模式下的导航更好,但对于较短的移动,它有助于保持插入模式。
对于较长的跳跃,我更喜欢以下默认翻译:
<Meta-b> maps to <Esc><C-left>
这将切换到正常模式并返回一个单词
是的,有办法。您可以在Insert Mode中使用gj和gk在单个逻辑行中向上(向后)和向下(向前)移动,该逻辑行环绕着许多可视线条。如果你有很长的行和/或宽度较窄的终端,这是很方便的,可以比方向键或按ESC键来使用其他导航快捷键快得多。还可以使用CTRL-O发出一个普通模式命令。这两种导航动作都不会使您退出插入模式。
按ESC键可能会破坏工作效率(在发明Vi时,它在终端键盘上的home行之外)。我处理的文本文件有非常长的逻辑行,整个段落的句子都是纯文本。这两个选择对我来说是一个真正的时间节省。如果我需要在段落中寻找某个特定的单词,切换到正常模式仍然很方便,但很多时候我只需要向上或向下移动一条可视线,然后继续插入。
实际上,我编辑了.vimrc来映射几乎无用的ALT键,所以我的左手按下ALT,而右手使用方向键。(并且它不会转义出插入模式:请注意每个条目末尾的“i”)。
imap <A-UP> <ESC>gki
imap <A-DOWN> <ESC>gji
我还在.vimrc中添加了行,以便我的方向键在正常模式下工作,在由一个逻辑行所包含的许多可视行中上下遍历(代码与上面的相同,只是您使用的是map或nmap而不是imap),我使用键盘的其他导航键ALT-KEY,都在插入模式中。
我为我的ALT键添加了额外的导航行,以便与键盘上预先分配的导航键一起使用,以便在插入模式下更快地导航。这些都不会让你退出插入模式:
" <ALT> navigation within insert-mode
imap <A-UP> <ESC>gki
imap <A-DOWN> <ESC>gji
imap <A-LEFT> <ESC>bi
imap <A-RIGHT> <ESC>ea
imap <A-END> <ESC>A
imap <A-PageUp> <ESC>(i
imap <A-PageDown> <ESC>l)i
imap <A-Home> <Esc>I
" so that <ALT> behaves the same in normal mode
nmap <A-UP> gk
nmap <A-DOWN> gj
nmap <A-LEFT> b
nmap <A-RIGHT> le
nmap <A-END> $
nmap <A-PageUp> (
nmap <A-PageDown> )
nmap <A-Home> ^
My "within" insert-mode navigation short cuts utilize the ALT key with PgUp, PgDn, Home & End keys too, to jump around far more quickly. I use alt-pgup and alt-pgdn presses to jump forward or backward by sentences. And, I use alt-home and alt-end to jump to the beginning and end of my paragraph long logical lines. None of this escapes me out of insert mode. (I figured that I might as well program all the preassigned navigation keys to work quickly within insert-mode, without leaving it). And if I want to move one character at a time, I just let up on the ALT key while still using the arrow keys.
所有这些都是对.vimrc的简单修改。您可以发挥创意,做各种事情来改进插入模式下的导航。否则,如果在长行中使用插入模式下的普通ole箭头键,则需要在右手按住方向键的同时,左手拿着一杯咖啡来啜饮。那要花很长时间!
顺便说一下,这个键已经与所有其他正常模式导航命令一起工作了,比如h,j,k,l和w, w, b, b, e和search: /,%等。除了它会自动退出插入模式,而无需按ESC键。因此,使用正常模式导航字符会让你陷入正常模式,直到你努力再按i, i, a, a, o, o, o,我发现这很容易忘记。
Since the keyboards preassigned navigation commands: arrows: UP, DOWN, RIGHT, LEFT and PGUP, PGDN, HOME, END don't do anything special with the key, I found that I might as well map them out in .vimrc to help my navigation within insert-mode, while staying within insert-mode. And, to reiterate, its helpful to me because I work with very long text documents that have paragraph long logical-lines that span across a lot of visual-lines, and the arrow keys and h,j,k,l don't acknowledge the visual-lines. This fixes that particular problem, both within insert-mode and normal-mode.
我把这归功于我在Kim Schulz的HACKING VIM 7.2一书中找到的知识
在插入模式下,使用CtrlO切换到正常模式,只执行一个命令:
CTRL-O h move cursor left
CTRL-O l move cursor right
CTRL-O j move cursor down
CTRL-O k move cursor up
这可能是做你想做的事情的最简单的方法,也很容易记住。
插入模式中其他非常有用的控制键:
CTRL-W delete word to the left of cursor
CTRL-O D delete everything to the right of cursor
CTRL-U delete everything to the left of cursor
CTRL-H backspace/delete
CTRL-J insert newline (easier than reaching for the return key)
CTRL-T indent current line
CTRL-D un-indent current line
这将消除许多浪费的开关回到正常模式。
我相信Home和End(以及PageUp/PageDn)在插入模式下也能正常工作,但除此之外,我不相信还有其他为文本遍历定义的标准键。