我发现问题了,似乎是和 eglot
一起使用的时候才会出现这个问题,要么将 eglot-send-changed-idle-time
设置为 0
,要么不将 flymake-no-changes-timeout
设置为 nil
。
这里 flymake
可能是让 eglot
作为后端的。假设我让 eglot-send-changed-idle-time = 1
,flymake-no-changes-timeout = nil
,那么我打了一大段字然后马上按 C-x C-s
,此时eglot
一直没有访问 LSP server,所以拿到的都是旧数据。因此报的错也都是旧的错误。
实际上最好是当我按下 C-x C-s
的时候,eglot
先和 LSP server 通信更新错误列表,然后再让 flymake 显示。