在 vim 搜索中交互编辑第 N 次出现

在 vim 搜索中交互编辑第 N 次出现

给定一个多次出现单词 的文本foo,我想对文本进行交互式搜索,并在第 N 次出现 时foo对其进行编辑。

我只能找到search and replace此类操作的模式,但重点是我不想编辑所有出现的foo,而只是编辑我在某些上下文中找到的那个。

答案1

您可以c在执行时使用标志搜索和替换:

:%s/foo/bar/gc

每次vim找到foo都会提示yes/no是否确认更换。

或者,如果您想搜索第 n 次出现的foo,您可以:

n/foo

然后vim会跳到第n次出现的foo,这样你就可以决定是否替换。

答案2

如果我没理解错的话:

  1. 搜索

    /fooEnter

  2. 接下来由n

  3. “哦,这个我想删除”
    • dw
  4. 继续n
  5. “哦,我想换成这个bar
    • cwbarEsc
  6. 继续n...
  7. “哦,我想换成这个baz
    • cwbazEsc
  8. 继续n...

编辑/更正:

为了方便我添加了:

imap <C-d> <ESC>

to .vimrc- 忘记了这一点并认为这是默认映射。已更正。

答案3

对于正常的搜索和替换选项,vim您可以通过传递来使用确认选项gc

例如,如果您想替换该单词foobar则添加以下行

:%s/foo/bar/gc

因此,无论它在哪里找到该单词,foo它都会要求确认是否替换该单词bar。如果您按下,y它将被替换,n否则不会。

答案4

vim您可以通过首先输入重复命令的频率来重复许多命令。这也适用于n命令。

更改例如第 9 次出现的foo类型

  1. 输入/fooEnter 跳转到第一个位置foo
  2. 键入8n可跳转八次到下一个位置。那么你是第九次出现
  3. 键入cw以更改单词并输入新单词。

您可以继续步骤 2. 和 3.,如中所述这个答案

相关内容