Answers:
我想说的是“粘贴”,您的意思是未命名的(yank / put / change / change / delete / substitute)寄存器,对吗?(因为那是被change命令覆盖的那个。)
通常通过键入"
然后键入寄存器的名称(单个字符)来指定寄存器,例如"ay
然后"ap
将其拉入寄存器a
,然后放入register的内容a
。更改命令也是如此。在这种情况下,如果您不希望将使用change命令删除的文本放在任何地方,则可以使用黑洞寄存器"_
: "_cw
。然后,在插入模式下,您可以先按ctrl-R,再按"
要放入(可能是)该寄存器内容的寄存器。
"*
-选择寄存器(中间按钮粘贴)"+
-剪贴板寄存器(也可能通过终端通过ctrl-shift-v访问)""
-vim的默认(未命名)yank / put / change / delete / substitute寄存器。简短答案: "_cw^R"
编辑:正如其他人所建议的那样,您当然可以使用其他寄存器来获取将文本放入默认寄存器的yank(或其他)。不过,您不一定总是首先想到这一点,因此最好执行一个change命令而不丢掉它。虽然还没有完全吹走。"0
通过"9
以下方式编号的寄存器:
Vim用yank和delete命令中的文本填充这些寄存器。
编号为0的寄存器包含来自最新yank命令的文本,除非该命令用[“ x]指定了另一个寄存器。
编号寄存器1包含由最近的删除或更改命令删除的文本,除非命令指定了另一个寄存器或文本少于一行(然后使用较小的删除寄存器)。一个例外是delete运算符与这些运动命令进行:
%
,(
,)
,`
,/
,?
,n
,N
,{
和}
。则始终使用寄存器“ 1”(这与Vi兼容)。如果删除在一行内,则也使用“-”寄存器。每次连续删除或更改时,Vim会将寄存器1的先前内容移入寄存器2,将2移至3,依此类推,从而丢失寄存器9的先前内容。
:help registers
。
利用本文中的信息,我形成了这个有用的映射。我选择“ cp”是因为它表示“更改粘贴”
nmap <silent> cp "_cw<C-R>"<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
nmap <silent> cp :let g:currentRegister=v:register<cr>:set opfunc=ChangePaste<CR>g@ function! ChangePaste(type, ...) silent exe "normal! `[v`]\"_c".getreg(g:currentRegister) endfunction
如果光标位于要用未命名寄存器的内容替换的单词上,则可以使用viwp
。v
切换到可视模式,iw
选择内部字,然后p
将寄存器的内容放在其位置。
在实践中,当我需要将一个单词(函数名称等)替换为另一个单词时,我将移至yiw
该单词以用作替换,将内部单词拉到未命名的寄存器中,然后移至单词I' m更换,然后viwp
更换。用一个单词替换另一个单词的快速方法。如果您在(/
)中搜索了要替换的单词,则可以直接点击n
以找到需要替换的下一个单词。显然,没有替代品using :%s/find/replace/g
,但是对于几个快速替代品来说,它可以派上用场,特别是如果您已经在寄存器中有了新词的话。
如果您使用命名寄存器(即,使用"ay
或"ad
等填充您的粘贴寄存器),则可以执行以下操作
cw<CTRL-R>a<esc>
这将用register的内容替换单词a
。据我所知,您不能使用默认寄存器,因为当您cw
使用该命令剪切的单词时,它将被填充。
您是指系统粘贴缓冲区还是vi寄存器?
如果您想使用系统粘贴缓冲区,那么您可以做得到dw"+P
- "
选择一个寄存器,它"+
就是系统粘贴缓冲区。
否则,复制到非默认寄存器,并说"ay
复制到寄存器a
,然后替换某些内容dw"aP
dw
删除了我认为是“单词”之后的结尾空格,而cw
只更改了单词。因此,dw
不会为我工作。
de
应该为您工作-它将删除到该单词的末尾,而dw
将删除到下一个单词的开始。
12yl
12个字符并"_cw^r0
替换了一个单词。然后,我可以使用.
命令在整个文件中重复替换。