代码之家  ›  专栏  ›  技术社区  ›  vehomzzz

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

vim
  •  2
  • vehomzzz  · 技术社区  · 15 年前

    我使用可视块在某些范围(例如行)中复制特定列 是的 ). 我想知道是否有更简单的方法来完成同样的任务。

    另外,在复制这些行之后,我想水平剪切和粘贴它们。有可能吗?有点烦人 J型 ,尤其是当行数很大时。

    例如, 文件A (顺便说一下,两个文件都在拆分窗口中打开)是

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

    我想把第三列的4行复制到 文件B ,可能已经包含数据。假设我想在第30行复制这些数据,这样(行号是假设的):

       ...............
       29.  other data
       30.  dog cat me you
       31.  other data
       ................
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   Nick Knowlson    15 年前

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

    编辑: 啊,我知道这会很痛苦。我玩了一会儿,做了一个宏,减轻了不少痛苦。它基本上实现了管理层收购建议的自动化。

    moGo^[pVGJdd'op
    

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

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

    现在你可以用 @p

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

    重新编辑: 彼得·林克的答案比我的好得多,应该是公认的答案。

        2
  •  5
  •   Peter Rincker    15 年前

    在visual bock模式下,通过点击 Ctrl-V 在文本块的左上角,然后将光标移动到文本块的另一个角,然后单击 y . 移动到要粘贴文本块的文件B,然后执行以下操作:

    :put
    :'[,']join
    

    :put 将从寄存器中以行模式粘贴文本,包括可视块拉伸文本。

    :join 会像 J 命令。

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

    :'[,']join 将从粘贴文本的开头连接到粘贴文本的结尾。

    有关详细信息,请参见:

    :h :put
    :h :j