在几个连续的行中粘贴被拉动的文本

时间:2014-06-22 07:35:05

标签: vim copy-paste

如果我有多行换行符:

length = 1;
keys = NewKey(value);
gt_backref = NULL;   
ls_backref = NULL;   

我需要在每个代码段之间粘贴一个(<ctrl>-V+ynode->

node->length = 1;
node->keys = NewKey(value);
node->gt_backref = NULL;   
node->ls_backref = NULL;

如何在几个连续的行中粘贴被拉动的文本?像<ctrl>-V+<shift>-I这样的东西,但是用于粘贴,而不是用于键入文本。

3 个答案:

答案 0 :(得分:3)

<C-v>{motion}I<C-r>"<Esc>
  1. 使用<C-v>进入可视屏蔽模式。
  2. 扩展您的选择。
  3. 点击I进入插入模式。
  4. 执行<C-r>"以插入未命名寄存器的内容。
  5. 点击<Esc>将更改应用于所有选定的行。
  6. :normal

    :[range]norm I<C-r>"<CR>
    

答案 1 :(得分:1)

好吧,如果您使用Shift-V选择文本,那么请执行正则表达式

:'<,'>s/.*/node->&/ 

将添加node-&gt;到选定的行。

或者我猜甚至是简单的

:'<,'>s/^/node->/

如果它更复杂,也许您会创建某种宏来搜索以找到要替换的行的类型,并在每行上运行相同的正则表达式替换

答案 2 :(得分:0)

这个答案基于@ Shaun的回答。这真的需要一个宏。但是正确的正则表达式是

:'<,'>s/\(^\s\+\)/\1node->/

因为我需要考虑缩进。 但这种方法并不普遍。对于每个特定情况,我们都需要新的正则表达式。