gzz
1
大家好,我在使用emacs 30.0.5和eglot 1.16,我发现当eglot完成初始化以后,会出现一个神奇的括号自动匹配功能,当我在函数参数的一侧输入括号时,另一个括号会自动在函数参数的另一侧生成。就比如说(假设|
是我的光标所在位置):
self.vec.push(|aa, bb)
此时我敲一个左括号(
,会变成这样:
self.vec.push((|aa), bb)
那个右括号在aa的右侧生成了。
我完全没在eglot的文档里找到这个神奇括号匹配行为的说明。但是只要eglot-shutdown
以后,这个行为就会不见了。此时如果还是像上面那样敲一个左括号,就会是这种正常的行为:
self.vec.push((|)aa, bb)
我因为有同时在使用electric-pair-mode
,所以习惯当我需要把某个东西用括号包起来的时候,就先选中这些东西,然后按一个左括号就完事了。但是当我同时使用eglot的时候,这两个行为就会打架,给我生成两个右括号来。
求问大家知道eglot里这个括号的行为是正常的嘛?有没有选项可以关闭它?多谢!
gzz
2
我解决了
问题出在Rust的LSP,不是emacs或者eglot的锅。eglot的log buffer显示是rust analyzer返回了那个额外的括号插入命令:
[jsonrpc] e[17:16:16.575] --> textDocument/onTypeFormatting[20] {"jsonrpc":"2.0","id":20,"method":"textDocument/onTypeFormatting","params":{"textDocument":{"uri":"*****/lib.rs"},"options":{"tabSize":2,"insertSpaces":true,"insertFinalNewline":true,"trimFinalNewlines":true},"position":{"line":323,"character":19},"ch":"("}}
[jsonrpc] e[17:16:16.579] <-- textDocument/onTypeFormatting[20] {"jsonrpc":"2.0","id":20,"result":[{"range":{"start":{"line":323,"character":23},"end":{"line":323,"character":23}},"newText":")"}]}
我的解决方法是把:documentOnTypeFormattingProvider
加入eglot-ignored-server-capabilities
即可。
2 个赞