Answers:
的实现: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
,以便您看到已经发生的替换。
c
命令将导致我需要两个步骤来替换字符串,我认为这是不必要的。
感谢您对我的原始问题的所有支持!现在,我已经将:SubstituteChoices
命令合并到PatternsOnText插件中,该插件提供了可靠的实现。问题中的示例将通过以下方式解决:
:%SubstituteChoices/person:/woman:/man:/
:%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/c