VIM将字replace为粘贴缓冲区的内容?

我需要在文件中做一堆字replace,并且想用vi命令来做,而不是EX命令,例如:%s///g 。 我知道这是在当前光标位置replace单词的典型方法: cw<text><esc>但是有没有办法以未命名的寄存器的内容作为replace文本并且不覆盖寄存器?

我想通过“粘贴”你的意思是未命名(YANK / put / change / delete / substitute)寄存器,对吗? (因为这是被改变命令覆盖的那个)

寄存器通常是通过键入"然后input寄存器的名字(单个字符) "来指定的,比如"ay then "ap将其放入寄存器a ,然后放入寄存器a的内容。你不希望你使用change命令去掉的文本去任何地方,你可以使用黑洞寄存器"_"_cw "_ "_cw 。然后一旦在插入模式下,你可以点击ctrl-R后跟你想要的寄存器" )放入该登记册的内容。

  • "* – select注册(中间button粘贴)
  • "+ – 剪贴板寄存器(也可以通过terminal通过ctrl-shift-v访问)
  • "" – vim的默认(未命名)放/放/改/删除/replace寄存器。

简短的回答: "_cw^R"

编辑:如其他人所build议的,你当然可以使用不同的寄存器来将你的文本写入默认寄存器。 但是,不要总是首先想到这一点,因此,一个单独的更改命令不会被吹走是很好的。 尽pipe它并没有被完全吹走。 有编号的寄存器"0"9

Vim使用yank和delete命令填充这些寄存器。

编号寄存器0包含来自最近的yank命令的文本,除非该命令用[“x”指定了另一个寄存器。

编号寄存器1包含最近删除或更改命令删除的文本,除非该命令指定了另一个寄存器或文本less于一行(那么使用小的删除寄存器)。 用这些移动命令删除操作符是个例外: %()`/ ?nN{} 。 寄存器“总是使用1(这是与Vi兼容的),” – 寄存器也用于删除在一行内。

随着每次连续的删除或更改,Vim将寄存器1的前一个内容转换为寄存器2,2转换为3,依此类推,丢失寄存器9的前一个内容。

使用这篇文章中的信息,我已经形成了这个有用的映射。 我select“cp”是因为它表示“更改粘贴”

nmap <silent> cp "_cw<CR>"<Esc>

编辑:

另外,我进一步采取了这一步,支持任何议案。

要获得上面的命令相当于“改变粘贴字”的cpw

 "This allows for change paste motion cp{motion} nmap <silent> cp :set opfunc=ChangePaste<CR>g@ function! ChangePaste(type, ...) silent exe "normal! `[v`]\"_c" silent exe "normal! p" endfunction 

你可以使用vim的可视化模式。 例如复制一个词:然后用复制的词vep覆盖另一个词

如果光标位于要replace未命名寄存器内容的单词上,则可以使用viwpv切换到可视模式, iwselect内部字,并且p将寄存器的内容放置在其位置。

在实践中,当我需要用另一个字(函数名等)replace一个字时,我将移动到用来replace的字, yiw将内部字延伸到未命名的寄存器,然后移动到单词Ireplace,并viwp来取代它。 用一个词代替另一个词的快速方法。 如果你search了( / )你要replace的单词,那么你可以直接点击n来到下一个需要replace的地方。 很明显,使用:%s/find/replace/g不可替代的,但是对于几个快速replace,它可以很方便,特别是如果你已经在寄存器中有新的字。

如果您使用了一个已命名的registry(即使用"ay"ad等填充您的粘贴registry),您可以执行类似

cw<CTRL-R>a<esc>

这将用寄存器a的内容replace该单词。 据我所知,你不能使用默认的寄存器,因为当你连接的时候,它会被这个命令切断的单词填满。

你的意思是系统粘贴缓冲区还是vi寄存器?

如果你想使用系统粘贴缓冲区,那么你很好,可以做dw"+P"select一个寄存器, "+是系统粘贴缓冲区。

否则,复制到非默认的寄存器中,说"ay复制到寄存器a ,然后replacedw"aP某个东西dw"aP

你可以使用寄存器:

首先将replace文本放在registry中<mark some text>"ay

其中a是注册名称

那么你可以使用该寄存器替代

ve"ap

或者你可以做Shift + vp (select整行并粘贴到它的位置)

你可以使用yw来抽出单词,然后你可以通过vipw来改变单词与被抽出的单词来抽出单词并粘贴以前抽出的单词。