emacs中前进后退

不用evil

请问有没有哪个包,能支持emacs中前进后退的?

就像vim中的Ctrl-o, Ctrl-i一样。

找了个better-jumper包,简单配了下好像也不好用

喵,meow ,模式编辑,开发者就在论坛里,现在的功能已经比较完善了,非常好用,正适合你。

帖子在这,猫态编辑:Meow

Emacs meow 一搜,GitHub 也能搜到。

给你 补个链接 :
https://github.com/meow-edit/meow

1 个赞

好像不沾边啊。。。。better jump 就是用来做 vim 那个 jump 效果的。

简单看了一下,感觉好像很强大

我题目里所说的前进后退,这个meow也能够实现吗?

因为你的问题有点模糊, 比如这句。那我的理解就是你想相同的移动,更少的按键。

我没用过,但是 meow-expand 就很方便了,可能你用过会更适应

我强拉一波 :joy:

1 个赞

原来如此。

可能还有点不一样,vim里Ctrl-o, ctrl-i 跳转跨度很大的,可以跨文件。

不过你推荐这个我也会试用一下。

能指导一下怎么做的吗?

我把ctrl-o ctrl-i 按键映射到 jump-backward/jump-forward 怎么不行啊

好像还要先set-jump?

就是你要事先列的出来都有那些命令需要 jump 的记录,要做对应的设置。我不用 better-jump ,所以不知道具体的细节。

emacs 内置的 jump 分成两个情况(我知道的)。

  1. xref 相关的,你用 M-. 去的,可以用 M-, 回来
  2. mark 相关的有个 pop-to-mark-command / pop-global-mark可以去到上一个 mark.所谓的 mark 就是你用 M-<, M-> 之类的命令,或是创建选择时产生的位置。

谢谢你的回答!

我感觉这些貌似都需要额外的设置,不像vim会自动记录在jump list里面

M-.M-, 是不需要设置的,也很常用。

C-x C-SPC (pop-global-mark) 是一个文件取一个 mark, 可能也是你想要的。不过这个命令不能反过来,也不支持 negative-argument. 他是循环的。

xref好像有点意思。

不过好像是浏览代码用的,不知道我浏览org mode有没有用。

确实在org里跳转后想 Ctrl-o 回去

我发现跳转链接之后,会自动set-mark,那么就可以用org-mark-ring-goto跳回去。 然后你再绑定一个快捷键,嘿嘿,体验暂时还行

目前我是使用 backward-forward 来记录 跳转位置历史,同 xref 也做了集成。

只要是需要记录位置的场景,调用一下 push-mark,通过 advice 还是比较方便的。

平时按 M-, C-M-, 进行往后往前位置跳转。

配置如下:

;; backward-forward
(use-package backward-forward
  :defer nil
  :custom
  (backward-forward-mark-ring-max 100)
  :init
  (defun my/backward-forward-previous-location ()
    "A `backward-forward-previous-location' wrap for skip invalid locations."
    (interactive)
    (let ((purge (< backward-forward-mark-ring-traversal-position (1- (length backward-forward-mark-ring))))
          (recent (point-marker)))
      (backward-forward-previous-location)
      (when (and (equal recent (point-marker)) purge)
        (my/backward-forward-previous-location))))
  (defun my/backward-forward-next-location ()
    "A `backward-forward-next-location' wrap for skip invalid locations."
    (interactive)
    (let ((purge (> backward-forward-mark-ring-traversal-position 0))
          (recent (point-marker)))
      (backward-forward-next-location)
      (when (and (equal recent (point-marker)) purge)
        (my/backward-forward-next-location))))
  :bind
  ("M-," . my/backward-forward-previous-location)
  ("C-M-," . my/backward-forward-next-location)
  ("s-," . my/backward-forward-previous-location)
  ("C-s-," . my/backward-forward-next-location)
  :config
  (backward-forward-mode t))
3 个赞

(setq a '(:a 1 :b 2 :c 3))

(setq font-lock-defaults '((dired-font-lock-keywords diredfl-font-lock-keywords-1 dired-font-lock-keywords) t nil nil beginning-of-line)) (re-builder-extended-pattern “,”) (defun foo (arg) “Print the current raw prefix argument value.” (interactive “P”) (message “raw prefix arg is %S” arg))

(let ((current-prefix-arg 0)) ;; emulate C-u (call-interactively 'yank))

“手动添加mark可以用这个”

(use-package bookmark+
 :init ;; bookmark+ can be a content organizer
   (require 'bookmark+)
   (bmkp-turn-on-auto-idle-bookmark-mode)
 :commands (hydra-bookmark/body)
   ;; evil-jump-forward evil-jump-backward
   ;; ("C-c C-/" . counsel-bookmark)
 :bind* (("C-S-SPC" . bmkp-set-autonamed-bookmark)
         ("C-o" . bmkp-next-bookmark-this-file/buffer-repeat)
         ("H-i" . bmkp-previous-bookmark-this-file/buffer-repeat))
 :config
   (defhydra hydra-bookmark (:color pink)
     ("<escape>" nil "exit")
     ("C-a" bmkp-annotate-bookmark "add annotation")
     ("C-d" bmkp-set-desktop-bookmark "bookmark desktop")
     ("C-s" bookmark-bmenu-show-all-annotations "show annotation")
     ("C-t" bmkp-toggle-autonamed-bookmark-set/delete "set/delete automatic bookmark")
     ("C-l" bookmark-bmenu-list "list all")
     ("C-n" bmkp-next-bookmark-this-file/buffer-repeat "next in buffer")
     ("C-p" bmkp-previous-bookmark-this-file/buffer-repeat "previous in buffer")
     ("C-h" my-toggle-highlight "toggle highlight in buffer")
     ("C-f" bmkp-switch-bookmark-file-create "switch file"))
   (setq bookmark-version-control t
         bmkp-last-as-first-bookmark-file "~/.emacs.d/bookmarks"
         bmkp-auto-idle-bookmark-mode-delay 15
         bmkp-auto-idle-bookmark-min-distance 250
         bmkp-save-new-location-flag t
         ;; auto-save bookmarks
         bookmark-save-flag 1)
   (defvar my-bmkp-toggle nil
     "Keeps the state of how the bookmark was last toggled by TABing.")
   (defun my-toggle-highlight ()
     (interactive)
     (if my-bmkp-toggle
         (bmkp-unlight-bookmarks-this-buffer) (bmkp-light-bookmarks-this-buffer))
     (setq my-bmkp-toggle (not my-bmkp-toggle))))

简单点:C-x SPC or C-u SPC

有个winner-mode