package 分享 · 使用项目相对路径作为 buffer-name

日常使用 emacs 时,我习惯开大量的 buffer,并用 C-x b 进行切换。这些文件来自多个项目/目录,并且有很多文件会重名。例如我进行 rust 项目开发时,就可能会打开多个 crates 的 lib.rs

虽然 Emacs 自带的 buffer-name 有一套针对同名文件的注释机制,但是这个机制只会利用上层文件夹的不同名字加标记,很多时候我依然找不到想要的文件。我觉得更好的机制是直接使用相对项目根目录的路径作为项目名,例如 ~/github/rust-project/crates/xxx/lib.rs 使用 rust-project/crates/xxx/lib.rs

电报群的群友推荐了这个 package,我试了一下非常好用,所以来分享一下:

配置:

(use-package buffer-name-relative
  :straight (:host codeberg :repo "ideasman42/emacs-buffer-name-relative")
  :hook (after-init . buffer-name-relative-mode)
  :config
  (setq buffer-name-relative-prefix '("" . "/")))
2 个赞

不知道这个能不能满足你? 它是 built-in 的:

;; 多个同名 buffer 时的设置
(use-package uniquify
  :custom
  (uniquify-buffer-name-style 'reverse)
  (uniquify-separator " • ")
  (uniquify-after-kill-buffer-p t)
  (uniquify-ignore-buffers-re "^\\*"))

我希望没有同名的情况下也进行重命名🤣 这样方便和 consult 配合。因为 consult 中默认会在 C-x b 里面展示 recentf 的列表,所以就算我没有打开同名的文件,但是已经打开的 buffer 也有可能会历史记录里面的某个文件同名

consult+marginlia 完全能看出来吧?