jma*_*hew 182
选项1
您可以使用寄存器来执行此操作并为该过程进行键绑定。
猛拉要替换的单词yw。
猛拉的字在0寄存器中,您可以通过发出:registers.
转到要替换的单词并执行cw。执行Ctrl+r然后0粘贴0寄存器。
对应的地图看起来像这样(假设Ctrl+j作为我们的关键组合):
:map <C-j> cw<C-r>0<ESC>
选项 2(更简单)
随着您的单词被猛拉,将光标移到您要替换的单词上并执行viwp。这是视觉选择内部单词并粘贴。
感谢评论中的@tlo:你也可以只做vep. 短一个字符。缺点是必须将光标定位在单词的开头,并且(与我的一样)更改缓冲区。
评论(来自迈克尔):
这很好。额外注意:第二种方法确实更简单,但仅适用于一次替换,因为在每次替换后,缓冲区都会更改为被替换的字段(旧文本)。第一种方法使用起来有点困难,但其优点是缓冲区 0 保持“原样”,因此您可以使用该方法对同一文本进行 1 次以上的替换。
00p*_*eus 31
Vim 的方式是学习如何有意识地使用 yank、delete 等寄存器。一旦你知道了这些,你将很容易找到你自己的关键序列来做到这一点。
寄存器"0是 yank 寄存器。您猛拉的任何内容都将放在这里,但删除或更改删除都不会触及 register "0。
所以,在你的例子中,你刚刚猛拉了一个词。要用你刚刚猛拉的东西替换一个词,你可以利用从不触及猛拉寄存器的删除。所以移动到目标词,用 删除它dw,然后从你的 yank 寄存器中粘贴"0p或者更好,cw然后^R0(这是可重复的)。
yank 寄存器的另一面是小的删除寄存器"-。任何小的删除或更改删除都放在这里,但 yanks 从不碰"-。如果删除少于整行,则删除算作很小。
寄存器"1-"9是大型删除历史寄存器。与"1包含最新的大删除或更改删除,以及"9包含最旧的大删除或更改删除。只有不小的删除,即一整行或更多行的删除,才会被推到"1- 上"9。
对于更改寄存器的任何操作,副本也始终放置在默认值中,也称为未命名寄存器""。这是未明确命名寄存器时使用的寄存器。
register"_是黑洞寄存器,它永远是空的。如果你删除它,任何寄存器都不会发生任何变化,甚至默认""寄存器或黑洞寄存器本身也不会发生变化。除了您的撤消历史记录外,已删除的文本已完全消失。从黑洞寄存器中拉取或粘贴基本上没有任何作用。
黑洞寄存器"_可以让你先做一个小删除,然后在"_不改变你的小删除寄存器的情况下进行一些其他的删除"-,然后粘贴你的第一个小删除。
您可能已经熟悉普通命名寄存器,它们只是寄存器"a- "z,您可以随意将它们用作临时空间。如果您通过大写形式"A-引用命名寄存器"Z,您将附加到它而不是替换它的内容。
其他寄存器是最后插入的寄存器".、文件名寄存器"%和"#命令寄存器":、搜索寄存器"/和表达式寄存器"=。
您可以使用命令获取所有这些寄存器及其内容的列表:register。因为它显示寄存器的当前内容,所以该命令对于试验和了解最终结果非常有用。
evi*_*oup 13
yw to yank your word, then move the cursor to the word you wish to replace and use "_dw to delete it, sending the text to the null register (so it doesn't overwrite the contents of the " register, where yanked/cut text goes by default), and then simply paste with p.
You could use the following mapping to make things a little easier:
nnoremap <leader>d "_d
Run Code Online (Sandbox Code Playgroud)
...所以在正常模式下,您可以使用\dw删除一个单词,而不会影响"寄存器。
我经常需要这个,我写了一个插件来简化并允许最大速度:ReplaceWithRegister。
这个插件提供了一个gr二合一的命令,用寄存器的内容替换 {motion} / 文本对象、整行或当前选择覆盖的文本;旧文本被删除到黑洞寄存器中,即它消失了。它透明地处理许多极端情况,并允许通过标准.命令快速重复。如果你不喜欢它,它的页面有替代品的链接。
| 归档时间: |
|
| 查看次数: |
65217 次 |
| 最近记录: |