macvim:如何多次粘贴同一个被抽出的单词?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

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

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

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

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

【讨论】:

【参考方案2】:

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

    "ayw 或者您选择不说话。 "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 转到上一个)。

【讨论】:

以上是关于macvim:如何多次粘贴同一个被抽出的单词?的主要内容,如果未能解决你的问题,请参考以下文章

如何从终端运行 mvim (MacVim)?

如何使 macvim 作为 .g4 文件的默认应用程序

如何在以特定单词开头并以另一个单词结尾的字符串中出现多次[重复]

VBA - 复制粘贴单词表而不合并

如何使用特定单词在excel中复制一行并粘贴到另一个excel表?

辅助的这半年的代码洁癖养成