cquery我不懂,但是快速输入#include <|>
难道不是yasnippet的事情么。。。补全当然只对stdio.h
啊。。
cquery 可以 include 补全一些第三方的头文件包括你自己写的
irony-mode, cquery这些, 会动态生成一些snippet, 不用自己写snippet了, 更方便
我觉得吧,include补全真不如把需要的include打表然后用ivy
我昨天抄了你的defvar +amos/default-include-headers
(defun my/ivy-insert-include ()
(interactive)
(ivy-read "#include: "
(append
+amos/default-include-headers
(split-string
;;;;;;;;;;;;; -L ,因爲在某些系統上 /usr/include/sys/ 裏是 symlinks
(shell-command-to-string "(cd /usr/local/include ; find . -type f ; cd /usr/include ; find -L sys -type f) | sed 's=^./=='")))
:action #'my//insert-include))
對於std include確實不錯,但對於項目內、或third-party頭文件不方便。
我抄+改的這個 https://github.com/MaskRay/cquery/blob/fuzzy/src/fuzzy_match.cc
比 flx.el 好多了
我每个project都有独立的include list, 开始搞一波就好。 或者cquery来一个dump include list 的feature, 那就更方便拉
那emacs-cquery
里面有没有可能把include path提取出来呢?
比如irony
可以(Issues · randomphrase/company-c-headers · GitHub )
(defun company-c-headers-path-user-irony ()
"Return the user include paths for the current buffer."
(when irony-mode
(irony--extract-user-search-paths irony--compile-options
irony--working-directory)))
(setq company-c-headers-path-user #'company-c-headers-path-user-irony)
这样吧user include path传给company-c-headers
,同样的还有system include path。
或者是得到complier options,这样可以把company-irony-c-headers 拿过来抄。。。
可以设置initialization options里的extraClangArguments
(我很想在自己的fork里改掉这个名字,但还没想好更好的)加上-I -isystem -iquote
等
你的意思是加上-I
这些就可以补全相应的头文件了吗?不过我的意思是通过cquery
获得当前文件的编译器参数来获得include path或者直接获得include path。。。
有个函数cquery-file-info
,用于获取命令行
cquery-tree.el 里 Unicode+23F7 显示不出来……应该安装什么字体?
获取这些参数后再调用clang或gcc命令(company-c-headers是这样工作的吧?)来获取头文件列表?这样又要依赖clang了,没有充分利用cquery的功能。
如果lsp补全再加一层处理,即cquery提供原始补全列表,然后到emacs这边用lisp做一层处理,然后再显示,这样可定制性就很强。比如include补全,cquery把头文件列表给过来(比如给company-c-headers)。
company-irony-c-headers
是这样,company-c-headers
的话是直接让用户提供路径列表。。。不过cquery
没有对外获取头文件列表的方法的话只有这样啊,而且cquery-file-info
的话,不是也包含了用的哪个编译器吗,主流编译器都可以通过-xc/c++ -E -v -
来输出路径吧,不支持的也就算了。。。
src/messages/cquery_wait.cc
notification,这个操作是阻塞的,执行后不能处理其他请求(我怀疑还有其他问题,所以自己的fork就删除了这个方法)
你去提issue吧。我觉得他们可能的解决方案是碰到wait
请求就创建detached std::thread
,阻塞到结束。
这类操作已经是数据库范畴了……
guo
2018 年4 月 10 日 03:01
33
#include 如果可以弹出一个窗口根据要使用的函数来选择头文件,就很爽了.
毕竟包含头文件的目的并不是文件本身,而是函数.
這個應該結合 global completion,然後用 textDocument/codeAction
(可能)自動產生#include