也就是说,我想动态构建一个带引号的字符串,其中包含转义序列(更珍贵的是,转义字符)
这是我的代码:
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>
引号中的 ,被翻译成它。