VIM映射正常模式键序列

3
我能运行。
: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个回答

3
问题出在\<esc>上,你可以使用\e代替。

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 vs. ftplugin

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

commenter plugins

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


非常感谢!我对Vim还很陌生,所以我正在努力手动完成一些操作来入门,但我一定会尝试使用那些插件。 - user3850043
如果双引号内的 \<Esc> 被 Vim 解释为中止命令行,那么为什么不完整的执行命令会被执行?如果是这种情况,什么也不应该发生。 - jdhao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接