Vim复制和粘贴

时间:2009-02-28 07:51:35

标签: vim replace copy-paste

我之前的问题似乎有点含糊不清,我会改写它:

我有一个这样的文件:

copythis abc
replacethis1 xyz
qwerty replacethis2
hasfshd replacethis3 fslfs
And so on...

注意: replacethis1,replacethis2,replacethis3,...可以是任何单词

如何使用最小vim命令将“replacethis1”,“replacethis2”,“replacethis3”,... word替换为“copythis”字样。

我能做的一件事就是通过以下步骤:

  1. 删除“replacethis1”,“replacethis2”,“replacethis3”,...使用'dw'
  2. 使用'yw'复制“copythis”
  3. 将光标移动到“replacethis1”所在的位置并执行'p';将光标移动到“replacethis2”所在的位置并执行“p”等等......
  4. 在VIM中是否有更好的方法(使用较少数量的vim命令)?

9 个答案:

答案 0 :(得分:6)

既然你改变了问题,我会这样做:

移至第一个“replacethis1”并输入cw(更改单词),然后手动输入“copythis”。

转到下一个“replacethis”,点击。 (重复上一次操作)

转到下一个“replacethis”,点击。,

依此类推,等等。

如果“copythis”是一个小词,我认为这是最好的解决方案。

答案 1 :(得分:4)

需要包含数字,每行可能有多个实例:

:%s/replacethis\d/copythis/g

答案 2 :(得分:3)

鉴于“replacethis [1-3]”可以是任意无关的词,全球最快/最简单的方法是:

:%s/replacethis1\|replacethis2\|replacethis3/copythis/g

(请注意,您需要使用\ |来使管道充当“或”。否则,vim将查找文字字符。)

答案 3 :(得分:1)

:%s/copythis/replacethis/g

用replacethis替换所有出现的copythis。或者您可以指定一系列行号,如:

:8,10 s/copythis/replacethis/g

注意,末尾的/ g将告诉它替换所有出现的内容。如果你把它关掉它只会做第一个。

答案 4 :(得分:1)

  1. 创建此映射:

    :map z cwcopythis ^ [

    (^ [是转义字符,您可以使用Ctrl + V Ctrl + []

  2. 在vim中输入它
  3. 转到要替换的每个单词,然后按z

答案 5 :(得分:1)

我也一直在努力解决这个问题,我想我只是用最干净的方式解决了这个问题:

使用最干净的命令将copythis放入寄存器r:

/copythis
"rye

然后转到替换品并将其替换为r:

的内容
/replacethis
cw<CTRL-R>r<ESC>

然后你可以n.n.n.n.n.n.n.为其余的人,或者如果它们完全不同,只需转到每个开头并点击.

关键是一步替换和粘贴,以便稍后使用.

答案 6 :(得分:0)

您是否尝试过更换字符串?

%s/replacethis/copythis

可以对许多其他参数进行微调。深入了解Vim帮助以获取更多详细信息。更多示例here

答案 7 :(得分:0)

如果你需要多次做同样的动作 - 用下一行的第二个单词交换一行的第一个单词,我说你可以录制一个宏并在需要时调用它

答案 8 :(得分:0)

您可以重新映射,例如正常模式下的m键删除光标下的单词并粘贴缓冲区::nnoremap m "_diwP。 然后,您只需复制所需的单词,将光标移动到要替换的单词的任意位置,然后键入m

编辑:映射到m是一个坏主意,因为它用于标记位置。但你可以使用例如无论如何;

相关问题