6

単語のリストを、同じくらい長い単語のリストに置き換える必要があります。

たとえば、「a」、「b」、「c」、「d」、「e」、「f」があります。

そして、各単語を大文字バージョンの "A"、"B"、"C"、"D"、"E"、"F" に置き換えたいとします。

正規表現を使用して各文字列を見つける方法を知っています: (a\|b\|c\|d\|e\|f)

各単語をグローバルに置換できることは知っています。しかし、単語が長くなると、このアプローチは扱いにくく、エレガントではなくなります。

どういうわけか1つのグローバル置換を行う方法はありますか? に似ている:

:%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()。それを 1 行に詰め込みたい場合は、文字通りの辞書を使用できます。

:%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 に答える