【问题标题】:In Vim, how to cut in block mode but paste in normal mode, inserting as new lines?在 Vim 中,如何在块模式下剪切但在普通模式下粘贴,作为新行插入?
【发布时间】:2017-08-10 10:02:04
【问题描述】:

我时不时在 Vim 中遇到这种类型的编辑问题。

我想将表格中的文本格式转换为列表。

之前:

AAA BBB
AAA BBB
AAA BBB

CCC DDD
CCC DDD
CCC DDD

之后:

AAA
AAA
AAA

BBB
BBB
BBB

CCC
CCC
CCC

DDD
DDD
DDD

当然不像这个例子那么简单。块可能有毛茸茸的内容、更大且不一致的行数等。

我现在这样做的方式似乎有点 hack:

  1. 在块模式下从右列中选择一个块: Windows 版本中CTRL-q 选择左上角。
    d 剪切块。
  2. 注意块中有多少行,然后手动添加那么多空白行。
  3. 转到我创建的新空白区域的左上角。 SHIFT+p 将块粘贴到此区域。

步骤是粗略的部分。

进行正常的非块剪切或复制将始终粘贴到“新”行中。一种“插入”或“追加”操作。进行块剪切或复制通常会以一种“覆盖”模式粘贴。

有没有更好的方法在“块模式”下复制或剪切,但在“插入/附加模式”下粘贴?

【问题讨论】:

    标签: vim copy-paste


    【解决方案1】:

    ex command :put 将始终粘贴寄存器行。

    像以前一样使用可视块模式剪切文本块,然后执行 :put 而不是 p

    如果您想以更多方式“投射”粘贴,请使用 @Ingo Karkat 的插件。

    欲了解更多信息,请参阅:

    :h pu
    

    【讨论】:

    • 这似乎是最简洁的,并且非常适合我正在做的事情。
    【解决方案2】:

    你可以像你一样选择BBB部分,例如在d剪切之后,你运行这个命令:

    call setreg('"',@",'V')
    

    然后您可以粘贴到目标行,它会将您的块级“拉动”变成逐行。

    如果您确实需要经常这样做,您可以创建一个映射。

    【讨论】:

    • 反过来也可以吗? setreg 相当神秘。
    【解决方案3】:

    我的 UnconditionalPaste plugin 有一个 glp (go linewise paste) 命令,该命令会将寄存器内容粘贴为新行,无论它们是如何被拉出的(例如,在块模式下)。

    它还有几个其他有用的命令会影响寄存器的粘贴方式。

    【讨论】:

      猜你喜欢
      • 2017-01-12
      • 2021-06-26
      • 2012-09-06
      • 1970-01-01
      • 2011-11-03
      • 2018-06-17
      • 2012-05-21
      • 1970-01-01
      • 2018-12-30
      相关资源
      最近更新 更多