有没有专门支持光标前进后退的插件

我不用evil,我想在imenu之后可以跳回原来光标的位置,然后也可以再前进. 目前只发现有一个goto-last-point可以支持后退,但它不支持前进. 想请教各位兄弟,有这类专门的插件同时支持前进后退吗?

用 imenu 跳转会自动推入 mark ring 吧,用 pop-global-mark 就可以了,来回跳转可以用 consult-mark

谢谢哦, pop-global-mark是那个后退.但consult-mark是选择,不是我想要的那个前进

试试这个 GitHub - dgutov/point-stack: Back and forward navigation in Emacs, 我用着还不错,代码行数很少,有不满意的也可以自己改

  1. GitHub - Fuco1/better-jump: Better ace-jump-mode
  2. ivy-push-view/ivy-pop-view/ivy-switch-view
;; 位置跳转和记录
(defvar point-stack nil
  "The stack position.")

(defun my-point-stack-clear ()
  "Clear point stack."
  (interactive)
  (setq point-stack nil)
  (message "Clear point stack, now stack size: %d" (length point-stack)))

(defun my-point-stack-push ()
  "Push current point in stack."
  (interactive)
  (setq point-stack (cons (list (current-buffer) (point)) point-stack))
  (message "Location marked, now stack size: %d" (length point-stack)))

(defun my-point-stack-pop ()
  "Pop point from stack."
  (interactive)
  (if (null point-stack)
      (message "Stack is empty.")
    (switch-to-buffer (caar point-stack))
    (goto-char (cadar point-stack))
    (setq point-stack (cdr point-stack))
    (message "Location poped, now stack size: %d" (length point-stack))))

(global-set-key (kbd "C-c p") 'my-point-stack-push)
(global-set-key (kbd "C-c [") 'my-point-stack-pop)
(global-set-key (kbd "C-c ]") 'my-point-stack-clear)

不知这几个是否满足。

可以试用一下我写的跳转的插件。 :grin:

我用的是 meow,所以绑定命令 binky-binky 到快捷键 ' ,同时也把跳回标记设置为 '

(setq binky-mark-back ?')

比如说你的情况:

  1. imenu 跳转之前先标记当前位置(比如说 j ) 'j
  2. imenu 正常跳转
  3. 想跳转回 j,只需要按 'j
  4. 想跳转回上次 imenu 的位置,只需要按 '',之后在两者之间跳转,只需要疯狂按 '' 就行了

Emacs 默认就支持吧,试试 C-u C-SPC

1 个赞

然后

   '("C-o" . xref-go-back)
   '("C-i" . xref-go-forward)

补充

(with-eval-after-load 'xref
  (customize-set-variable
    'xref-history-storage 'xref-window-local-history))

这样可以使得 xref 的跳转列表 window local

多谢各位的建议,我会自己尝试摸索一番

evil的back/forward有点用,但不多,我已经不用了,因为如何判断什么时候要在jump history里面加新的一项,这是很难的。我在一行内移动编辑,肯定不加,那移动到下一行呢,下两行呢。只有evil-goto-last-change是可靠的,因为last change的只有一项,没有前述的问题。要获得可靠的jump列表,还是要自己手动加bookmark evil-marker然后跳,最多consul/consult一下mark列表。

一些不完全相关的思路:对某些可能要反复看的东西,比如某些symbol定义,在find-definition之类操作的时候把位置记下来,之后可以helm/ivy来看看,可以省去手动加bookmark。我自己写了一个:在xref-find-definitionslsp-bridge-find-def的时候,把这个symbol加入当前project的symbol列表,随后随时用ivy查看这个列表:

1 个赞