macvim:如何粘贴几次相同的猛拉字?

时间:2011-10-08 15:09:31

标签: vim macvim

每次我复制一个单词并希望将其替换为多个单词时,我会这样做:

  1. 猛拉这个词
  2. 进入可视模式,选择要替换的单词并粘贴被拉出的单词。
  3. 在此过程之后,被替换的单词将被拉出并且无法继续替换新单词,因为我丢失了第一个被拉出的单词。所以,我必须再次复制第一个被拉扯的词。

    有人可以指导我如何以有效的方式实现我的目标吗?如果我的语言不会改变,那就足够了。

6 个答案:

答案 0 :(得分:7)

我建议明确地使用一个寄存器进行猛拉和粘贴。

  1. "ayw或者你选择了猛拉你的话。
  2. "ap要粘贴。
  3. 在这种情况下,我使用了a注册表,但您可以使用适合自己的注册表。

答案 1 :(得分:2)

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

总的来说,粗略的vnoremap p "_dP映射几乎可以让你到达那里,但在一些边缘情况下它不会很好(例如,如果你要替换的一个单词在行的末尾)。

优越的方法是使用这个看起来很疯狂的片段(我希望我知道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()

答案 2 :(得分:1)

就个人而言,我赞成做:s/word/replacement words/gc

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

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

答案 3 :(得分:1)

@Randy Morris的一个补充回答:不是在两种情况下都明确指定寄存器,只能在第二种情况下指定寄存器,参见:h quote0(«编号寄存器0包含最近的yank命令中的文本...»)。在这种情况下,使用a寄存器会更好(因为它更容易输入),但如果您说要替换字词,则可能需要使用ciw<C-r>0然后使用.你要替换的每个其他词。

答案 4 :(得分:0)

我使用此映射将当前选定的文本替换为默认寄存器,而不是将其取消:

vnoremap <leader>p "_dP

答案 5 :(得分:0)

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

例如:

转到要替换的单词内的某个地方。

执行ciw <type new word> Esc

转到您要替换的下一个单词内的某个地方。

.重复上一次替换。

高级:

您还可以先使用/<word>查找单词,然后使用ciw <new word>。 这样,您在按.之前就不必自己动词了,但是您可以使用n转到下一个(或N转到上一个)。