つまり、エスケープシーケンス(より貴重なのはエスケープ文字)を含む引用符で囲まれた文字列をその場で作成したいのです。
これが私のコードです:
let s:char = "x"
let s:combo = "\\<C-" . s:char . ">"
s:combo
が含まれていますが、コンボを実行するため"\\<C-x>"
にどのように評価できますか?"\<C-x>"
:normal
つまり、エスケープシーケンス(より貴重なのはエスケープ文字)を含む引用符で囲まれた文字列をその場で作成したいのです。
これが私のコードです:
let s:char = "x"
let s:combo = "\\<C-" . s:char . ">"
s:combo
が含まれていますが、コンボを実行するため"\\<C-x>"
にどのように評価できますか?"\<C-x>"
:normal
を参照してください:h eval()
。何かのようなもの:
let s:char = "x"
let s:combo = eval('"\<C-' . s:char . '>"')
一重引用符内の二重引用符に注意してください。
あなたが望むことをするための最良の方法は'exe'を使用することです:
exe "normal \<c-x>"
制御シーケンスとは何かがわかっている場合は、代わりに次を使用できます。
let s:char='x'
let s:combo=nr2char(char2nr(toupper(s:char))-0x40)
。これは、すべてのラテン文字文字に対して機能します。
ちなみに、あなたの例では、ではなく、s:combo
が含まれています。問題は、二重引用符で囲まれたではなく、制御文字がそれに変換されることです。\<C-x>
\\<C-x>
:normal
\<C-x>
\<C-x>