c
选项替代给我两个选项:(y)es或(n)o。可能有几个带编号的yes选项可供选择吗?示例
文件
person: Alice
dog: Tobby
person: Bob
模式1
:%s/person:/woman:/c
模式2
:%s/person:/man:/c
模式1和2的搜索模式相同,但替换模式不同。我想将它们统一为一种模式,可以选择按(1)进行替换1,(2)进行替换2或按(n)进行不替换。
#1 楼
:s//c
的实现是固定的;您正在寻找的是用Vimscript表达式(:help sub-replace-expr
)替换。您可以通过getchar()
查询一个数字,或者通过input()
提示输入更长的数字::%s/person:/\=get(['woman', 'man'], getchar() - char2nr(1), submatch(0)) . ':'/
:%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/
您可以输入一个更大的数字(在示例中为
3
)以不执行替换。如果经常需要此操作,则可以为此定义一个自定义
Query()
函数。您还可以在其中添加一个:redraw
,以便看到已经发生的替换。#2 楼
感谢您对我的原始问题的所有支持!现在,我已经将:SubstituteChoices
命令合并到我的PatternsOnText插件中,该命令提供了可靠的实现。问题中的示例将通过以下方式解决::%SubstituteChoices/person:/woman:/man:/
评论
该命令似乎有问题。只有添加检查命令后,它才起作用::%s / person:/ \ = get(['woman','man'],input('Your choice:')-1,submatch(0))。 ':'/C
–张磊
17年3月19日在3:15
但是添加c命令将导致我需要两个步骤来替换字符串,我认为这是不必要的。
–张磊
17年3月19日在3:17