Answers:
选项1
您可以使用寄存器来做到这一点,并对该过程进行键绑定。
用您要替换的单词来表示yw。
被拉出的单词在0
寄存器中,您可以通过发出该单词来查看:registers
。
转到您要替换并执行的单词cw。执行Ctrl+,r然后0粘贴0
寄存器。
对应的地图如下所示(假设Ctrl+ j作为我们的主要组合):
:map <C-j> cw<C-r>0<ESC>
选项2(更简单)
拖拉单词后,将光标移到要替换并执行的单词上viwp。视觉上选择内部单词并粘贴。
在评论中@tlo的礼貌:您也可以这样做vep。缩短一个字符。下行必须将光标定位在单词的开头,并且(与我的一样)更改缓冲区。
评论(来自迈克尔):
很好 额外注意:第二种方法确实更容易,但是照样只适用于ONE替换,因为在每次替换之后,缓冲区都将更改为被替换的字段(旧文本)。第一种方法较难使用,但BUT的优点是缓冲区0保持“原样”,因此您可以使用该方法对同一文本进行多次替换。
ve"0p
会让您重复更改
map <C-j> ciw<C-r>0<ESC>
它:这样,无论您按单词的哪个位置都没有关系^j
。
:help insert
然后搜索CTRL-R /CTRL-R
。有关ve"0p
工作原理,请看:help registers
为此,您有意使用yank,delete和其他寄存器。
寄存器"0
是拉环寄存器。您要拖曳的所有内容都将放在此处,但删除绝对不要触摸register "0
。
因此,在您的示例中,您刚刚提出了一个要求。要将单词替换为您刚刚提出的内容,您可以利用从未碰过yank寄存器的删除功能。因此,移至目标词,使用删除它dw
,然后使用"0p
或从yank-register中粘贴,或者更好(cw
然后^R0
可重复)。
与yank寄存器相对的是小删除寄存器"-
。任何小的删除或更改删除都放在此处,但猛拉绝对不会碰到"-
。如果删除少于整行,则删除计数为小。
寄存器"1
- "9
是删除历史记录寄存器。具有"1
包含最新的大型删除或更改删除,以及"9
包含最旧的大型删除或更改删除。仅将不小的删除(即删除一行或更多行)推送到"1
-上"9
。
对于任何更改寄存器的操作,副本也始终放置在默认的未命名寄存器中""
。这是您未明确命名寄存器时使用的寄存器。
寄存器"_
是黑洞寄存器,并且始终为空。如果删除它,则任何寄存器中的任何内容都不会更改,甚至默认""
寄存器或黑洞寄存器本身也不会更改。除撤消历史记录外,已删除的文本已全部消失。拖到黑洞寄存器或从黑洞寄存器粘贴基本上没有任何作用。
黑洞寄存器"_
使您可以执行以下操作:先进行一个小删除,然后再进行许多其他删除,"_
而无需更改您的小删除寄存器"-
,然后粘贴您的第一个小删除。
其他寄存器是最后插入的寄存器".
,文件名寄存器"%
以及"#
命令寄存器":
,搜索寄存器"/
和表达式寄存器"=
。
您可以通过命令获取所有这些寄存器及其内容的列表:register
。该命令对于试验和了解最终结果非常有用。
我经常需要它,我写了一个插件来简化并允许最大速度:ReplaceWithRegister。
这个插件提供了一个gr
二合一的命令,用寄存器的内容替换{motion} /文本对象,整行或当前选择所覆盖的文本;旧文本将被删除到黑洞寄存器中,也就是说,它已经消失了。它透明地处理许多极端情况,并允许通过标准.
命令快速重复。如果您不喜欢它,它的页面上有其他链接。
我使用此插件扩展选择区域:https : //github.com/terryma/vim-expand-region
因此,我更改单词的组合将是:vvp
在单词的任何位置。
我也有一个技巧,可以在粘贴后保存未命名的寄存器内容,因此我可以重复一遍。
vnoremap p p:let @"=@0 <CR>
vnoremap P P:let @"=@0 <CR>
(我的剪贴板是自动选择的)
我正在使用下面的键映射将当前单词替换为复制的单词。
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>
yiw复制一个字。导航到一个单词。,rr替换单词。
领导者钥匙映射到,。
,rw
会更有意义,并且在QWERTY上可能更容易,更快捷地推出。在DVORAK上,我选择了,rc
,尽管它根本没有多大意义,但它比所有人都更容易,更快。在DVORAK上,这,rw
是一个恐怖节目;)
除了其他更好的答案。有点太明显了,但是您可以在删除之前简单地粘贴。“ yw”,然后输入您要替换的单词,“ pldw”(粘贴,向右移动一个字符,删除单词。
vep
。