Emacs bug,很烦。最大打开文件好像是 macos 写死 1024 个,也不是写死,是编译 Emacs 的时候读的一个环境变量。
Linux 下应该是不用重新编译 Emacs 也可以调整的。
如果是你项目中有一些不需要加进去的(比如依赖文件 编译文件 等)被加进去了,那么可以设置 ignore 把这些文件忽略跟踪。
他打开这么多文件是为了跟踪文件变化,所以我想应该可以动态增加跟踪列表。不知道有啥更好解决方案没。
Emacs bug,很烦。最大打开文件好像是 macos 写死 1024 个,也不是写死,是编译 Emacs 的时候读的一个环境变量。
Linux 下应该是不用重新编译 Emacs 也可以调整的。
如果是你项目中有一些不需要加进去的(比如依赖文件 编译文件 等)被加进去了,那么可以设置 ignore 把这些文件忽略跟踪。
他打开这么多文件是为了跟踪文件变化,所以我想应该可以动态增加跟踪列表。不知道有啥更好解决方案没。
能定位到哪个文件吗, 经常遇到这个问题,很烦人。macos。
个人理解,为了跟踪变化,打开文件读取后,理论上应该关闭文件io吧,这看起来应该是一直在占用。还是有什么原因? 这个看起来就像是读取文件然后bug忘记了关掉io,然后累加造成的==!(盲猜,没有验证)
不是 bug 啊,监控变化是会占用文件描述符的,不是只有 IO 才会占用。
你搜搜那句报错,reddit 上有讨论。
嗯,可能是我不太懂,暂时先用回 python-lsp 了,他可能不是bug,但这么大的占用我总感觉不对==!
我是用lsp-pyright 有小半年了,印象中没有遇到这个问题。
赞!紫薯布丁
diff --git a/Formula/[email protected] b/Formula/[email protected]
index 87b9f0d..c25bb5c 100644
--- a/Formula/[email protected]
+++ b/Formula/[email protected]
@@ -114,6 +114,7 @@ class EmacsPlusAT29 < EmacsBase
args << "--with-native-compilation" if build.with? "native-comp"
ENV.append "CFLAGS", "-g -Og" if build.with? "debug"
+ ENV.append "CFLAGS", " -DFD_SETSIZE=10000 -DDARWIN_UNLIMITED_SELECT "
args <<
if build.with? "dbus"
我使用 homebrew-emacs-plusp安装emacs , 使用上面的补丁来实现
# cd /usr/local/Homebrew/Library/Taps/d12frosted/homebrew-emacs-plus/ ;git diff >~/.emacs.d/bin/emacs.patch
cd /usr/local/Homebrew/Library/Taps/d12frosted/homebrew-emacs-plus/
patch -t -N -p1 <~/.emacs.d/bin/emacs.patch
cd -
brew reinstall --with-native-comp --with-xwidgets emacs-plus@29
有精力的话,最好还是用上面的分支吧, configure 时加上 --with-poll
,看看有没有问题,尽早合到 master 版本。
我是打算 cherry pick 到 28 的最新 commit 试试。
lsp-mode要分析所有文件干嘛?这个问题不应该存在
代码跳转,补全都需要分析依赖吧,按说分析完可以关闭,但怎么区分哪些是源文件,哪些是依赖没有什么标准
并不需要,lsp client不需要监听所有文件,就能正常跳转和补全。
主要是这个 workspace/didChangeWatchedFiles
,下面是微软的文档
没有必要,事实是lsp server会自己监听文件变动的。
而且3.16协议其实通过打开,重命名和关闭协议就可以覆盖文件的新建,重命名和删除。
lsp-mode这种从实现和前端都模仿vscode,同时elisp性能不行,只会越来越卡。
我一直觉得emacs的lsp client要结合emacs的生态,把全键盘操作和流畅性能优势发挥出来,不要全盘抄vscode的所有细节。
微软的文档里面不是列了几点 server 监听的问题嘛,lsp-mode 其实也可以配置来 ignore 某些文件,可以一定程度上避免这个问题。
这个就不知道他的实现了,已经转向 eglot 好久了。。。
我的意思是事实上LSP server已经监听文件的变动,server不监听文件变动,补全和定义跳转怎么会有啊。
事实上,lsp client没有必要实现这个协议,微软也只是从多个语言的角度去说那几点,但是事实上lsp client没有实现也可以正常补全和定义跳转。
试试 (setq lsp-enable-file-watchers nil)
.