【问题标题】:Vim autocmd not working with nnoremapVim autocmd 不适用于 nnoremap
【发布时间】:2013-08-07 01:33:42
【问题描述】:

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

【问题讨论】:

    标签: vim


    【解决方案1】:

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

    • 这些是全局映射。在那里打开一个 c 文件并更改映射。打开一个 cpp 文件,无论您在哪个缓冲区中,映射都会更改。请改用nnoremap &lt;buffer&gt;。见:h :map-local
    • 在没有组的情况下使用autocmd!autocmd! 将删除所有先前定义的并添加到当前自动命令中。最好使用augroup 创建一个群组。
    • 您可以选择使用%&lt; 代替%: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
    

    【讨论】:

    • 谢谢。将这些东西放入 ft​​plugin 目录是可取的,但 vim 似乎无法识别 cpp.vim,当打开 cpp 文件时,它会获取 c.vim 并忽略前者。有没有办法解决这个问题?
    • 我已经进行了快速测试,并且在创建 ftplugin ~/.vim/ftplugin/cpp.vim 时没有任何问题。如果您想查看来源,可以查看:scriptnames
    【解决方案2】:

    我以这种方式修改它并且它起作用了:

    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>
    

    【讨论】:

    • ...感谢您对“工作”的有限理解。有关此问题的其余问题,请参见 Peter Rincker 的回答。
    猜你喜欢
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多