<C-]>
设置映射,该映射根据缓冲区的文件类型触发不同的功能。例如,如果我在Javascript缓冲区中,则希望<C-]>
触发:TernDef
。如果我在C缓冲区中,则希望它触发:YcmCompleter GoTo
。我尝试过autocmd FileType c nnoremap <C-]> :YcmCompleter GoTo<CR>
,但似乎只是忽略了这一点。 #1 楼
那个autocmd看起来不错;但是,您应该定义本地缓冲区映射(使用<buffer>
);否则,编辑一种类型的文件将覆盖另一种文件的(全局)映射:autocmd FileType c nnoremap <buffer> <C-]> :YcmCompleter GoTo<CR>
autocmd FileType javascript nnoremap <buffer> <C-]> :TernDef<CR>
对autocmd方法的批评
您可以定义通过在
:autocmd Filetype {filetype} ...
前面添加某些文件类型的映射,并将其放入您的~/.vimrc
中。但是,当您为各种文件类型添加映射和其他设置时,这变得很麻烦。最好将:map
命令放入~/.vim/ftplugin/{filetype}_mappings.vim
中。 (这要求您具有:filetype plugin on
。)评论
一个很好的功能,任何教程都未涉及。
–mtk
20/04/27在7:48
#2 楼
对我而言,该行确实有效(使用Vim可以识别的命令,并在命令开头包含一个冒号)。您可以尝试在没有插件的情况下启动Vim,然后查看该行是否被正确识别。另一种选择是将要运行的命令放在ftplugin目录的c.vim文件中。这样,当您打开该类型的文件时,它们将运行。可以在
:help ftplugin<cr>
中找到更多信息。
评论
vi.stackexchange.com/questions/7722/how-to-debug-a-mapping首先,您要尝试使映射在不使用autocmd的情况下工作,只是为了确保它可以工作(如果不起作用,@ muru给您一个指向我的问题的链接,该链接应该对您有所帮助)。我还认为您想在映射中使用