之前时间,巨硬发布了LSP(Language Server Protocol),目的是解决目前IDE和各语言的m+n问题。想法很好,不过直到最近,终于有我觉得可以用的工具出来了,并且已经代替了我在使用的其它的插件。
由于我最近主要就是做做程设作业,做做OJ这些,主要就是和C++打交道。所以我当然就开始找一些比较成熟的C++的LSP server。有一个 Sourcegraph 维护的 langserver.org ,上面有着目前的各个语言和编辑器/IDE的支持情况,我刚才提到的cquery也会加入到这个列表里去。从这个列表里可以看到,我用的比较多的Python和Haskell都已经有不错的的LSP server,我已经开始在本地体验pyls和hie了,感觉做得挺不错的。
回到C++,我的主力编辑器是Emacs,其次是CLion,而Emacs上的LSP支持 lsp-mode也在快速发展,与之配合的lsp-ui 也出现了很多很棒的功能。
下面开始编译并配置cquery:
git clone https://github.com/jacobdufault/cquery --recursive
cd cquery
./waf configure # to use system clang, append --use-system-clang
./waf build
然后配置Emacs:
(use-package lsp-mode
:ensure t
:diminish
lsp-mode
:commands
(lsp-mode)
:config
(lsp-define-stdio-client
lsp-pyls
"python"
#'get-project-root
'("/usr/local/bin/pyls")))
(use-package lsp-ui
:commands
lsp-ui-mode
:init
(add-hook 'lsp-mode-hook 'lsp-ui-mode))
(use-package cquery
:load-path
"path_to_cquery/emacs"
:config
(setq
cquery-executable "path_to_cquery/build/app"
cquery-resource-dir "path_to_cquery/clang_resource_dir"))
接下来,需要配置 基于Clang的 工具都需要的 Compilation Database 。Sacrasm对这个有一个非常完整的总结 ,可以查看里面的方法。我这里推荐在CMake项目中用CMake自带的,加上nickdiego/compiledb-generator 应付基于Makefile/Autotools的项目。如果都不适用,就按照cquery的README写一个简单的.cquery文件即可,不需要Bear那种必须关闭SIP的方案。
然后就可以享受很多功能了!还是挺好用的。