在插入模式遍历文本在插入模式遍历文本(Traversing text in Insert mode)

2019-05-12 12:01发布

插入模式在Vim中,有没有什么办法来遍历文本移动一些字符向前和向后除了使用箭头键?

如果我按H,J,KL,而在插入模式,实际的字符被打印在屏幕上,而不是通过在文本上移动。

我做它此刻的方法是不必诉诸按Ctrl + [(ESC)和遍历文本即可; 但显然这不是生产力。

Answer 1:

你似乎滥用VIM,但是这可能是因为不是很熟悉它。

正确的方法按下Esc键 ,去你想要做小幅盘整,修复它,回去继续编辑。 因为Vim已经超过了平时的性格变得更多运动前进/后退/上/下它是有效的。 当你了解更多的人,会出现这种情况,以提高工作效率。

这里有一对夫妇的使用情况:

  • 你偶然的“accifentally”。 没问题,序列Esc键 F f [R d A将纠正错误,让你回到你去过的地方进行编辑。 量F f运动将带你回到第一个遇到的“F”字。 < - - > - > - > -Ctrl +比较> 德尔 d 结束 ,但这在一个偶然的编辑几乎是相同的,但需要更多的按键,让你移动你的手离开键盘的字母数字空间。
  • 您不小心输入了“不小心输入了”,但要纠正它“你故意输入”。 然后Esc键 2 B C 将删除你要修复并为您带来插入模式的话,那么您可以立即重打。 要回到编辑,只需按一个 ,而不是结束 ,以达到你应该将你的手
  • 你偶然的“鼠标”,而不是“老鼠”。 没问题-美好的旧按Ctrl + W将删除前一个字不从插入方式走出去。 而它正好是更快抹去小词,而不是在它修复错误。 我很习惯了,我已经关闭了浏览器页面时,我打字此消息...
  • 重复计数主要是充分利用。 做运动之前,您可以键入数字; 和运动将重复这个次数。 例如,1个 5 小时 将带给你15个字符回来,4j会滚动你4线下来。 开始使用它们,你会很快得到使用和发现,按10倍< -键比迭代方法不太快速移动光标,当你输入1 2 小时 ,你犯了一个错误,并立即用L L纠正自己的通知。

但是,如果你想做小文遍历无需离开插入模式,遵循rson的建议并使用Ctrl + O。 作为一个例子, 按Ctrl + 华氏度 + F将您移动到前面f性格,让你在插入模式。



Answer 2:

而在插入模式 ,使用Ctrl O操作进入正常模式只是一个命令:

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

这将消除许多浪费切换回正常模式。



Answer 3:

插入模式

运动

hjkl

尽管有什么帕维尔Shved 说 -这可能是更明智的习惯大法坪Esc键插入模式-这里是设置映射插入模式中快速导航的例子:

" provide hjkl movements in Insert mode via the <Alt> modifier key
inoremap <A-h> <C-o>h
inoremap <A-j> <C-o>j
inoremap <A-k> <C-o>k
inoremap <A-l> <C-o>l

这将使Alt + H 在插入模式去一个字符左,Alt键 + J降等,类似于到h J K L在正常模式下。

你必须代码复制到你的vimrc文件把它加载每次启动VIM(您可以通过键入打开时间:new $myvimrc在普通模式开始)。


任何普通模式运动

由于Alt修饰键没有映射(对一些重要的事情)在默认情况下,你可以以同样的方式拉其他(或全部)功能,在普通模式下插入模式。 例如:
移动到当前字使用Alt + B的开头:

inoremap <A-b> <C-o>b
inoremap <A-w> <C-o>w


(在插入模式Alt键的其他用途)

值得一提的是,有可能是Alt键更好的使用比复制正常模式下的行为:比如这里有复制映射从相邻行从当前列到行的结尾部分:

" Insert the rest of the line below the cursor.
" Mnemonic: Elevate characters from below line
inoremap <A-e> 
    \<Esc>
    \jl
        \y$
    \hk
        \p
        \a
" Insert the rest of the line above the cursor.
" Mnemonic:  Y depicts a funnel, through which the above line's characters pour onto the current line.
inoremap <A-y> 
    \<Esc>
    \kl
        \y$
    \hj
        \p
        \a

(我使用\ 续行和缩进,以增加清晰度-命令被解释为如果写在一行上。)


内置热键编辑

CTRL-H   delete the character  in front of the cursor (same as <Backspace>)
CTRL-W   delete the word       in front of the cursor
CTRL-U   delete all characters in front of the cursor (influenced by the 'backspace' option)

(有插入模式运动没有显着内置的热键)。

参考: :help insert-index


命令行模式

这组映射使得上Alt + hjkl 移动在命令行可供选择:

" provide hjkl movements in Command-line mode via the <Alt> modifier key
cnoremap <A-h> <Left>
cnoremap <A-j> <Down>
cnoremap <A-k> <Up>
cnoremap <A-l> <Right>

另外,这些映射添加动作都插入模式和命令行模式一气呵成:

" provide hjkl movements in Insert mode and Command-line mode via the <Alt> modifier key
noremap! <A-h> <Left>
noremap! <A-j> <Down>
noremap! <A-k> <Up>
noremap! <A-l> <Right>


拉普通模式的映射命令, 命令的命令行模式看起来有点从插入模式映射命令不同(因为命令行模式缺乏插入模式的按Ctrl + O):

" Normal mode command(s) go… --v <-- here
cnoremap <expr> <A-h> &cedit. 'h' .'<C-c>'
cnoremap <expr> <A-j> &cedit. 'j' .'<C-c>'
cnoremap <expr> <A-k> &cedit. 'k' .'<C-c>'
cnoremap <expr> <A-l> &cedit. 'l' .'<C-c>'

cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>'
cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'


内置热键移动和编辑

CTRL-B       cursor to beginning of command-line
CTRL-E       cursor to end       of command-line

CTRL-F       opens the command-line window (unless a different key is specified in 'cedit')

CTRL-H       delete the character  in front of the cursor (same as <Backspace>)
CTRL-W       delete the word       in front of the cursor
CTRL-U       delete all characters in front of the cursor

CTRL-P       recall previous command-line from history (that matches pattern in front of the cursor)
CTRL-N       recall next     command-line from history (that matches pattern in front of the cursor)
<Up>         recall previous command-line from history (that matches pattern in front of the cursor)
<Down>       recall next     command-line from history (that matches pattern in front of the cursor)
<S-Up>       recall previous command-line from history
<S-Down>     recall next     command-line from history
<PageUp>     recall previous command-line from history
<PageDown>   recall next     command-line from history

<S-Left>     cursor one word left
<C-Left>     cursor one word left
<S-Right>    cursor one word right
<C-Right>    cursor one word right

<LeftMouse>  cursor at mouse click

参考: :help ex-edit-index



Answer 4:

如果你是一个纯粹的VIM,跳过下面的答案。 OTOH,如果你是新的VIM,并正在寻找一些有用的提示你在Vim教程和博客的好几百不会找到,阅读... :-)

几个非正统(VIM)的方式

这是2014年,和人谁是最近才回到vim我能提供的视图和提示一些,可能逆势而上,点。

使用Shift +左或Shift +向右穿越的话

虽然重复是vim的一个强大的概念,我(个人)觉得奇怪的是使用它或者强迫我来算(行,字,词等)或进行猜测。 我的大脑通常的工作原理是:“我希望光标那里 ”,而不是像“我希望光标_5_words_to_the_left_”。 很快能够移动光标,并直观地观察插入点这种方式可以让我保持我的脑海里什么我编辑,而不必计算我需要多少跳做出去的地步,我需要修改。

打开鼠标模式,然后使用鼠标滚轮和点击

...浏览文本的大型机构。

大多数(全部)现代计算机有密切的键盘(如MacBook笔记本)集成触摸板 。 工业设计师们花了很多人年优化这些设计使得具有移动手离开键盘的老问题不再是一个真正的问题。 好吧,这是,如果你使用鼠标和不喜欢切换,但对于任何新VIM(像那些可能会发现通过搜索这篇文章),这不应该是太大的问题。

作为奖励,单击并拖动使您的视觉模式

启用鼠标,点击并拖动具有切换到视觉模式和标记的区域为粘贴的效果。

而使用滚轮

使用鼠标(轮)左右滚动,然后单击定位光标(杜)只是工作。 见http://usevim.com/2012/05/16/mouse/更多关于这一点。

所以...

这些是根据输入的喜好我会打电话给更多的现代(使用鼠标,滚轮等)在vim导航的方式,同样有效。

HTH



Answer 5:

很多人在Vim的社区认为你不应该在插入模式下浏览,这不是Vim的方式。 我认为这是一个不正确的情绪从标准的编辑器Vim的过渡时的经验教训。

当你使用它的工具来创建原子,重复的动作或者发现的Vim是最强大的。

这是确定的,如果你是固定你在相同的插入会犯了一个错误插入模式下浏览时 你不应该浏览文本的修改过的范围之外。

如果你犯了一个错误,同时输入文本和逃出插入模式来解决它,你将不能够重复预定的动作, . 将重复校正。

Vim也支持许多插入模式导航键。 显然,有箭头键,Home和End,但也有许多其他的快捷方式。 参见:h ins-special-keys



Answer 6:

在gVim的,你可以使用鼠标。 但说实话,有什么错误使用箭头键? 还有一个原因,为什么他们是在键盘上。



Answer 7:

要在插入模式好一点的导航,为什么不映射某些键?

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

如果你能解决让你的终端Meta键的工作,你可以模拟emacs模式更好。 在正常模式下的导航是更好的方式,但对于较短的运动有助于保持在插入模式。

对于较长的跳跃,我更喜欢下面的默认翻译:

<Meta-b>    maps to     <Esc><C-left>

这转变为正常模式 ,并回到一个字



Answer 8:

我相信,HomeEnd(上一页 / PageDn)也通常在插入模式下工作,但除此之外,我不相信有文字遍历定义的任何其他标准键。



Answer 9:

您可以创建在插​​入模式下工作的映射。 做到这一点的方式是通过inoremap。 注意“我”在命令的开始(noremap是避免密钥映射碰撞有用)。 推论是用于“正常”模式“N”。 你可以猜测什么VIM认为是“正常的”;)

