我可以跑
:execute "norm! mqI//\<esc>`q"
来自编辑器,但是当我尝试在我的.vimrc
文件中进行映射时
autocmd FileType cpp nnoremap -c :execute "norm! mqI//\<esc>`q"
我收到以下错误:
E114: Missing quote: "norm! mqI//\
E15: Invalid expression: "norm! mqI//\
答案 0 :(得分:3)
问题来自\<esc>
,而您可以使用\e
答案 1 :(得分:3)
当:help key-notation
前面有<key>
时,您确实可以在双引号字符串中使用特殊\
,如下所示:
:execute "norm! mqI//\<esc>`q"
然而,在映射中,<key>
被直接解释,Vim将文字<Esc>
视为中止命令行。要解决这个问题,您必须将<esc>
转义为<lt>esc>
:
nnoremap -c :execute "norm! mqI//\<lt>esc>`q"
但是,这太复杂了。实际上,:noremap
等同于使用:normal!
,因此您可以完全跳过命令行,并且只需定义它:
nnoremap -c mqI//<esc>`q
我建议将映射(以及任何其他与C ++相关的设置)放入~/.vim/after/ftplugin/cpp.vim
,而不是定义大量:autocmd FileType cpp
;这要求您拥有:filetype plugin on
。
看起来您正在构建一个用于注释掉行的映射。请注意,有几个评论者插件可以很好地执行此操作,并且这些插件是通用的(并且通常是可扩展的),因此它们适用于任何文件类型: