各位大神们:
我按照github上的说明安装了cquery
和lsp-mode
,但是使用的时候按照cquery wiki上的说法执行M-x lsp-capabilities
却提示我:
No language server is associated with this buffer
开始我以为是默认的配置只支持.cpp
文件,但我分别在.c
,.cpp
和.cc
文件做了尝试,都是这个效果。请问我是哪里配置的不正确?
各位大神们:
我按照github上的说明安装了cquery
和lsp-mode
,但是使用的时候按照cquery wiki上的说法执行M-x lsp-capabilities
却提示我:
No language server is associated with this buffer
开始我以为是默认的配置只支持.cpp
文件,但我分别在.c
,.cpp
和.cc
文件做了尝试,都是这个效果。请问我是哪里配置的不正确?
需要编译或安装 server
(setq cquery-executable "/path/to/cquery/build/release/bin/cquery")
;; ;; Arch Linux aur/cquery-git aur/cquery
;; (setq cquery-executable "/usr/bin/cquery")
;; ;; Log file
;; (setq cquery-extra-args '("--log-file=/tmp/cq.log"))
;; ;; Initialization options
;; (setq cquery-extra-init-params '())
确保这个进程在运行 (pgrep -a cquery
)。另外检查 /tmp/cq.log
日志文件
我记得以前wiki上有个用use-package
的配置,现在找不到了,是否被edit了?当时配置里确实包含了(setq cquery-executable "/path/to/cquery/build/release/bin/cquery")
,pgrep
应该是没有cquery。
主要按照wiki上查询环境,我运行了两个指令:
M-x lsp-capabilities
M-: xref-backend-functions
输出明显都不对,感觉上是lsp相关的东西没正确启动
这个在楼上的博客里有
我应该是看过这个博客,但是似乎没发现有什么操作是我遗漏的。。。
Sorry,还是阅读wiki的时候粗心了,上面要求load文件到buffer后执行M-x lsp-cquery-enable
,我没有操作。。。
我增加了两行配置自动执行了:
(add-hook 'c-mode-hook 'lsp-cquery-enable)
(add-hook 'c++-mode-hook 'lsp-cquery-enable)
本人elisp不精,但是感觉cquery.el里面好像已经增加了hook,不知道是否理解有误,有无大神帮忙解读一下:
;; ---------------------------------------------------------------------
;; Register lsp client
;; ---------------------------------------------------------------------
(defun cquery--make-renderer (mode)
`(lambda (str)
(with-temp-buffer
(delay-mode-hooks (,(intern (format "%s-mode" mode))))
(insert str)
(font-lock-ensure)
(buffer-string))))
(defun cquery--initialize-client (client)
(dolist (p cquery--handlers)
(lsp-client-on-notification client (car p) (cdr p)))
(lsp-provide-marked-string-renderer client "c" (cquery--make-renderer "c"))
(lsp-provide-marked-string-renderer client "cpp" (cquery--make-renderer "c++"))
(lsp-provide-marked-string-renderer client "objectivec" (cquery--make-renderer "objc")))
(defun cquery--get-init-params (workspace)
`(:cacheDirectory ,(file-name-as-directory
(expand-file-name cquery-cache-dir (lsp--workspace-root workspace)))
,@cquery-extra-init-params)) ; TODO: prog reports for modeline
;;;###autoload (autoload 'lsp-cquery-enable "cquery")
(lsp-define-stdio-client
lsp-cquery "cpp" #'cquery--get-root
`(,cquery-executable ,@cquery-extra-args)
:initialize #'cquery--initialize-client
:extra-init-params #'cquery--get-init-params)
没加mode hook
(lsp-provide-marked-string-renderer client "c" (cquery--make-renderer "c"))
等是用于渲染LSP的 MarkupContent
等的
lsp-cquery-enable 现在已经不存在了吧
我现在怎么找不到lsp-capabilities 这个函数。。。
请问下,如何运行 cquery
呢,我发现我的 cquery-executable
已经设置正确了,但emacs还是提示找不到 cquery, pgrep -a cquery
发现什么都没有,先谢大佬!!!