3

我正在尝试设置 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>
4

2 回答 2

12

FileType 自动命令使用文件类型而不是文件名来匹配。您可以改用 c 和 cpp。见:h FileType。但是,您的问题还不止于此:

  • 这些是全局映射。在那里打开 ac 文件和映射更改。打开一个 cpp 文件,无论您在哪个缓冲区中,映射都会更改。请nnoremap <buffer>改用。看:h :map-local
  • autocmd!无组使用。autocmd!将删除所有先前定义的并添加到当前的自动命令中。最好用augroup.
  • 您可以选择使用%<而不是%:r.
  • 您可能还想考虑将其推入 ftplugin 或 after/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
于 2013-08-06T17:33:42.843 回答
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>
于 2013-08-06T17:18:58.883 回答