6

我需要用同样长的单词列表替换单词列表。

所以例如你有:“a”,“b”,“c”,“d”,“e”,“f”

你想用每个单词的大写版本替换每个单词:“A”,“B”,“C”,“D”,“E”,“F”

我知道如何使用正则表达式查找每个字符串: (a\|b\|c\|d\|e\|f)

我知道您可以对每个单词进行全局替换。但是,当单词的长度变大时,这种方法会变得笨拙和不雅。

有没有办法以某种方式进行全局替换?如同:

:%s/\(a\|b\|c\|d\|e\|f\)/INSERT_REPLACEMENT_LIST/

我不确定这是否可能。

4

2 回答 2

9

您可以使用映射到其替换项的项目字典,然后在搜索/替换的右侧使用它。

:let r={'a':'A', 'b':'B', 'c':'C', 'd':'D', 'e':'E'}
:%s/\v(a|b|c|d|e)/\=r[submatch(1)]/g

:h sub-replace-\=:h submatch()。如果你想把它塞进一行,你可以使用文字字典。

:%s/\v(a|b|c|d|e)/\={'a':'A','b':'B','c':'C','d':'D','e':'E'}[submatch(1)]/g

您给出的大写字母的具体示例将更简单地完成为

:%s/[a-e]/\U\0/g
于 2009-06-10T22:20:20.007 回答
3

:%s/(a\|b\|c\|d\|e\|f)/\U\0/g

于 2009-06-10T22:29:34.293 回答