Vim autocmd无法使用nnoremap

qed*_*qed 3 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>
Run Code Online (Sandbox Code Playgroud)

Pet*_*ker 12

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

  • 这些是全局映射.有开放的ac文件和映射更改.打开一个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
Run Code Online (Sandbox Code Playgroud)