【问题标题】:In Vim is there a corresponding change (c) command for paste (p)?在 Vim 中是否有用于粘贴 (p) 的相应更改 (c) 命令?
【发布时间】:2012-03-23 13:20:37
【问题描述】:

使用插入功能,既可以清除单词/部分,也可以在上面插入,就像这样

  • cw 删除到单词结尾(带空格)然后进入插入模式
  • ce 删除直到词尾(没有空格)然后进入插入模式
  • c3w 删除直到接下来的 3 个单词(带空格)结束,然后进入插入模式
  • ct. 删除到句号之前然后进入插入模式
  • c$ 删除到行尾然后进入插入模式

如何使用粘贴操作来做到这一点?我经常有这样的台词

var name = "John Smith"
var name = "Jane Smith"

我把它改成

var name = "John Lee"
var name = "Jane Smith"

然后 yank (yw) "Lee",但现在如果我从 "Jane Smith" 中删除 (dw) "Smith",我的注册表中不再有 "Lee" 可以粘贴回来。我知道我可以使用命名寄存器。另外,我确信我可以使用可视模式。但是,我认为由于这是一项非常常见的任务,因此有一种方法可以使用移动运算符(ewt/Tf/F$ ,0) 使用粘贴命令指定要粘贴的内容。

【问题讨论】:

    标签: vim copy-paste paste yank


    【解决方案1】:

    您总是可以进行自定义映射,我有以下内容:

    nnoremap ,pw viw"0p

    粘贴在inner word (iw) 上一个被拉出的文本。请注意,我使用的是 0 寄存器,因此我可以粘贴任意多次,而不会丢失被拉出的文本。不幸的是,您需要编写一些其他映射。我喜欢有一个映射来粘贴inside quoteinside bracketsinside parentheses

    nnoremap ,pi" vi""0p
    nnoremap ,pi] vi]"0p
    nnoremap ,pi) vi)"0p
    

    【讨论】:

    • 我想知道修正一个接受参数然后总是使用寄存器 0 的映射是否可行
    【解决方案2】:

    我认为视觉模式是要走的路。您只需使用 vV 启用可视模式(如果您想同时覆盖整行),以通常的方式使用移动运算符来选择区域替换然后粘贴。你可以利用你已经知道的东西。

    Vp 覆盖当前行。 vwp 覆盖当前单词。

    您可以在Vim Wikia 找到替代方案的概述。

    【讨论】:

      【解决方案3】:
      I no longer have "Lee" in the register to paste back.
      

      其实Leereg:0里面,至少有两种粘贴方式。

      方法一

      • 将光标移动到Leeyw
      • 将光标移动到Smithdw
      • "0P

      方法二

      • 将光标移动到Leeyw
      • 将光标移动到Smithcw
      • Ctrl-R+0

      【讨论】:

        【解决方案4】:

        哦,是的,你想要的是超方便(讽刺)的黑洞寄存器:在可视模式下选择你想要替换的部分,使用你想要的动作(如vw),然后_xP.

        黑洞寄存器_ 是一个类似于/dev/null 的特殊寄存器。操作" 为您要替换的文本设置目标寄存器,因此"_ 确保不需要的“Smith”命中黑洞寄存器。因此,“Lee”保存在" 寄存器中。如果您连续多次执行此操作,我建议您使用宏来提供帮助。

        【讨论】:

        • 我意识到这个答案很复杂并且混合了几个概念 - 但希望它会有所帮助,并且很想看看是否有更好的方法来实现这一点。这只是我能想到的最好方法(而且我经常使用)。
        • 这实际上只是将粘贴到寄存器的另一种方式。 +1 引用 /dev/null 虽然
        猜你喜欢
        • 2011-05-17
        • 2022-11-25
        • 1970-01-01
        • 2018-12-31
        • 2022-07-13
        • 1970-01-01
        • 2011-01-06
        • 2021-01-31
        • 1970-01-01
        相关资源
        最近更新 更多