Vim:<leader>键序列与普通模式映射</leader>混合

时间:2011-03-18 17:02:27

标签: vim

我正在尝试为“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进入插入模式。

我做错了什么?

2 个答案:

答案 0 :(得分:5)

我不知道你的例子(包括,c)是如何工作的:你忘了用冒号前缀回声。但还有另一个错误:根据帮助:

  

:AU [tocmd]! [group] {event} {pat} [nested] {cmd}

     

删除与{event}和{pat}关联的所有自动命令,并添加命令{cmd}。

所以,最后一个(,t)应该替换以前的所有。

您还应该考虑另外一些事项:

  1. 请勿使用map,而是使用noremap:在添加映射后,它可能会使您免于执行调试作业。
  2. 如果定义文件类型映射,通常应将<buffer>作为:noremap的参数添加到{lhs}之前的位置:它将使此映射在本地缓冲区本地。
  3. 如果您想重新发送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
    
  4. 我会将它从vimrc中删除并添加到〜/ .vim / ftplugin / cpp.vim(after目录仅用于覆盖您不喜欢的选项,如果它们是无条件定义的插件。如果没有映射冲突,请不要使用after)。

答案 1 :(得分:1)

我建议你将这些映射放在cpp.vim(或任何基于操作系统的等价物)目录中的~/.vim/after/ftplugin/文件中。

只要你有

,Vim会自动加载它
filetype plugin on

.vimrc

这可以节省您编写自动命令并使您的配置井井有条。