VIM:复制每行的文本

时间:2013-08-30 07:15:18

标签: vim

文件包含:

 aa
 bb
 cc
 dd

我需要:

 aa aa
 bb bb
 cc cc
 dd dd

我该怎么做?

7 个答案:

答案 0 :(得分:6)

您可以使用正则表达式执行此操作:

%s/.*/& &/

答案 1 :(得分:4)

也许有一种更聪明的方法,但我只是进入视觉区块选择模式: ctrl + v ,转到最后一行: G ,一直选择到右边: $ ,然后猛拉: y

然后你会回到第一行。按 A 开始插入第一行的末尾。输入一个空格,离开插入模式,然后按 p 粘贴您之前拉出的内容。

答案 2 :(得分:1)

如果你在unix环境中:

:'<,'>! awk '{print $0, $0}'

答案 3 :(得分:1)

矩形选择要复制的区域,将其拉出,然后将点移动到您想要文本的位置,然后粘贴。

gg0
$<C-v>G<S-i>  

<esc> gg0 
<C-v> eeGygg$p

答案 4 :(得分:1)

现在使用ex命令!

:g/./y|pu|-j

长篇:

:g/./yank|put|-1join

这类似于为每一行执行yypkJ(如果需要,可以像:%norm yypkJ那样执行)。

如需更多帮助,请参阅:

:h :g
:h :y
:h :pu
:h :j
:h range
:h :norm

答案 5 :(得分:0)

转到该行的开头。在命令模式下执行yy,转到行尾{do Jyy将当前行复制到缓冲区,J加入两行。

答案 6 :(得分:0)

我使用的是宏。转到文件顶部,使用qq开始录制,然后执行复制第一行的操作。也许是YpkJ,或者真的有什么东西可以转向&#34; aa&#34;进入&#34; aa aa&#34;。然后再次使用q停止录制。

要应用于缓冲区的其余部分,请使用:2,$norm @q,或使用可视模式选择所有行直到结尾,然后键入:norm @q