在使用 lsp-mode 时,可以将鼠标悬浮到变量上面,然后在屏幕左下角的 minibuffer 里面会出现关于当前变量的类型/注释的提示。但是在屏幕很长,或者当前代码处在屏幕最上方的时候,这样查看就很不方便。请教各位大佬,能不能将这个提示配置成类似 atom 或者 vscode 那样的直接悬浮显示在当前变量上方的样式?
相信我,悬浮更不方便,会挡住很多内容,还不敢打字和移动光标,因为一打字/移动悬浮框就没了。
建议绑定一个快捷键,把光标当前所在的文档等提示在新buffer中打开。这样可以边看边写,多年下来的最佳体验,悬浮框和minibuffer仅仅适合非常短小的看一眼就能记住的信息,比如参数类型。
5 个赞
可以,这个方法还是挺方便的
这是我的配置,可参考
(defvar eldoc-posframe-buffer "*eldoc-posframe-buffer*"
"The posframe buffer name use by eldoc-posframe.")
(defvar eldoc-posframe-hide-posframe-hooks
'(pre-command-hook post-command-hook focus-out-hook)
"The hooks which should trigger automatic removal of the posframe.")
(defvar eldoc-posframe-delay 0.2
"Delay seconds to display `eldoc'.")
(defvar-local eldoc-posframe--timer nil)
(defun eldoc-posframe-hide-posframe ()
"Hide messages currently being shown if any."
(when eldoc-posframe--timer
(cancel-timer eldoc-posframe--timer))
(posframe-hide eldoc-posframe-buffer)
(dolist (hook eldoc-posframe-hide-posframe-hooks)
(remove-hook hook #'eldoc-posframe-hide-posframe t)))
(defun eldoc-posframe-show-posframe (str &rest args)
"Display STR with ARGS."
(when eldoc-posframe--timer
(cancel-timer eldoc-posframe--timer))
(posframe-hide eldoc-posframe-buffer)
(dolist (hook eldoc-posframe-hide-posframe-hooks)
(add-hook hook #'eldoc-posframe-hide-posframe nil t))
(setq eldoc-posframe--timer
(run-with-idle-timer
eldoc-posframe-delay nil
(lambda ()
(when str
(posframe-show
eldoc-posframe-buffer
:string (apply #'format str args)
:postion (point)
:poshandler #'posframe-poshandler-point-bottom-left-corner-upward
:left-fringe 8
:right-fringe 8
:internal-border-width 1
:internal-border-color (face-attribute 'font-lock-comment-face :foreground)
:background-color (face-background 'tooltip)))))))
(setq eldoc-message-function #'eldoc-posframe-show-posframe)
3 个赞
嗯,这样的话对于读代码还是很方便 感谢分享配置
这个配置真好,拿走了,谢谢
这个方法好👍🏻
打扰, 对你说的这种功能很感兴趣, 问一下有没有已有的package或配置可以参考(baipiao)
eldoc 为什么每移动一次,都要重新调用一下 eldoc-message-function ?