Vim:如何在多行末尾粘贴一段文本?


32

假设我有一段这样的文字:

// Comment1
//评论2
//评论3

我想将这些行中的每行追加到3条相应代码的末尾:

foo = 1;
bar = 2;
baz = 3;

这样最终结果是

foo = 1; // Comment1
bar = 2; //评论2
baz = 3; //评论3

在Vim中有一种简单的方法吗?


@Flimzy,很遗憾,没有。有时,像您这样的评论会出现在Vim问题中,但请检查以下内容:meta.stackexchange.com/q/25925/160504
sidyll 2011年

这个问题的更好的社区是vi.stackexchange.com
Thinwybk

Answers:


36

使用可视块模式(Ctrl+ v),以选择一组线,然后要么yd它们。

然后,如果选择了foo,bar,baz行,则再次使用可视块模式选择注释行的第一列,然后将其Shift+ p固定到位(或者,如果选择了注释行,则选择foo bar baz的最后一列线和p它们到位。

掌握定位的技巧可能需要一些练习,但是当您掌握了诀窍之后,您将开始飞行。当您选择了一个块时,您也可以使用Shift+ A附加例如空格到该块(当添加时,新文本只会出现在顶行,但是当您按下esc时,它将神奇地出现在所有选中的行中) 。同样,Shift+ i将在每一行中所选块的开头执行相同的操作。

不过,您之后需要清理空白行。

还有一个很棒的Vimcast片段,详细介绍了这些技术。


1
我发现此解决方案与之配合:set ve=all使用非常灵活。我个人使用UnconditionalPaste插件(vim.org/scripts/script.php?script_id=3355),因为它更适合我的需求。
彼得·林克

1

好吧,无论是否容易,您都告诉我。前往// Comment 1,按一下dd即可删除。用导航至该行,foo = 1;然后单击p,将其粘贴到该行下方。foo再次向上移动,然后点击J以加入该行。多田


0

以下内容将完全按照您的描述进行操作:

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@

根据你的实际需要做的事情(而不是为例),在实践中,它可能是更直接阻止,选择“//注释1”等块(Ctrlv),抽出(y),转到代码的结尾粘贴。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.