emacs 26 一直到 pretest 1 都还有问题,建议直接 emacs 27。
EMACS25.3.1不行吗?cquery也没有对emacs版本有要求啊
lsp-ui 中的 chlid-frame 是 Emacs 26 的新功能。
lsp-cquery-enable 一定要在project 目录里的找的 compile_commands.json 或者 .cquery 才会启动 cquery 的server
YouCompleteMe 只針對一個 translation unit,不支持 find references。find definitions 不知到怎麼實現的,理論上如果在其他 .cc 文件是跳轉不了的,但能跳轉到 #include 裏的頭文件,用一些啓發可以找到 .cc
rtags 存儲模型設計得很愚蠢,find references 可以 strace 看它到底要訪問多少文件。
以及 LSP 週邊客戶端都在茁長成長,這兩個的插件系統都是自己一套的,多一份配置
cquery
跟 Emacs 没关系。cquery.el
需要至少 Emacs 25.1,我用 25.3 试过可以正常工作。先把自己操作层面的因素排除掉(特别是 cquery 并非开箱即用的),然后再找外部原因。
感谢大家的回复!
我现在已经将lsp-ui卸载了. 现在的状态是cquery安装好了, 也按照wiki相应地配置了emacs. 也调用了lsp-cquery-enable, 但是不能补全, 而且调用xref-find-xxx之类的命令时, 总是提示visit tags table (default TAGS). 我觉得language server没有正常工作.
是不是还有什么需要特别注意的呢?
server 有没有启动可以用 ps aux | grep <关键字>
查看,提示 visit tags table (default TAGS)
跟 server 无关吧,都 lsp 了应该不需要 TAGS 了,你看下 xref-find-xxx 是不是可以配置不同的来源。
另外 Linux 可以用 forkstat 透過 process events connector 查看進程是否啓動過
M-: xref-backend-functions
看是否(lsp--xref-backend)
對於畫 $cquery/callHierarchyTree ,可以復用 tree-widget.el 或 treemacs 嗎?(感覺我的elisp技藝不夠做這件事:frowning:
昨天我已經改成 編譯cquery時,如果指定的環境變數CXXFLAGS裏沒有-std=
設定則默認加-std=c++11
/ 默認--bundled-clang=5.0.1
(使用系統clang因爲版本問題容易出問題);還有哪些能更加用戶友好(向out-of-the-box方向努力)的方式?
lsp-mode 目前还不能在临时 buffer(包括 *Org Src ... *
)中使用吧,必须是打开磁盘上存在的文件,才能补全,我初步测试是这样的,不知是不是漏了什么没有设置?
lsp-methods.el 很多方法會讀 buffer-file-name
,必須是磁盤上存在的文件。昨天 @jiegec 有個PR也很有趣 [lsp-ui-peek] Propagate lsp--cur-workspace when jumping to xref and enable lsp-mode when necessary by jiegec · Pull Request #22 · emacs-lsp/lsp-ui · GitHub
不能用在临时 buffer 就不好玩了。
这个 lsp-ui 在终端底下有 bug,输入第一个字的时候忽然跳出个全屏的只读窗口。
提供编译好的包最好
折腾了半天。用bear make产生了个数据库文件。用company capf后端可以进行简单补全。但头文件还是补全不了。可以进行跳转到函数定义。
但还是无法识别make unique之类的语法。而且lsp imenu无法使用。
还请各位大神指点迷津
這個艱難之處在於 bundled clang+llvm 體積很大。只能讓構建方式儘可能簡單來緩解了 PKGBUILD - aur.git - AUR Package Repositories 這個也很簡單了
不是識別不了 make_unique, 而是在 src/indexer.cc ,作者的邏輯是跳轉到 constructor 而不是 make_unique 的 primary template:
bool is_template = ref->referencedEntity->templateKind !=
CXIdxEntityCXXTemplateKind::CXIdxEntity_NonTemplate;
if (is_template && str_begin("make", ref->referencedEntity->name)) {
// Try to find the return type of called function. That type will have
// the constructor function we add a usage to.
optional<ClangCursor> opt_found_type = FindType(ref->cursor);
if (opt_found_type) {
std::string ctor_type_usr =
opt_found_type->get_referenced().get_usr();
ClangCursor call_cursor = ref->cursor;
// Build a type description from the parameters of the call, so we
// can try to find a constructor with the same type description.
std::vector<std::string> call_type_desc;
for (ClangType type : call_cursor.get_type().get_arguments()) {
std::string type_desc = type.get_spelling();
if (!type_desc.empty())
call_type_desc.push_back(type_desc);
}
M-: imenu-create-index-function => lsp–imenu-create-index ?我現在用的更多的是 lsp-ui-workspace-symbol
感谢大神的回复!
- make_unique<…>和make_shared<…>之类的问题只能等作者更新了吧?
- 关于imenu. 运行M-: imenu-create-index-function 返回的结果为 imenu-default-create-index-function. 我在~/.emacs.d/init.el中设置(setq imenu-create-index-function 'lsp-imenu-create-index)不起作用. 当打开一个c++源文件, M-:(setq imenu-create-index-function 'lsp-imenu-create-index)后运行imenu报错imenu–make-index-alist: Symbol’s function definition is void: lsp-imenu-create-index
- 另外, 我发现用company补全的时候(用的后端是company-capf, 没有装company-lsp), 选中候选的时候, 直接在源文件中插入的字符串中还包含${1} … ${0}之类的, 光标没有自动跳转并选中这些占位符.是compan的问题吗啊?
(lsp-enable-imenu)
開啓imenu
https://github.com/Sarcasm/irony-mode/releases ? 下載好和 git clone 之後編譯體驗相差有多遠?是因爲國內 git clone 慢?
作者推崇mono repo,我看看再推動一下 emacs/cquery.el Melpa 化和 git filter-branch 移除過期的VSCode插件減少.git體積 Create releases · Issue #209 · jacobdufault/cquery · GitHub