如果跳转了那就是clangd或者是别的lsp告诉你要跳转到那头文件。这不是lsp客户端的问题
你把compilation_commands.json弄出来了吗?
如果跳转了那就是clangd或者是别的lsp告诉你要跳转到那头文件。这不是lsp客户端的问题
你把compilation_commands.json弄出来了吗?
明白了。没玩过compilation_commands.json。我先研究一下。
lsp-bridge如果发现LSP Server返回的文档是Markdown时, 会调用 markdown-mode 去渲染, 当 markdown-mode 渲染文档或代码时, 会创建很多临时 buffer , 这些临时buffer如果匹配 lsp-bridge-default-mode-hooks 里面的 mode 类型时, 就会导致这些临时 buffer 误调用 lsp-bridge-monitor-before-change
和 lsp-bridge-monitor-after-change
函数。
这些临时的Buffer会干扰 lsp-bridge 发送错误的 textDocument/didChange 消息给 LSP Server, 从而导致几个严重的错误:
今天看了一晚上日志, 终于通过补丁 When user do `delete' operation, `length' is bigger than 0, and the … · manateelazycat/lsp-bridge@e13ba84 · GitHub 修复了。
这个bug估计从 lsp-bridge 弹出API文档支持 Markdown 渲染就有了, 强烈建议大家更新到最新版。
整明白了。按照lsp-bridge文档,做了两件事,现在看代码非常丝滑,比source insight还要爽
1,实现一函数lsp-bridge-set-project-path,来设置lsp-bridge-get-project-path-by-filepath为当前目录
(defun lsp-bridge-set-project-path ()
(interactive)
(setq lsp-bridge-get-project-path-by-filepath
(lambda (filepath)
(save-match-data
(and (string-match default-directory filepath)
(match-string 0 filepath))))))
2,很多代码只是用来看的,本地无法编译,就写了个脚本造一个 compilation_commands.json,内容就是
{
"arguments": [
"/usr/bin/gcc",
"-c",
"-Wall"
],
"directory": "/Users/lula/work/src/src/C/ffmpeg-1.0.10",
"file": "/Users/lula/work/src/src/C/ffmpeg-1.0.10/ffplay.c"
}
lsp-bridge解决了补全提示,一键编译/运行、调试有什么插件推荐呢?列举几个常用语言,如c、python、shell等,特别是不和lsp-bridge冲突。
编译用 emacs 自带的 compile, 运行用 shell-command ,调试用 dap-mode
dap-mode 似乎是依赖于 lsp-mode
的,是不是会影响 lsp-bridge
的使用?
确实依赖 lsp-mode, 但是可以在不启动 lsp-mode 的情况下使用 dap-debug
不知道有没有用web-mode的小伙伴, 我这里补全时会有很高的几率吃掉一些字符,比如吃掉换行符,后面的行会跑上来, 常见于 script 内, 已经精减了emacs配置, 只留lsp-bridge, 依然能够重现.
可以发一下最小稳定重现的压缩包吗?
lsp-brdige能和dap-mode配合调试吗?如果能,需要怎么安装和配置?
需要安装lsp-mode但又不启动 lsp-mode,这种方案丑陋又怪异
我不用dap-mode,不知道怎么弄
把 lsp-mode 当成 dap-mode 的依赖库就行了。
这种方式确实不太优雅,不过对我来说能用就行,没有时间去实现一个独立的 dap
我是直接开启了lsp-mode和lsp-bridge,然后禁用掉lsp-mode的补全等一些功能,这样就是内存可能用多了,然后有点怪,但是可以使用dap-mode。相关配置如下:
(use-package lsp-mode
:init
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
(setq lsp-keymap-prefix "C-c l")
;; (setq lsp-completion-enable nil)
(setq lsp-headerline-breadcrumb-enable nil)
(setq lsp-completion-provider :none)
(setq lsp-modeline-diagnostics-enable nil)
(setq lsp-modeline-code-actions-enable nil)
(setq lsp-lens-enable nil)
:hook (;; replace XXX-mode with concrete major-mode(e. g. python-mode)
(dart-mode . lsp)
(haskell-mode . lsp)
;; if you want which-key integration
(lsp-mode . lsp-enable-which-key-integration))
:commands (lsp lsp-deferred))
;; Debug
(use-package dap-mode)
;; UI
(use-package lsp-ui :commands lsp-ui-mode)
大家可以说一下都用 dap-mode 的哪些功能? 还有都在哪些语言用 dap-mode ?
也许我下半年有空的时候可以用 lsp-bridge 类似的技术开发一个完全异步的调试框架。
以前之所以没有弄, 主要是公司的事情太多了, 下班修复 EAF lsp-bridge 的issue基本上把我业余时间全部占满了。 还有一个原因跟我自己的坏习惯有关, 我调试代码除非是崩溃的代码, 日常逻辑代码都用目测。
其实 dap-mode 的效果和 emacs 的 gdb-many-windows 效果差不多,但是支持的语言远超 gdb。它可以为所有 dap 协议支持的语言提供一个统一的、美观的调试方法,能把调试信息可视化(省的再去敲命令了)
我平常写代码比看代码多,所以调试器用的少。
是我犯了个低级错误, 我机器上有两版web-mode, 以为加载的是新版, 实际加载的是, 14.*, 改为加载17.*后问题解决. 顺便赞一下大神的作品, 以前试过多种方案补全, 都放弃了, 只有 lsp-bridge 甚至造越了期望值!!!