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<C-r>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 <type new word> Esc
转到下一个要替换的单词中的某个位置。
按.
重复上次替换。
高级:
您也可以先使用/<word>
查找单词,然后使用ciw <new word>
。
然后在按.
之前您不必自己移动到该单词,但您可以使用n
转到下一个(或N
转到上一个)。
【讨论】:
以上是关于macvim:如何多次粘贴同一个被抽出的单词?的主要内容,如果未能解决你的问题,请参考以下文章
如何在以特定单词开头并以另一个单词结尾的字符串中出现多次[重复]