VIM映射正常模式键序列

时间:2017-01-08 22:03:45

标签: vim

我可以跑

: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//\

2 个答案:

答案 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

autocmd与ftplugin

我建议将映射(以及任何其他与C ++相关的设置)放入~/.vim/after/ftplugin/cpp.vim,而不是定义大量:autocmd FileType cpp;这要求您拥有:filetype plugin on

评论者插件

看起来您正在构建一个用于注释掉行的映射。请注意,有几个评论者插件可以很好地执行此操作,并且这些插件是通用的(并且通常是可扩展的),因此它们适用于任何文件类型: