Vimの:s / / /代替文字列でUnicode 16進エスケープを使用する方法は?

Vimの:s / / /代替文字列でUnicode 16進エスケープを使用する方法は?

代替コマンドの代替文字列で16進Unicodeエスケープを使用したい(たとえば、U + 20AC文字を使用)。

:s#something#\x{20AC}#g

上記の例は、代替文字列にPerl構文を使用しているため機能しませんが、Vimで動作したいと思っており、16進値(2または4)によって決まる他の多くの可能なUnicode文字でも機能したいと思います。数字以上)これはスクリプトによって生成された一連の代替ステートメントであるため、代替ステートメント自体は使いやすく、ASCIIにのみ設定したいと思います。正しい構文がなければならないと思いますが、見つかりません。 \ % u20ACは検索モードでは有効ですが、代替文字列では無効です。これは対話的には行われないため、CTRL-V + 4つの16進法は機能しません。

答え1

:s#something#\=nr2char(0x20AC)#g

:help sub-replace-expressionVimでと参照してください。:help nr2char()

または、20AC実際に定数の場合は、次のように入力することができ: s # something # <Ctrl-V> u 20AC # g <Enter>ます。

:s#something#€#g

:help i_ctrl-vVimに何があるのか​​見てください。

答え2

他の答えも良いです。文字列補間は:executeスクリプトに特に良い方法なので、これについても言及します。

あなたはそれを使用することができます:help <Char>二重引用符で囲まれた文字列の表記法:

let char = "\<Char-0x20AC>"
execute 's#something#' . char . '#g'

または、次のように数字を変換しますnr2char()

let value = 0x20AC
execute 's#something#' . nr2char(value) . '#g'

答え3

より多くの文書を読んだ後、代替式を使用してこれを行う非常に複雑な方法が1つ以上見つかりました。

:s#something#\="\<Char-0x20AC>"#g

Vimscript 関数呼び出しを使用するよりもパーサーに直接組み込まれているので、これは好まれます。

しかし、これを行うより簡単な(そしてより直接的な)方法があったらと思います。

関連情報