Vim autocmd无法使用nnoremap

时间:2013-08-06 16:42:48

标签: vim

我正在尝试将vim设置为在编辑器中编译和运行c和c ++程序,但这些似乎不起作用:

autocmd! filetype *.c        nnoremap <leader>cc :!gcc -o %:p:r %<cr>
autocmd! filetype *.c        nnoremap <leader>cr :!gcc -o %:p:r %<cr>:!%:p:r<cr>
autocmd! filetype *.cpp *.cc nnoremap <leader>cc :!g++ -o %:p:r %<cr>
autocmd! filetype *.cpp *.cc nnoremap <leader>cr :!g++ -o %:p:r %<cr>:!%:p:r<cr>

2 个答案:

答案 0 :(得分:12)

FileType自动命令使用文件类型而不是文件名来匹配。您可以改为使用c和cpp。见:h FileType。但是你的问题并没有就此结束:

  • 这些是全局映射。那里打开一个c文件,映射改变了。打开一个cpp文件,无论你使用什么缓冲区,映射都会改变。请改用nnoremap <buffer>。请参阅:h :map-local
  • 在没有小组的情况下使用autocmd!autocmd!将删除之前定义的所有内容,并添加当前的自动命令。最好使用augroup创建一个组。
  • 您可以选择使用%<代替%:r
  • 您可能还希望将其推入ftplugin或/ ftplugin变体之后。 :h ftplugin:h after-directory

所有在一起:

augroup CBuild
  autocmd!
  autocmd filetype c   nnoremap <buffer> <leader>cc :!gcc -o %:p:r %<cr>
  autocmd filetype c   nnoremap <buffer> <leader>cr :!gcc -o %:p:r %<cr>:!%:p:r<cr>
  autocmd filetype cpp nnoremap <buffer> <leader>cc :!g++ -o %:p:r %<cr>
  autocmd filetype cpp nnoremap <buffer> <leader>cr :!g++ -o %:p:r %<cr>:!%:p:r<cr>
augroup END

答案 1 :(得分:0)

我用这种方式对其进行了修改并且有效:

autocmd! filetype c        nnoremap <leader>cc :!gcc -o %:p:r %<cr>
autocmd! filetype c        nnoremap <leader>cr :!gcc -o %:p:r %<cr>:!%:p:r<cr>
autocmd! filetype cpp      nnoremap <leader>cc :!g++ -o %:p:r %<cr>
autocmd! filetype cpp      nnoremap <leader>cr :!g++ -o %:p:r %<cr>:!%:p:r<cr>