使用 ninja 和 clang++ 时 vim 中的快速修复列表

Posted

技术标签:

【中文标题】使用 ninja 和 clang++ 时 vim 中的快速修复列表【英文标题】:Quickfix list in vim when working with ninja and clang++ 【发布时间】:2013-12-15 21:46:24 【问题描述】:

我有一个使用 ninja 和 clang++ 编译的 C++ 项目,并且希望在编译过程中出现错误出现在 quickfix 列表中。目前,当我设置makeprg=ninja,然后运行:make时,ninja生成的所有输出都只是出现在quickfix窗口中,不能用于跳转到相应的文件/行等。

我不是在寻找 syntastic 提供的功能(我已经在使用),但我也想查看项目中其他文件的错误,类似于 IDE 提供的错误。

如果这不能(轻松)用 ninja 完成,也欢迎使用 make 的解决方案(该项目使用 cmake,所以两者都是可能的),但如果可能的话,我想留在 ninja。

【问题讨论】:

【参考方案1】:

ninja生成的所有输出都只是出现在quickfix窗口中,不能用来跳转

听起来 Vim 无法从错误中解析位置信息,因为尚未设置适当的 'errorformat'

四处搜索,也许有人已经写过这样的东西。否则,您需要编写自己的编译器插件,然后使用:compiler ninja 而不是:set makeprg=ninja。见:help write-compiler-plugin

【讨论】:

是的,这看起来像是一个起点。但是我对使用ninja 作为我的:compiler 犹豫不决,因为它只是make 程序,而clang++ 是实际的编译器。但是,查看compiler/gcc.vim 文件,似乎这也使用了为make 的输出量身定制的errorformat【参考方案2】:

CMake+Ninja 使用相对路径。这是 Vim 中的一个问题。 Vim 使用一种算法来尝试猜测引发错误的文件的位置。您可以在:h quickfix-directory-stack 找到后者的描述。 另外,请看这里:https://gitlab.kitware.com/cmake/cmake/-/issues/13894。 CMake 的人们已经意识到了这一点并且有一个未解决的问题。

【讨论】:

以上是关于使用 ninja 和 clang++ 时 vim 中的快速修复列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 CMake、Clang 和 Ninja 在 Windows 上构建 c++ 项目

使用 CCMAKE 将 Clang 设置为自己的编译器后 ninja 出错

无法与忍者建立clang [重复]

将“-j”参数从 gradle 传递给 ninja

Vim 的 Clang Complete

vim代码格式化插件clang-format