go的lsp-mode在使用bingo补全后端的时候会在补全的末尾多出一个0。
这是我的lsp-mode配置
有人说是 yasnippet 的问题,不知道大家有遇到吗?
我也遇到过这个问题,换另一个server可以
现在go的server还有其他可用的吗?
我也碰到这种情况。你可以给bingo提个issue。我英语不行。
bingo的开发者不是中国人吗?另外谷歌自己也在开发lsp服务器,不知道进展如何
已经有人提了。
这个问题,我也给作者提了issue。
现在的主要问题是比较慢,项目稍微大一点,就开始卡了。两周前,基本没法用它开发,出现很多问题。这周取了最新代码后,基本没什么问题了,但速度很难接受。
目前我做golang项目,还是以vim为主,vim-go插件很不错,并且速度快。
你这样一说,我都有重启vim的冲动了。
我现在,emacs和vim同时用,只是开发golang项目时用vim,做其他的或golang的小程序用emacs
原标题「请问有人使用lsp-mode的go补全吗?补全有些问题
」没有意义,我帮你改了。
聊天的时候不要问「在吗」,提问的时候也一样(除非它真的是非常非常非常小众,大部分人都没听过,LSP 和 go 显然都不是)。应该直奔主题,用简明、概括的语句作为标题。
言归正传
末尾的 0 确实是 snippet 的问题,bingo 给出的模版是这样:
Print(${1:a})${0}
可以手动展开来验证一下:
(yas-expand-snippet "Print(${1:a})${0}") ;; => Print(|a)0
如果把末尾的花括号去掉就不会了:
(yas-expand-snippet "Print(${1:a})$0") ;; => Print(|a)
可以在 Emacs 端修复。我之前就是这么处理(我修改的是 helm(+completion-at-point) 的补全,并非 company,但思路是一样的):
(define-advice completion-at-point (:around (fn) expand-snippet)
(let ((beg (point)))
(funcall fn)
(let* ((end (point))
(str (replace-regexp-in-string
"${0}\\'"
"$0"
(buffer-substring-no-properties beg end))))
(when (string-suffix-p "$0" str)
(yas-expand-snippet str beg end)))))
恩,谢谢啦,我升级过bingo,在这个issue下面我也反馈过
标题我一开始也是差不多你这个标题,但论坛这边发不出去,然后我改成这个才发成功,我也很尴尬