VIM如何从第x行到y选择/复制列n

时间:2010-11-18 20:39:57

标签: vim

我使用visual block复制某些范围内的特定列(例如 x 行到 y )。我想知道是否有更简单的方法来完成同样的任务。

另外,在复制这些线后,我想将它们水平剪切并粘贴。可能吗?做 J 有点烦人,特别是如果行数很大的话。

例如,文件A (btw两个文件在拆分窗口中打开)是

............
sadsa asds  dog 
sadsa asds  cat
sadsa asds  me
sadsa asds  you
...........

我想将第3列中的4行复制到文件B ,这可能已包含数据。假设我想以这种方式在第30行复制这些数据(行号是假设的):

   ...............
   29.  other data
   30.  dog cat me you
   31.  other data
   ................

2 个答案:

答案 0 :(得分:5)

通过点击文本块左上角的Ctrl-V,然后将光标移动到文本块的对角,然后点击y,使用可视化块模式从文件A复制文本。移动到要粘贴文本块的文件B,然后执行以下操作:

:put
:'[,']join

:put将以线模式粘贴寄存器中的文本,包括视觉块抽取文本。

:join将像J命令一样将行连接在一起。

'[']是在更改开始和结束时设置的标记。

:'[,']join将从粘贴文本的开头加到粘贴文本的末尾。

有关详细信息,请参阅:

:h :put
:h :j

答案 1 :(得分:1)

我会粘贴它并使用4J,5J,20J等,具体取决于有多少行。这样做还是太烦人了吗?

编辑:啊,我知道这会非常痛苦。我玩了一下这个,制作了一个可以缓解疼痛的宏。它实质上是自动化MBO在下面建议的内容。

moGo^[pVGJdd'op

将其粘贴到vim缓冲区中,将^[替换为实际转义字符(使用默认键绑定,进入插入模式,按CTRL-v,然后按ESC。

现在突出显示该宏,然后按"py

现在您可以使用@p

播放宏

从一个文件中复制垂直'dog cat me you'字符串,进入另一个文件并将光标放在你想要的位置,然后按@p它应该可以工作!

重新编辑: Peter Rincker的答案远比我的好,应该是公认的答案。