5

我之前的问题似乎有点模棱两可,我重新表述一下:

我有一个这样的文件:

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

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

如何使用最少的 vim 命令将 "replacethis1","re​​placethis2","re​​placethis3",.. 单词替换为 "copythis" 单词。

我可以做的一种方法是通过以下步骤:

  1. 使用 'dw' 删除 "replacethis1","re​​placethis2","re​​placethis3",..
  2. 使用 'yw' 复制“copythis”
  3. 将光标移动到“replacethis1”所在的位置并执行“p”;将光标移动到“replacethis2”所在的位置并执行“p”等等...

在 VIM 中是否有更好的方法(使用较少数量的 vim 命令)?

4

9 回答 9

6

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

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

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

移动到下一个“replacethis”,点击 .,

等等等等。

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

于 2009-02-28T08:09:02.437 回答
4

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

:%s/replacethis\d/copythis/g
于 2009-02-28T12:31:42.163 回答
3

鉴于“replacethis[1-3]”可以是任意不相关的词,在全球范围内执行此操作的最快/最简单的方法是:

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

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

于 2009-02-28T13:10:41.087 回答
2

我也为此苦苦挣扎了很长时间,我想我只是想出了最干净的方法:

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

/copythis
"rye

然后去replace,用r的内容替换:

/replacethis
cw<CTRL-R>r<ESC>

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

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

于 2009-03-10T16:29:42.133 回答
1
:%s/copythis/replacethis/g

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

:8,10 s/copythis/replacethis/g

请注意,最后的 /g 将告诉它替换所有出现的位置。如果你把它关掉,它只会做第一个。

于 2009-02-28T07:56:28.300 回答
1
  1. 创建此映射:

    :map z cwcopythis^[

    ( ^[ 是转义字符,您可以在 vim 中使用 Ctrl+V Ctrl+[ 键入它)

  2. 转到要替换的每个单词并按 z

于 2009-02-28T08:09:39.360 回答
0

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

%s/replacethis/copythis

许多其他参数可以微调替换。深入了解 Vim 帮助以获取更多详细信息。这里还有一些例子。

于 2009-02-28T07:54:40.693 回答
0

如果您需要多次执行基本相同的操作-将一行的第一个单词与下一行的第二个单词交换,我说您可以录制一个宏并在需要时调用它

于 2009-02-28T07:58:17.390 回答
0

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

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

于 2013-10-18T10:58:59.093 回答