【问题标题】:macvim: how to paste several times the same yanked word?macvim:如何多次粘贴同一个被抽出的单词?
【发布时间】:2011-12-03 14:31:08
【问题描述】:

每次我复制一个单词并想用几个单词替换它时,我都会这样做:

  1. 抽出这个词
  2. 进入可视模式,选择要替换的单词并粘贴被抽出的单词。

在此过程之后,被替换的单词将被拉出并且由于我丢失了第一个被拉出的单词,因此无法继续替换新单词。所以,我必须再次复制第一个被抽出的单词。

谁能指导我如何以有效的方式实现我的目标?如果我抽出的词不被改变就足够了。

【问题讨论】:

  • 帮助文件 (:h v_p) 建议 "0p
  • 黑洞寄存器是的。例如stackoverflow.com/questions/54255/…
  • 不,黑洞寄存器几乎可以解决问题,但只能几乎。详情见我的回答。

标签: vim macvim


【解决方案1】:

就个人而言,我更喜欢:s/word/replacement words/gc

或者,您可以使用"_de 删除要替换的单词。 "_ 说使用“黑洞”缓冲区来防止丢失现有的默认缓冲区内容。

也许比这更好一点的是把替换词拉到另一个命名缓冲区(例如"a3ye),然后你可以删除要替换的工作(de)并粘贴命名缓冲区"ap

【讨论】:

    【解决方案2】:

    我建议明确地使用寄存器来进行复制和粘贴。

    1. "ayw 或者您选择不说话。
    2. "ap 粘贴。

    在这种情况下,我使用了 a 寄存器,但您可以使用适合您的任何一个。

    【讨论】:

    • 在插入模式下尝试Ctrl-r a,其中'a'对应于创建的记录
    【解决方案3】:

    我使用此映射将当前选定的文本替换为默认寄存器而不拉动它:

    vnoremap <leader>p "_dP
    

    【讨论】:

      【解决方案4】:

      @Randy Morris 回答的一个补充:不是在两种情况下都明确指定寄存器,您可以只在第二种情况下指定它,请参阅:h quote0(«编号寄存器 0 包含来自最近的 yank 命令的文本.. .»)。在这种情况下,使用a 寄存器更好(因为它更容易键入),但如果您说要替换单词,您可能希望使用ciw&lt;C-r&gt;0,然后一个. 用于您想要的其他单词替换。

      【讨论】:

        【解决方案5】:

        之前已经回答过:Vim: how to paste over without overwriting register

        总体而言,粗略的vnoremap p "_dP 映射几乎可以让您到达那里,但在少数极端情况下(例如,如果您要替换的单词位于行尾),它不会很好地工作。

        最好的方法是使用这个看起来很疯狂的 sn-p(我希望我对 Vimscript 的了解至少是本文作者的一半):

        " replace visual selection without overwriting default register
        function! RestoreRegister()
            let @" = s:restore_reg
            return ''
        endfunction
        function! s:Repl()
            let s:restore_reg = @"
            return "p@=RestoreRegister()\<cr>"
        endfunction
        vnoremap <silent> <expr> p <sid>Repl()
        

        【讨论】:

          【解决方案6】:

          我不使用 yank,而是使用 ciw,然后使用 . 重复

          例如:

          转到要替换的单词中的某个位置。

          ciw &lt;type new word&gt; Esc

          转到下一个要替换的单词中的某个位置。

          . 重复上次替换。

          高级:

          您也可以先使用/&lt;word&gt; 查找单词,然后使用ciw &lt;new word&gt;。 然后在按. 之前您不必自己移动到该单词,但您可以使用n 转到下一个(或N 转到上一个)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-02
            • 2010-09-25
            • 2020-07-14
            • 1970-01-01
            • 2020-08-03
            • 1970-01-01
            相关资源
            最近更新 更多