假设我有一段如下的文本:
// 评论1 // 评论2 // 评论3
我想将以下每一行附加到 3 行相应代码的末尾:
foo = 1; 酒吧= 2; baz=3;
最终结果是
foo = 1; // 评论1 bar = 2; // 评论2 baz=3; // 评论3
在 Vim 中有没有简单的方法可以做到这一点?
答案1
使用可视块模式(Ctrl+ v)选择一组行,然后选择y它们d。
然后,如果您选择了 foo、bar、baz 行,请再次使用可视块模式来选择注释行的第一列,然后将它们Shift+p放到位(或者,如果您选择了注释行,则选择 foo bar baz 行的最后一列并将p它们放到位)。
掌握定位技巧可能需要一些练习,但一旦掌握诀窍,您就会飞起来。当您选择了一个块时,您还可以使用Shift+A将空格等附加到块中(附加时,新文本将仅出现在顶行,但当您按下 esc 时,它将神奇地出现在所有选定的行中)。同样,Shift+i将在每行的选定块的开头执行相同操作。
不过,之后您需要清理空行。
还有精彩的 vimcasts 剧集更详细地展示这些技术。
答案2
好吧,这是否容易,你告诉我。导航到// Comment 1
,点击dd
删除。导航到 行foo = 1;
,点击p
,将内容粘贴到行下。再次上移到foo
,点击J
加入行。Tada。
答案3
下面的操作将完全按照您描述的方式进行:
:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@
根据您实际需要完成的工作(与示例相反),实际上,块选择“// Comment1”等块(Ctrlv),拉出(y),转到代码块的末尾并粘贴可能会更直接。
答案4
如果您在同一个文件中有这两个块,请使用Ctrl+v选择注释 --> Ctrl+ v 2j$y,然后转到另一个块的第一行,按A+ Space,然后按p。
如果您的评论在剪贴板中,请运行:
:call setreg('+',getreg('+'),'b')
然后按A+Space最后按p。
注意:setreg()
我们使用的命令会使您的剪贴板按块形式呈现,从而允许您将其粘贴在文本任何块的侧面。
您可以查看一个 gif,其中该人使用的第一种方法略有不同:https://codegrepr.com/question/how-do-i-paste-a-column-of-text-after-a-different-column-of-text-in-vim/