-
Notifications
You must be signed in to change notification settings - Fork 215
Peek [简体中文版]
lsp-bridge-peek
的基本用法是在不离开当前缓冲区的情况下阅读符号的定义和引用。这在阅读和编写代码时经常非常有帮助。
在一个 symbol 上输入 M-x lsp-bridge-peek
,可以查看其定义和引用。一个预览窗口将在当前行的下方下打开,并跟随光标移动。您可以使用以下按键在预览窗口中浏览:
-
M-n
、M-p
:下一行/上一行。 -
M-N
、M-P
:下一个/上一个定义或引用。 -
M-l j
:跳转到定义或引用。 -
M-l b
:返回到 lsp-bridge-peek-jump 之前的位置。 -
C-g
:关闭预览窗口。 这些按键是在lsp-bridge-peek-keymap
中定义的,你可以自行设置。
在阅读定义或引用时,我们经常发现它调用了另一个函数,并且我们也对该函数的定义和引用感兴趣。使用传统的代码阅读工具,我们很快就会在许多 buffer 中迷失方向。
在 lsp-bridge-peek 中这不是一个问题。在预览会话中,只需输入 M-x lsp-bridge-peek-through
(你可以把它绑定到任何你喜欢的键),此时预览窗口中的每个 symbol 的开头将附加一个 ACE 字符串,然后您就知道该怎么做了 :) 只需键入它以查看该符号的定义和引用,内容仍然显示在刚刚那个预览窗口中。
多次执行此操作,你 peek 的历史记录将显示在预览窗口的底部,如下所示:
func1 -> func2 -> [func3]
您可以键入 <left>
和 <right>
在历史记录中移动。现在回到 func2
,历史记录就变成了:
func1 -> [func2] -> func3
此时,您可以再次浏览 `func2 的定义和引用。
如果现在我们 peek through func4
,历史记录将变为:
func1 -> func2 < [func4]
<
表示您在此处创建了一个分支。当前分支是 func4
,而另一个分支是 func3
。你可以通过键入 <up>
/<down>
在分支之间切换。恭喜!您刚刚学会了一种浏览树状代码阅读历史的最有效方法。
代码如下:
(require 'avy)
(defun lsp-bridge-avy-peek ()
"Peek any symbol in the file by avy jump."
(interactive)
(setq lsp-bridge-peek-ace-list (make-list 5 nil))
(setf (nth 1 lsp-bridge-peek-ace-list) (point))
(setf (nth 2 lsp-bridge-peek-ace-list) (buffer-name))
(save-excursion
(call-interactively 'avy-goto-word-0)
(lsp-bridge-peek)
(setf (nth 3 lsp-bridge-peek-ace-list) (buffer-name))
(setf (nth 4 lsp-bridge-peek-ace-list) (point))))
事实上,你可以把 (call-interactively 'avy-goto-word-0)
中的 avy-goto-word-0
换成任何你喜欢的跳转函数,如avy-goto-char
、avy-goto-char-2
,当然,如果你喜欢ace,把函数换成ace的跳转类型也可以😉,只不过要记得更改 require
你可曾经历过在读代码时独自对着一长串的buffer-list独自凌乱?你可曾在众多buffer中跳转试图找回自己刚刚看的那个?你可曾面对着许多要删除的buffer心力交瘁?
不用担心,lsp-bridge-peek
就不会有这个问题。一切浏览都只在专门的 peek window 中发生,当你查看完毕,只需一个 C-g
,顿时鸟鸣啾啾、流水潺潺、云淡风轻,你的工作环境仍然是那幅可爱的模样(笑
而且,lsp-bridge-peek
会记录下来你查看的历史记录,你可以在这之中自由地跳转,而不用耗费脑筋去记住刚刚看到了哪个 symbol,减少了用户花在管理buffer和工作环境上的时间,有效减轻了大脑负担。
综上,我认为 lsp-bridge-peek
是一个致力于让用户读代码更加轻松方便的工具。
当然,我并不是在比较 lsp-bridge-peek
和 lsp-bridge-find-references
的优劣。lsp-bridge-find-references
是一个极其强大的代码重构工具,在调整代码时能发挥的作用是 lsp-bridge-peek
望尘莫及的。lsp-bridge-peek
和 lsp-bridge-find-references
是近乎完全不同的工具,它们能够在最适合自己的情况下发挥出奇效。所以,具体使用哪一个工具应当看您当时的需求,不要让工具束缚住了自己,just 从心而为😉