我正在尝试为"cpp"文件类型定义映射:
autocmd! FileType cpp map <leader>c echo "test c"
autocmd! FileType cpp map <leader>r echo "test r"
autocmd! FileType cpp map <leader>t echo "test t"
Run Code Online (Sandbox Code Playgroud)
我的领导钥匙被重新定义:
let mapleader = ","
Run Code Online (Sandbox Code Playgroud)
当我打开*.cpp文件时,只有一个映射按预期工作:","t序列使"echo"发生,但另外两个表现就好像没有定义任何映射:",r"使Vim成为切换到替换模式,",c"使Vim进入插入模式.
我究竟做错了什么?
我不知道你的例子(包括,c
一个)如何工作:你忘了用冒号前缀回声.但还有另一个错误:根据帮助:
:AU [tocmd]![group] {event} {pat} [nested] {cmd}
删除与{event}和{pat}关联的所有自动命令,并添加命令{cmd}.
所以,最后一个(,t
)应该替换以前的所有.
您还应该考虑另外一些事项:
map
,noremap
改为使用:在添加一些映射后,它可能会使您免于执行调试作业.<buffer>
作为参数添加到:noremap
之前的位置{lhs}
:它将使此映射本地到当前缓冲区.如果你想重新发送vimrc,你应该将所有命令放入augroup:
augroup VimrcCpp
autocmd!
autocmd FileType cpp nnoremap <buffer> <leader>c :echo "c"<CR>
autocmd FileType cpp nnoremap <buffer> <leader>r :echo "r"<CR>
autocmd FileType cpp nnoremap <buffer> <leader>t :echo "t"<CR>
augroup END
Run Code Online (Sandbox Code Playgroud)after
目录仅用于覆盖您不喜欢的选项,如果它们是由插件无条件定义的.如果没有映射冲突,不要使用after
).