多选替代品?


15

通常,用c选项替代可以给我两个选择:(y)es或(n)o。是否可以有几个编号的是选项可供选择?

文件

person: Alice
dog: Tobby
person: Bob

模式1 :%s/person:/woman:/c

模式2 :%s/person:/man:/c

模式1和2具有相同的搜索模式,但具有不同的替换模式。我想将它们统一为一种模式,可以选择按(1)进行替换1,(2)进行替换2或按(n)进行不替换。

Answers:


19

的实现: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,以便您看到已经发生的替换。


该命令似乎有问题。只有添加了check命令后,它才起作用::%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/c
Lerner Zhang

但是添加c命令将导致我需要两个步骤来替换字符串,我认为这是不必要的。
勒纳·张

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.