emacs在多个文件的多个位置跳转

Table of Contents

之前我写过一篇 Emacs如何暂存windows_layout 。可以保存窗口布局和位置。 但是实际编程时,我可能会遇到很长的文件,如需要同时修改100行,888行, 1500行。或者是一个功能需要修改同时多个文件的多个地方,常见的server和 client编程时,如果修改了消息格式,那么client和server两端都需要修改。这 个时候光记住窗口布局显然是有点不够了。

这个插件这可以派上用场啦 bm

1 安装

我是直接使用 package-install 安装的。如果网络不好,可以参考 emacs使 用本地package来安装软件 .

2 使用

常用的函数有这些:

函数名 功能
bm-toggle 在当前行标记或反标记一个tag
bm-bookmark-regexp 把满足regexp的行都打上tag
bm-next 跳到下一个tag
bm-previous 跳到上一个tag
bm-show-all 显示所有的tag
bm-show 显示当前buffer的tag
helm-bm 使用helm调出bm,可以通过输入来过滤
peng-bm-remove-all-all-buffers 删除所有的tag
peng-bm-remove-current-buffer 删除当前buffer的tag
bm-toggle-buffer-persistence 设置当前buffer中的tag为永久的
bm-save 保存所有设置为永久的tag到文件
bm-load-and-restore 从文件中加载tag到buffer

我使用hydra,所以这样定义一个:

    (defhydra hydra-local-bookmark-menu (:exit t
                                               :columns 3)
      "Local bookmark"
      ("t" bm-toggle "toggle")
      ("P" bm-toggle-buffer-persistence "toggle buffer persistence")
      ("n" bm-next "next" :exit nil)
      ("p" bm-previous "previours" :exit nil)
      ("s" bm-show-all "show all")
      ("S" bm-save "save all bookmark to disk")
      ("L" bm-load-and-restore "load bookmark from disk")
      ("l" bm-show "show current file")
      ("d" peng-bm-remove-all-all-buffers "remove all")
      ("c" peng-bm-remove-current-buffer "remove current file")
      ("h" helm-bm "helm bm")
      ("RET" nil "cancel")
      ("<return>" nil "cancel")
      )

然后随便绑定到一个按键就是啦:

    (global-set-key (kbd "C-c t") 'hydra-local-bookmark-menu/body)

Author: Peng Xie

Created: 2018-10-01 Mon 21:36