lsp-bridge -- 速度最快的语法补全插件

这在打开了 meow-mode 时表现确实和你说的一样,是正常的,但如果我启动后通过M-x meow-mode 关闭 meow-mode 返回原本的 emacs 操作模式时,就不会显示补全了,我感觉这种情况应该是要显示补全的

或许可以在第一层检查后再检查变量 meow-mode ,在为 nil 时仍显示补全?

(defun lsp-bridge--is-meow-state ()
  "If `meow' mode is enable, only show completion when meow is in insert mode."
  (or (not (featurep 'meow))
      (and meow-insert-mode meow-mode)
      (minibufferp)))

这个测试下?

上面的测试下来是不行,我想了一下:对于 meow-insert-modemeow-mode 这两个变量的取值情况,是想要在 meow-modet, meow-insert-modenil 时不显示补全,其他情况都显示补全,比如我说的情况是 meow-modemeow-insert-mode 都为 nil

所以我觉得可以是下面这样

(eq meow-insert-mode meow-mode)

这个我测试下来好像没什么问题

建了个 PR fix: Show completion behavior of meow and evil by Czcfsdx · Pull Request #1179 · manateelazycat/lsp-bridge · GitHub, 进一步可以去那边讨论

1 个赞

已经合并了, 感谢大佬

大佬,使用lsp-bridge, M-x 时,没有自动补全,应该怎么设置呢? 小白

M-x 的补全不是 lsp-bridge 提供的范围, 也没有必要。

你试试 vertico

Neovim 这么好看, 搞得我也想用了… Neovim 有对 Emacs 键位的完整支持吗?

如果想要切换的neovim,可以考虑:

在inser mode下支持emacs键位,当然具体你还得看这个项目;其实你也可以直接在insert mode 下直接自定义。

我用过 Vim, 就是想问能不能不用模态编辑, 完全变成 Emacs 的方式, 我也不想考虑啥啥 mode 也不想自己动手配置了. 最好像 Evil 那样的成熟度.


它那个宣称的 Readline key bindings 就是 Emacs 键位吧? Bash 应该也是抄的 Emacs 键位

应该没有你期待的这种,vim和neovim这种肯定还是模态编辑,小修小补做些适合emacs用户的改动还可以,但是指望不用模态编辑就过于缘木求鱼了。

1 个赞

我用过 Vim, 就是想问能不能不用模态编辑, 完全变成 Emacs 的方式, 我也不想考虑啥啥 mode 也不想自己动手配置了. 最好像 Evil 那样的成熟度.

这个基本上是不可能的。实现一些基础的 bash 级别的是可以的。再复杂的行为就很难了。主要有如下的原因:

  1. (neo)vim 没有 minor-mode-map,只有 buffer 和 global 两层。
  2. insert 模式下不能输入 prefix (C-u, M-number) 。在 normal 和 visual 模式有 native 的 M-number 对应物,但是也没有 C-u 的对应物。

请教猫大,我这边lsp bridge一直有点小毛病,主要表现就是工程稍微大一点点就不补全(只补全search word,或者只补snippet),或者偶尔补全。目前主要是搞python(之前C++的ccls也有类似问题)。lsp-bridge这个项目本身是能补全的,但也会卡,总感觉是server响应不过来

emacs -Q 也能复现问题。

尝试自己定位问题,打开了 lsp-bridge-enable-log 后,发现 *lsp-bridge* 里在疯狂刷屏几十万行的log,不知道要怎么看。

其中最后有一些log是这个

--- [20:37:25.544984] Recv window/logMessage notification from 'basedpyright' for project xxx
{
   "jsonrpc": "2.0",
   "method": "window/logMessage",
   "params": {
      "type": 3,
      "message": "Emptying type cache to avoid heap overflow. Used 3579MB out of 4144MB."
   }
}

同样的项目换成lsp-mode用pyright就没什么问题。(之前C++项目也是换lsp-mode就能补全)

我的直觉猜的是server被过于频繁请求了?

想请教一样这种问题我如何继续排查,我自己 emacs -Q --load min.el 就能复现,想找时间排查一波,谢谢

(require 'package)
(setq package-user-dir (expand-file-name "~/.emacs.d.spacemacs/elpa/thsht/lsp-bridge-backup/"))
(package-initialize)

(add-to-list 'load-path (expand-file-name "~/data/terrytsao/software/elisp/lsp-bridge/"))

(evil-mode 1)

(require 'yasnippet)
(yas-global-mode 1)
(setq lsp-bridge-python-command "/home/xiaoxiangcao/dev/pyvenv/env/bin/python3")
(setq lsp-bridge-enable-log t)
(setq lsp-bridge-python-multi-lsp-server "pyright_ruff")  ;; 默认 basedpyright 也都有在试

(require 'lsp-bridge)
(global-lsp-bridge-mode)

(find-file (expand-file-name "~/Documents/myWork/xxx.py"))

多谢!!

把日志选项关了,日志选项只是开发的时候用,平常不要开,日志太多影响性能。

平常没开的。只是我尝试定位时才开

有测试项目可以看吗?

公司的代码,不太能。所以想请教定位思路,想自己排查排查。别的项目还没空试

在补全接口的两边,python和elisp打印时间。

看看是lsp server慢?还是补全早就好了,elisp这边有问题?

1 个赞

感谢回复,我抽空试试。

部分 golang 文件,find-def 收不到回包。(lsp-mode 正常) 有人遇到过么?