给定一个多次出现单词 的文本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
如果我没理解错的话:
搜索
/foo
Enter接下来由n
- “哦,这个我想删除”
- dw
- 继续n
- “哦,我想换成这个
bar
”- cw
bar
Esc
- cw
- 继续n...
- “哦,我想换成这个
baz
”- cw
baz
Esc
- cw
- 继续n...
编辑/更正:
为了方便我添加了:
imap <C-d> <ESC>
to .vimrc
- 忘记了这一点并认为这是默认映射。已更正。
答案3
对于正常的搜索和替换选项,vim
您可以通过传递来使用确认选项gc
。
例如,如果您想替换该单词foo
,bar
则添加以下行
:%s/foo/bar/gc
因此,无论它在哪里找到该单词,foo
它都会要求确认是否替换该单词bar
。如果您按下,y
它将被替换,n
否则不会。
答案4
vim
您可以通过首先输入重复命令的频率来重复许多命令。这也适用于n
命令。
更改例如第 9 次出现的foo
类型
- 输入
/foo
Enter 跳转到第一个位置foo
- 键入
8n
可跳转八次到下一个位置。那么你是第九次出现 - 键入
cw
以更改单词并输入新单词。
您可以继续步骤 2. 和 3.,如中所述这个答案