但是,你真的想使用文本“正常”模式,方便浏览。 Vim的是超在这种事情和所有的功率可从正常模式。 Vim中已经提供了简便的方法从正常模式去插入模式(例如,I,I,A,A,O,O)。 诀窍是可以很容易地进入正常模式。 要做到这一点的方法是重新映射逃生更关键的无限便捷。 但你需要一个不会与正常打字冲突。 我用:

inoremap jj <Esc>

由于JJ(这是2 J的输入对方后迅速之一)似乎并没有出现在我的词汇量。 其他的将重新映射到它的舒适。

我会让对方本质的变化就是改用我的键盘上的CAPSLOCK和控制键(使用主机电脑的键盘配置),因为我几乎从来不使用大写锁定,它有,我想它是又大又漂亮右。 (此为Emacs用户是常见的。缺点是当你发现自己的“不固定”键盘上的!Aaarggh!)

一旦你重新映射CAPSLOCK,你可以舒适地使用下面的插入模式重新映射:

某些键在插入模式已经映射牢记(向后杀字是CW(控制-W)默认情况下,你可能已经有您想要的绑定。也就是说,我宁愿章所以在我的.vimrc我有:

inoremap <C-h> <C-w>

但你可能要在正常模式下的相同肌肉记忆痉挛,所以我也映射为章:

nnoremap <C-h> db

(d)elete(B)ackwards完成使用相同的密钥和弦同样的事情。 这种快速编辑的是,我觉得有用的实践错别字。 但坚持到正常模式文本和什么比杀死前一个单词多走动。 一旦你进入改变模式(当然,使用重映射)的习惯,它会比重新映射插入模式更有效。



Answer 10:

很抱歉,但VIM不工作的方式。

您应该切换到“正常”模式下,导航,然后回去再重新插入。



Answer 11:

你可以使用imap在插入模式下任意键映射到一个光标键。 像这样:

imap h <Left>

现在^ h就像在正常模式下,移动光标。 (采用此方法映射h是显然是一个不错的选择)

说了这么多,我不认为在使用VIM文本走动的标准方式是“不生产”。 有很多非常强大的穿越在正常模式下的文本的方法(如用W和B,或/和?,或F和F等)



Answer 12:

对于一些经常使用的移动和动作,我已经定义了以下映射。 这样可以节省一次击键相比CTRL + O组合,因为我需要他们经常,他们在支付从长远来看。

inoremap <A-$> <C-o>$
inoremap <A-^> <C-o>^
inoremap <A-h> <Left>
inoremap <A-l> <Right>
inoremap <A-O> <C-O>O
inoremap <A-o> <C-o>o


文章来源: Traversing text in Insert mode
标签: vim vi