我需要用同样长的单词列表替换单词列表。
所以例如你有: “一”, “B”, “C”, “d”, “E”, “F”
并且您希望用每个单词的大写版本替换每个单词: “A”, “B”, “C”, “d”, “E”, “F”
我知道如何使用正则表达式查找每个字符串: (一个\ | b \ | C \ | d \ |电子\ | F)
我知道你可以对每个单词进行全局替换。但是,当单词的长度变大时,这种方法将变得非常粗糙和不优雅。
有没有办法以某种方式进行一次全局替换?类似于:
:%s/\(a\|b\|c\|d\|e\|f\)/INSERT_REPLACEMENT_LIST/
我不确定这是否可能。
答案 0 :(得分: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
答案 1 :(得分:3)
:%S /(A \ | b \ | C \ | d \ |电子\ | F)/ \ U \ 0 /克