【发布时间】:2011-11-02 02:22:18
【问题描述】:
用剪贴板内容替换多行的最佳方法是什么?
我遇到的问题是,当我拉出一行并将其粘贴到另一行上时,“拉出”被我刚刚替换的行替换。现在,如果我想用同一行替换另一行,我必须返回并再次拉动它。
必须有更好的方法来做到这一点。
【问题讨论】:
用剪贴板内容替换多行的最佳方法是什么?
我遇到的问题是,当我拉出一行并将其粘贴到另一行上时,“拉出”被我刚刚替换的行替换。现在,如果我想用同一行替换另一行,我必须返回并再次拉动它。
必须有更好的方法来做到这一点。
【问题讨论】:
我的 .vimrc 中有这个:
xnoremap p pgvy
(注意:这仅适用于默认寄存器,但此映射很容易记住)。编写一个更详细的版本是可能的。此外,您仍然可以使用 P 来获取旧行为。
【讨论】:
vnoremap)。 Vim 帮助文件version7.txt 说明 xmap 和 smap 出现在那个版本中。
xnoremap 和 vnoremap 都不起作用
"0 应该有你的 yank 的内容。打字有点繁琐,但"0p 应该做你想做的。
或者,不要选择并替换前面的旧行。如果您通过搜索找到这些行,只需一遍又一遍地点击n.(在初始p之后),然后当它们全部粘贴后,执行ndd,然后根据需要执行尽可能多的n.s。
在迁移到 Vim 时,我需要做出的最大心理转变是弄清楚如何按顺序应用组编辑。 IE。而不是在一行上做一堆编辑,然后在另一行上做一堆相同的编辑,我会在一堆行上做第一次编辑(使用. 效果很好),然后第二次编辑一堆行等。或者,使用宏可能会有所帮助,因为它们很棒,但有时要正确处理“复杂”的更改会有点乏味。
【讨论】:
:%s/.../.../gc 类型命令的正则表达式可能更接近您想要的地方
5@m 之类的操作(对于名为m 的宏)
xnoremap p "0p
我经常使用另一个注册表,将您需要的行复制到某个命名注册表"ay,然后从那里粘贴"ap
【讨论】:
当您在 Vim 中粘贴选择时,它将用选择的内容替换默认寄存器。如果粘贴所选内容正在清除剪贴板寄存器的内容,那么很可能您的 .vimrc 中有以下行
set clipboard=unnamed
一种选择是删除它并使用显式剪贴板寄存器"+
另一个选择是使用任何其他显式命名的寄存器 (a-z)。例如,在第一次粘贴之后,将行拉回"c,然后使用"cp 从那里粘贴。
【讨论】:
使用np 其中n 是您要粘贴行的次数,例如3p 将粘贴3 行。
【讨论】:
通常最好使用诸如ciw 之类的文本对象命令来更改内部单词,而不是使用复制/粘贴。这种方法的优点是可以使用. repeat 命令轻松重复。
yiw Yank 内部单词(复制光标下的单词,说“第一个”)。ciw<C-r>0 更改“second”,将其替换为“first”(是 Ctrl-R)。.把“第三”改成“第一”。【讨论】:
ciw<C-r>0 在我的情况下不起作用。 ciw 更改为插入模式,<C-r> 变得无用。对此有简单的解释吗?这可能与文本编辑器有关(我在 RStudio 中使用的不是纯 VIM,而是 VIM 键盘绑定)
<C-r> 旨在用于插入模式,因为它是您在不离开插入模式的情况下从寄存器粘贴的方式——即在 Vim 中;我不熟悉 RStudio,但我猜你是对的,他们还没有实现这个特定的键绑定。