2011-03-18 94 views
0

我试图定义映射为 “CPP” 文件类型:的Vim:<leader>键序列interfused与正常模式映射

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”序列使“回显”发生,但另外两个表现为好像没有定义任何映射:“,r”使Vim切换到替换模式和“,c”将Vim带入插入模式。

我在做什么错?

回答

5

我不知道你的例子(包括,c之一)是否可以工作:你忘记了用冒号加回声。但还有一个错误:根据帮助:

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

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

因此,最后一个(,t)应该取代所有以前的。

也有另一种东西,你应该考虑:

  1. 不要使用map,使用noremap相反:它可以节省一次你做调试工作,你添加一些映射后。
  2. 如果你定义了文件类型映射,你通常应该在{lhs}之前的位置加上<buffer>作为参数:noremap:它会使这个映射位于当前缓冲区。
  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的/文件类型插件/ cpp.vim里(after目录仅用于覆盖如果插件无条件地定义了不喜欢的选项,如果没有映射冲突,请不要使用after)。
+0

非常感谢ZyX精彩的回答!现在您的帮助现在可以运行! – izhak 2011-03-18 21:02:05

1

我建议你把这些映射放在一个名为cpp.vim的文件中,放在你的~/.vim/after/ftplugin/(或基于OS的任何等价物)目录中。

的Vim只要自动加载它,你有

filetype plugin on 
.vimrc

这样可以避免编写自动命令并保持您的配置组织良好。