Vim は貼り付け時に非 ASCII 値をエスケープします

Vim は貼り付け時に非 ASCII 値をエスケープします

などの非 ASCII 文字を含む文字列を VIM のレジスタから貼り付けようとしています。Ctrlrこの文字列をファイルに貼り付けながら、非 ASCII 文字を自動的にエスケープするにはどうすればよいでしょうか。

基本的に、私が実現しようとしているのは、CtrlWvim が ^W として表示するような、いくつかの (非 ASCII) 文字を含むマクロを記録することです。マクロを取得し (レジスタを調べてマクロ文字列 (つまり @a=^W) を取得)、それをキーマップとして .vimrc ファイルにコピーして、キーを押すとそのマクロが実行されるようにしたいと考えています。

CtrlW.vimrc ファイル内や貼り付ける場所で ^W を変更せずに、これを自動的に (またはできるだけ速く) 実行したいと考えています。

答え1

初めに、制御シーケンス ASCII範囲内である^Wコードポイント23)ですが、いわゆる印刷できない文字。これらを~/.vimrcファイルにそのまま貼り付けることができます (端末の選択と貼り付けではなく、Vim レジスタを使用する限り)。逃げる必要はない( のファイル形式によっては、^Jとにのみ問題が発生する場合があります。)^M~/.vimrc

そうは言っても、これらの制御シーケンスを回避する簡単な置換を次に示します。

:echo substitute("example: \<C-A>\<C-Z>", '[\x00-\x1f]', '\="<C-" . nr2char(char2nr(submatch(0)) + 64) . ">"', 'g')

関連情報