在VIM中如何执行剪切和粘贴操作?

3

假设你有这段文本:

SOMETHING_XXXXXXXXXXXXXX_ELSE
SOMETHING_XXXXXXXXXXXXXX_ELSE2
SOMETHING_XXXXXXXXXXXXXX_ELSE3
SOMETHING_XXXXXXXXXXXXXX_ELSE4

您希望将所有的XXX..XXX替换为这个单词:

HELLOWORLD

如果我进入可视模式,然后复制这个单词,如何使用剪切和粘贴替换上面4行中的XXX..XXX
如果尝试这样做,会把X放到我的“剪贴板”中,然后我只能手动输入它。

这是一个vim问题还是Visual Studio问题? - Oded
@Oded 一个 viemu 的问题;-) 并非所有的 vi[m] 都是相等的。 - user166390
@Oded viemu是将vim商业化移植到VS环境中。在某些情况下,它的行为与vim不同,这可能是原帖作者想要包含它的原因。 - Andrew
@pst - 很好,我永远不会在VS中使用vim绑定...但每个人有自己的选择。 - Oded
你想要能够将寄存器中的XXX粘贴到:s命令中吗? - David Poole
4个回答

4

我不确定它是否适用于viemu,但在VIM中可以执行以下操作...

使用复制和粘贴

将文本复制到特定的寄存器中。在可视模式下选择文本,使用命令"ay将文本复制到寄存器a。然后在粘贴时调用命令"ap,它会粘贴a寄存器中的内容。

使用正常命令

但我强烈建议使用正常命令。只需选择行

SOMETHING_XXXXXXXXXXXXXX_ELSE
SOMETHING_XXXXXXXXXXXXXX_ELSE2
SOMETHING_XXXXXXXXXXXXXX_ELSE3
SOMETHING_XXXXXXXXXXXXXX_ELSE4

使用行可视模式(<C-v>),然后输入以下命令::'<,'>normal fXct_HELLOWORLD。然后,您将获得:

SOMETHING_HELLOWORLD_ELSE
SOMETHING_HELLOWORLD_ELSE2
SOMETHING_HELLOWORLD_ELSE3
SOMETHING_HELLOWORLD_ELSE4

这意味着它将针对每行运行命令fXct_HELLOWORLD 。让我解释一下这个命令:
  • fX - 将光标移动到第一个X;
  • ct_ - 删除直到 _ 并进入插入模式;
  • HELLOWORLD - 将替换 XXXXXXXXXXXXXX 的单词;

1
谢谢您提供的'fX'和'ct_'!之前不知道这些。 - David Poole
@DavidPoole 如果你想要改变你所搜索的字符,你也可以使用 cf<char>。 - Despo

1

一种方法是通过可视化选择要替换的所有代码并一次性更改它们

Ctrl+v 3jt_cHELLOWORLD[Esc]

注意:所有行更新需要几秒钟时间

另一种方法是创建一个宏:

记录宏:

q10fXct_HELLOWORLD[esc]q

在其他行上运行宏:

j@1j@1j@1

q1 在字符1处记录宏

@1 重放宏

但查找和替换是您问题的一个很好的替代方案


这就是为什么我更喜欢emacs ;-) - user166390
@pst 从未尝试过emacs,但我开始觉得我应该试一试。 - Despo
这只是一个旧的Lisp方言,带有一些文本编辑功能/显示 - 但听起来你已经掌握了vi/vim学习曲线高原,所以没有理由改变;-) 这是对我“那是要做什么?!?!”反应的原始评论。(我使用足够的vi/elvis来编辑配置文件,就这样。) - user166390

0

在可视模式下突出显示这四行,然后

:'<,'>s/X\+/HELLOWORLD/g

除非当然,您想要更自动的东西。 :) - Andrew
我不想要一个搜索和替换的解决方案,如果可能的话,想尝试使用剪切和粘贴来学习这种技巧。 - codecompleting

0
通过这个问题:如何使用vim寄存器?我发现在命令模式下,^R会从一个寄存器中粘贴内容。
例如,如果XXXX被选中并复制到了"寄存器中: :s/^R"/HELLOWORLD/g


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接