如何在Vim上的多行多个位置粘贴相同的文本

时间:2014-07-25 10:28:57

标签: vim macvim

我最近用iTerm2将我的TextEditor从Sublime Text切换到Vim。

我正在寻找一个插件来在Vim上的多行多重位置粘贴文本。

(类似于Sublime Text上的multicursor,我可以选择光标并使用CMD +点击在其他位置选择然后粘贴。)

我看过vim-multiple-cursors插件,但它只允许我选择下次出现的同一个单词。

例如 - 将光标放在不同行的不同位置,如下所示。

第1行:Lorem ipsum dolor坐下来, [CURSOR HERE] consectetuer adipiscing elit。 Aenean
第2行:commodo ligula [CURSOR HERE] eget dolor。 Aenean massa。 Cum sociis natoque
第3行:penatibus et magnis dis parturient montes, [CURSOR HERE] nascetur ridiculus mus。
第4行:Donec [CURSOR HERE] quam felis,ultricies nec,pellentesque eu,pretium quis,sem。

非常感谢您的帮助,非常感谢。

VIM版

VIM - Vi IMproved 7.4(2013年8月10日,2014年4月21日编译14:54:22)

MacOS X(unix)版本

3 个答案:

答案 0 :(得分:3)

警告

我建议不要试图将以前的编辑习惯改为Vim;毕竟,Vim基于模式的编辑和基于命令的语法是它的distingishing功能,并使编辑高效。

Vim方式

" Vim方式"更像是使用正则表达式指定地点,移动到第一个匹配,粘贴,然后重复n.

仿真

您可以通过在每个位置手动插入标记字符(例如§),然后通过以下方式替换它来排序模拟您的预期工作流程:

:%s/§/\=@@/g

这使用:help sub-replace-expr替换默认寄存器的内容。

答案 1 :(得分:2)

Vim有一个不同的缓冲区,用于存储您复制的内容。要粘贴你只需要使用“P”并粘贴内容。

或者我建议你使用“。” [dot] - 在Vim中,它用于最后一次操作。因此,一旦您将其写入/复制并粘贴到一行中,您就可以在任何想要粘贴相同文本的地方使用“点”(即最后要采取的行动)。

答案 2 :(得分:2)

规范的Vim方式,即由Drew Neil创造的“点公式”,与Sublime Text方式相反。

在Sublime中,在进行更改之前标记模式的每个匹配:

mark    Cmd+D
mark    Cmd+D
mark    Cmd+D
mark    Cmd+D
change  foo

在Vim中,你“标记”一个模式,进行一次更改并在该模式的更多实例上重复:

mark    *N
change  ciwfoo<Esc>
repeat  n.
repeat  n.
repeat  n.

但是,由于你有7.4,你可以使用“新的”gn普通模式命令/动作:

nnoremap <key> *``cgn

并将上述过程缩短为:

change  <key>foo<Esc>
repeat  .
repeat  .
repeat  .
repeat  .

我认为哪个并不坏。