gpt4 book ai didi

Vim ftplugin 对 C++ 文件执行 c.vim 而不是 cpp.vim

转载 作者:行者123 更新时间:2023-12-01 07:38:53 24 4
gpt4 key购买 nike

我正在学习 Vim,我想通过将 F5 键映射到由文件类型决定的编译命令来将它设置为 IDE。

我的 ~/.vim/ftplugin/c.vim :

map <F5> :w<CR>:!clang % -o %:r.out && ./%:r.out<CR>

我的 ~/.vim/ftplugin/cpp.vim :
map <F5> :w<CR>:!clang++ -ggdb -pthread -std=c++11 % -o %:r.out && ./%:r.out<CR>

当我打开一个 C++ 文件(带有 .cpp 扩展名)并按 F5 时,来自 c.vim 的命令被执行。为什么会这样?

当我删除文件时 c.vim ,然后 Vim 加载 cpp.vim并按预期工作。

最佳答案

vim自带的cpp ftplugin有以下一行:

runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim

这意味着它将采购 ~/.vim/ftplugin/c.vim .

克服这个问题的一种方法是将您的映射放在 ~/.vim/after/ftplugin/cpp.vim 中。和 ~/.vim/after/ftplugin/c.vim文件。

但您的问题不止于此:
  • 您正在使用 :map您可能至少想要提供一种模式。 nmap
  • 你也应该使用 noremap所以它会变成 nnoremap
  • 您的映射是全局性的,因此它会覆盖您的 <f5>每次打开 cpp并切换到 c文件。您应该将其设置为特定缓冲区的本地。 nnoremap <buffer>
  • 您可能还应该设置 makeprg因此,您可以利用 :make和快速修复列表。例如setlocal makprg clang\ %\ -o\ %:r.out

  • 如需更多帮助,请参阅:
    :h :map
    :h :map-local
    :h 'makeprg'
    :h :make
    :h quickfix

    关于Vim ftplugin 对 C++ 文件执行 c.vim 而不是 cpp.vim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21339177/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com