Vim多行编辑就像在sublimetext?

我开始使用gvim,并且我不太明白gvim中的多行编辑是如何工作的。

例如:

原文:

asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; 

Ctrl + q,jjjjjj,$一切都被选中,然后我按我来做一个多行插入。

我的意图是在第一行插入引号,然后按Esc:

 asd "asd asd" asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; 

发生了什么? 我期待一个类似sublimetext的行为:

在这里输入图像说明

如果你不知道如何工作,它只是重复每一行的行动。 怎么能做到这一点? vim在这里做什么?

通过删除Windows兼容层来帮助自己。 进入可视化块模式的正常快捷方式是<Cv>

其他人已经处理录制macros,这里有一些其他的想法:

只使用可视块模式。

  1. 把光标放在第二个单词上:

     asd |a|sd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; 
  2. 点击<Cv>进入可视化块模式并向下扩展您的select:

     asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; 
  3. I"<Esc>获得:

     asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; 
  4. 把光标放在第三个单词的最后一个字符上:

     asd "asd as|d| asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; 
  5. 点击<Cv>进入可视化块模式并向下扩展您的select:

     asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; 
  6. A"<Esc>来获得:

     asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; 

使用可视块模式和Surround.vim 。

  1. 把光标放在第二个单词上:

     asd |a|sd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; 
  2. 点击<Cv>进入可视化块模式,并向右下方展开您的select:

     asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; 
  3. 击中s"获得:

     asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; 

视线模式和:normal

  1. V来select整条线并向底部展开:

     [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] 
  2. 执行这个命令: :'<,'>norm ^wi"<Cv><Esc>eea"<CR>来获得:

     asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; 
    • :norm[al]允许你在一系列的行上执行正常模式的命令( '<,'>部分是由Vim自动添加的,意思是“作用于选定的区域”)

    • ^把光标放在行的第一个字符上

    • w移到下一个单词

    • i"在光标前插入一个"

    • <Cv><Esc>是Vim在此上下文中input控制字符的方式,这里是用来退出插入模式的<Esc>

    • ee移动到下一个单词的末尾

    • 光标后面有a"附加一个"

    • <CR>执行该命令

    使用Surround.vim,上面的命令变成

     :'<,'>norm ^wvees"<CR> 

这些是上面给出的一些很好的现成的解决scheme,但是我们也可以尝试一些提供像Sublime这样的多个游标的插件。

我认为这个看起来很有希望:

似乎放弃了一段时间,但在2014年有一些贡献。

这是相当强大的,虽然我花了一点时间去适应stream量(这是相当崇高的,但仍然模态像Vim)。

根据我的经验,如果你有很多其他的插件安装,你可能会遇到一些冲突!

还有一些其他的尝试在这个function:

如果您发现任何正在改进的情况,请随时编辑。

有几种方法可以在Vim中完成。 我不知道哪一个与Sublime Text最相似。


第一个将通过多行插入模式 。 将光标移到第一行的第二个“a”,按下Ctrl-V ,select所有行,然后按I ,然后放入一个双引号。 按<esc>键将重复每一行的操作。


第二个是通过macros。 把光标放在第一个字符上,然后用qa开始录制一个macros。 用llll进入右边,用a ,进入插入模式,放下一个双引号,退出插入模式,然后用<home> (或等效)返回到你的行的开头。 按j向下移动一行。 用q停止录音。 然后用@a重播macros。 几次。


以上任何一种方法都适合你吗?

如果你使用“全局”命令,你可以在一个在线的任意行上重复你可以做的事情。

 :g/<search>/.<your ex command> 

例:

 :g/foo/.s/bar/baz/g 

上面的命令查找所有具有foo的行,并用bazreplace该行上所有出现的行。

 :g/.*/ 

将在每一行上做

我不确定vim在做什么,但这是一个有趣的效果。 你描述你想要的方式听起来更像是macros如何工作( :help macro )。 像这样的事情会做你想要的macros(从正常模式开始):

  1. qa :将macroslogging到寄存器。
  2. 0w0开始行, w跳一个字。
  3. i"<Esc> :进入插入模式,插入一个"并返回到正常模式。
  4. 2e :跳到第二个单词的结尾。
  5. a"<Esc> :追加一个"
  6. jq移到下一行并结束macros录制。

综合起来: qa0wi"<Esc>2ea"<Esc>

现在你可以用@a来执行macros,用@@重复上一个macros。 要应用到文件的其余部分,请执行类似于99@a (假定您的行数不超过99行),macros执行将在文件结束时结束。

以下是如何使用visual-block-mode (以正常模式启动)实现你想要的function:

  1. 导航到你想要的第一个报价。
  2. 进入visual-block-mode ,select你想要影响的行, G去文件的底部。
  3. I"<Esc>
  4. 移动到你想插入的下一个点"
  5. 你想重复你刚刚做的这么简单. 就足够了。
 Ctrl-v ................ start visual block selection 6j .................... go down 6 lines I" .................... inserts " at the beginning <Esc><Esc> ............ finishes start 2fdl. ................. second 'd' l (goes right) . (repeats insertion)