
代替コマンドの代替文字列で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-expression
Vimでと参照してください。:help nr2char()
または、20AC
実際に定数の場合は、次のように入力することができ:
s
#
something
#
<Ctrl-V>
u
20AC
#
g
<Enter>
ます。
:s#something#€#g
:help i_ctrl-v
Vimに何があるのか見てください。
答え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 関数呼び出しを使用するよりもパーサーに直接組み込まれているので、これは好まれます。
しかし、これを行うより簡単な(そしてより直接的な)方法があったらと思います。