Dogears.el 是一个 Emacs 库,旨在自动记住用户在缓冲区中访问过的位置,方便用户返回类似于浏览器历史记录的功能。它提供了导航后退、前进或列出记住位置的命令,并支持各种 Emacs 完成框架。Dogears 使用 Emacs 内置的书签库,但维护一个单独的列表,且不会在会话间保留。
简单来说就是自动记录光标的历史位置。
大多数现代编辑器都将光标和页面滚动解耦了,因此在使用其他编辑器阅读代码时,我可以用鼠标拖滚动条跳到某个位置读代码(而不影响光标位置),然后随意按一个按键移动光标就能跳回光标所在处:
这个功能在阅读长代码的时候很好用。
而 Emacs 在设计上有一个缺陷:翻页是靠光标上下移动完成的,用户想要翻页就必须移动光标。因此我在 Emacs 里就无法完成上述的操作,必须要靠 bookmarks 之类的东西手动记录位置,有额外的操作负担。
Dogears.el
差不多就解决了这个问题,并且更加强大,它:
- 能设置 idle 自动记录光标位置
- 能利用 advice 和 hooks 自动触发记录光标位置
- 会把所有历史记录组织成一个 list,而不只是一次的记录,并且能索引或者用快捷键直接前后跳转
logo 是狗狗很可爱
顺便在 VSCode 里面也有这个功能:
在 Emacs 里面利用这个包可以将历史记录组织成一个 list,用起来更方便了:
分享一下我用的配置
(use-package dogears
:straight t
:hook (after-init . dogears-mode)
:bind (:map global-map
("M-g d" . dogears-go)
("M-g M-b" . dogears-back)
("M-g M-f" . dogears-forward)
("M-g M-d" . dogears-list)
("M-g M-D" . dogears-sidebar))
:config
(setq dogears-idle 1
dogears-limit 200
dogears-position-delta 20)
(setq dogears-functions '(find-file recenter-top-bottom
other-window switch-to-buffer
aw-select toggle-window-split
windmove-do-window-select
pager-page-down pager-page-up
tab-bar-select-tab
pop-to-mark-command
pop-global-mark
goto-last-change
xref-go-back
xref-find-definitions
xref-find-references)))