我正在尝试为“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"
我的领导钥匙被重新定义:
let mapleader = ","
当我打开* .cpp文件时,只有一个映射按预期工作:“,”t序列使“echo”发生,但其他两个表现为好像没有定义任何映射:“,r”使Vim切换到替换模式,“,c”使Vim进入插入模式。
我做错了什么?
答案 0 :(得分:5)
我不知道你的例子(包括,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
after
目录仅用于覆盖您不喜欢的选项,如果它们是无条件定义的插件。如果没有映射冲突,请不要使用after
)。答案 1 :(得分:1)
我建议你将这些映射放在cpp.vim
(或任何基于操作系统的等价物)目录中的~/.vim/after/ftplugin/
文件中。
只要你有
,Vim会自动加载它filetype plugin on
在.vimrc
。
这可以节省您编写自动命令并使您的配置井井有条。