首页 > 解决方案 > 如何从子目录中提取 compile_commands.json?

问题描述

我有一个 c++ cmake 项目。我在work用于编译的主目录中创建了一个子目录。当我编译项目时,我 cd 进入work并执行cmake .. && make. 这样,编译器文件就不会污染主目录。work也是生成的目录,compile_commands.json我用它来高亮coc语法。

只要在子目录下,coc就找不到了,因此,我在主目录下创建了指向该文件的软链接。这可行,另一个解决方案是添加一个命令CMakeLists.txt,将文件复制到主目录,但我一直想知道是否有更好的方法来做到这一点。我的意思是,用一种更好的方法,比如.vimrc在主目录中创建并在其中写入 coc 可以用来查找文件的命令。

到目前为止,我发现 vim 命令可以让我朝那个方向移动,set exrc将加载本地.vimrc文件

我试过的一件事是把

" setting with vim-lsp
if executable('ccls')
   au User lsp_setup call lsp#register_server({
      \ 'name': 'ccls',
      \ 'cmd': {server_info->['ccls']},
      \ 'root_uri': {server_info->lsp#utils#path_to_uri(
      \   lsp#utils#find_nearest_parent_file_directory(
      \     lsp#utils#get_buffer_path(), ['.ccls', 'compile_commands.json', '.git/', 'work/compile_commands.json' ]))},
      \ 'initialization_options': {
      \   'highlight': { 'lsRanges' : v:true },
      \   'cache': {'directory': stdpath('cache') . '/ccls' },
      \ },
      \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp', 'cc'],
      \ })
endif

进入本地 .vimrc 文件,但这不起作用

我应该在位于主目录的 .vimrc 中输入什么命令来告诉 coc 插件查找./work/compile_commands.json

标签: neovim

解决方案


推荐阅读