这在打开了 meow-mode 时表现确实和你说的一样,是正常的,但如果我启动后通过M-x meow-mode 关闭 meow-mode 返回原本的 emacs 操作模式时,就不会显示补全了,我感觉这种情况应该是要显示补全的
或许可以在第一层检查后再检查变量 meow-mode ,在为 nil 时仍显示补全?
这在打开了 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-mode 和 meow-mode 这两个变量的取值情况,是想要在 meow-mode 为 t, meow-insert-mode 为 nil 时不显示补全,其他情况都显示补全,比如我说的情况是 meow-mode 和 meow-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, 进一步可以去那边讨论
已经合并了, 感谢大佬
大佬,使用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用户的改动还可以,但是指望不用模态编辑就过于缘木求鱼了。
我用过 Vim, 就是想问能不能不用模态编辑, 完全变成 Emacs 的方式, 我也不想考虑啥啥 mode 也不想自己动手配置了. 最好像 Evil 那样的成熟度.
这个基本上是不可能的。实现一些基础的 bash 级别的是可以的。再复杂的行为就很难了。主要有如下的原因:
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这边有问题?
感谢回复,我抽空试试。