4

:help regexpと\%uを使用してvimでUnicode文字を検索する方法のヒントを見てきましたが、テキストを16進数で定義されたUnicode文字に置き換える方法を理解できませんでした。

特定の状況では、DefaultKeyBindings.dictにコメントが必要であり、その行にマップされている文字をコメントに出力します。

始める:

blah blah...\U2234  

指示:

:s/\v.*\\U(\d{4})/& \/\*\\\\%u\1 \*\/  

結果:

blah blah...\U2234 /*\%u2234 */  

ゴール:

blah blah...\U2234 /* ∴ */
4

3 に答える 3

8

16 進数の Unicode 値の文字列表現を、それが表す実際の文字に変換する必要があります。これは のタスクでnr2char()あり、次の方法で置換に埋め込むことができます:help sub-replace-expression:

:substitute+\v.*\\U(\d{4})\zs+\='/* '.nr2char(str2nr(submatch(1),16)).' */'+

プロのヒント: 別のセパレーターを使用してください (私は を選び+ました/)。そうすれば、エスケープする必要はありません。

于 2013-02-02T18:26:34.987 に答える
4

を使用して、置換テキストで式を使用できます\=。これを機能と組み合わせてnr2char()、実行可能なソリューションを作成します。ここから始めましょう:

s^.*\\U\(\d\{4}\)^\=submatch(0).' // '.nr2char(printf('%d','0x'.submatch(1)))

これにより、行が変換されます

Bla bla ... \U2234

Bla bla ... \U2234 // ∴

printf()関数の必要に応じて、16 進数から 10 進数への変換に使用しnr2char()ます。これは改善できると確信しています。

'encoding'これを機能させるには、UTF-8 に設定する必要があることに注意してください。 を参照してください:h nr2char()

于 2013-02-02T18:26:01.303 に答える