如何使用剪贴板替换多行内容是最好的方法?
我遇到的问题是当我复制一行并将其粘贴到另一行上时,“复制”会被我刚刚替换的行所替代。现在,如果我想用相同的行替换另一行,我必须返回上一页并再次复制该行。
肯定有更好的方法来解决这个问题。
我在我的.vimrc文件中有这段代码:
xnoremap p pgvy
(注:这仅适用于默认寄存器,但这个映射很容易记住)。编写更详细版本是可能的。此外,您仍然可以使用P来获得旧的行为。
"0
应该包含您复制的内容。虽然打字有点繁琐,但 "0p
将实现您想要的效果。
或者,不必事先选择和替换旧行。如果您使用搜索找到这些行,只需在初始的 p
后一遍又一遍地按 n.
,然后当它们都被粘贴后,执行 ndd
,接着再按多次 n.
直到需要为止。
我在切换到 Vim 时需要做的最大心理转变是如何按顺序进行组编辑。也就是说,不是在一行上进行一堆编辑,然后在另一行上进行相同的一堆编辑,而是在一堆行上做第一个编辑(利用 .
起到很大作用),然后在一堆行上做第二个编辑,以此类推。或者,使用宏可能会有所帮助,因为它们非常棒,但有时会更费力一些,特别是在 "复杂" 变更方面。
:%s/.../.../gc
类型命令更接近你想要的。 - Milimetric5@m
(对于名为 m
的宏)的操作。 - skatenerdxnoremap p "0p
。 - nexayq我经常使用另一个注册表,将需要的行复制到名为"ay
的注册表中,然后从那里粘贴到"ap
中。
在Vim中,如果你用黏贴功能覆盖一个选定区域,它会将默认的寄存器替换为所选内容。如果黏贴功能覆盖选择区域时擦除了剪贴板的内容,则很可能是因为您在 .vimrc 文件中加入了以下代码:
set clipboard=unnamed
一种选项是将其删除并使用显式剪贴板寄存器"+
另一个选择是使用任何其他明确命名的寄存器(a-z)。在第一次粘贴后,将该行重新插入到例如"c
中,并从那里使用"cp
进行粘贴。
使用文本对象命令,如ciw
来更改单词内部,而非使用复制/粘贴。该方法的优点是可以使用.
重复命令轻松地重复。
yiw
复制光标下的单词(假设为“first”)。ciw<C-r>0
更改“second”,将其替换为“first”(其中Ctrl-R 为Ctrl键和R键)。.
更改“third”,将其替换为“first”。ciw<C-r>0
无效。 ciw
切换到插入模式,此时 <C-r>
变得无用。 是否有简单的解释?这可能与文本编辑器有关(我没有使用纯VIM,而是在RStudio中使用VIM键绑定)。 - Bushroot<C-r>
旨在用于插入模式,因为这是您在不离开插入模式的情况下从寄存器粘贴的方式 - 在 Vim 中是如此; 我不熟悉 RStudio,但我猜您是正确的,他们尚未实现此特定的键绑定。 - insectean使用np
,其中n
是您想要粘贴行数的数量,例如3p
将会粘贴3行。
P
代替p
,这样你就可以继续粘贴“yanked”选择内容。" Paste Register 0
map <C-p> "0p
vnoremap
)。Vim 帮助文件version7.txt
指出 xmap 和 smap 出现在该版本中。 - Benoitxnoremap
和vnoremap
都不起作用。 - Sibbs Gambling