使用 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++ 项目