あなたは:h :s_flags
に記述されている自分の置換コマンドのそれぞれにe
フラグを追加することができます。
[e] When the search pattern fails, do not issue an error message and, in
particular, continue in maps as if no error occurred. This is most
useful to prevent the "No match" error from breaking a mapping. Vim
does not suppress the following error messages, however:
Regular expressions can't be delimited by letters
\ should be followed by /, ? or &
No previous substitute regular expression
Trailing characters
Interrupted
それは与える:
com! MyFR %s/first/1st/ge | %s/second/2nd/ge | %s/third/3rd/ge
を別の解決策をマージするだろうすべての置換を単一のものにする:
com! MyFR %s/\vfirst|second|third/\={'first': '1st', 'second': '2nd', 'third': '3rd'}[tolower(submatch(0))]/g
今回、置換部分では、リテラル文字列を使用する代わりに式を使用します(:h s/\=
参照)。ここで、式は辞書の所与の値である。
辞書のキーはすべて一致した可能性のあるテキストで、値はその置換文字です。
あなたが辞書から検索した値がマッチしたテキストに評価しtolower(submatch(0))
(:h submatch()
を参照)、その小文字版の正規化された(すべて大文字の文字がtolower()
を通じて小文字の対応になっている)です。
はい、 '' ge''は単純なオプションであり、動作します。ありがとう。 – rnso
辞書をうまく使用していますが、あまりにも正確に一致していますか? –
@LievenKeersmaekersああ、あなたは正しい。私はそれを忘れてしまった。この問題を回避するには、 'tolower()'の中に 'submatch()'をラップして一致するテキストを正規化して、キーが常に取得され、 'E716'エラーがないようにすることができます。 – user852573