Emacs: переключение между буферами с одинаковыми именами, но в разных каталогах

У меня есть два файла с одинаковым именем, но в разных каталогах:

apples/main.cpp
oranges/main.cpp

Я открываю их в одном окне Emacs через emacs apples/main.cpp oranges/main.cpp

Когда я использую C-x b для переключения между этими двумя буферами используются имена буферов "main.cpp" и "main.cpp<2>". Я бы хотел видеть полный путь к этим двум файлам при переключении буферов, чтобы я мог различить версию яблок и апельсинов. Есть ли способ сделать это?

Одним из способов может быть изменение любого кода, генерирующего <2> после второго main.cpp, когда Emacs обнаруживает, что буфер с таким именем уже открыт. Однако я не мог найти, как это сделать.

3 ответа

Решение

Используйте uniquify. Я использую это так:

(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)

Расширяя ответ Томаша.

Есть и другие варианты стиля uniquify-buffer-name-style, кроме forward, которые вы можете рассмотреть:

Файлы / foo / bar / mumble / name и /baz/quux/mumble/name будут иметь следующие имена буферов в различных стилях:

forward        bar/mumble/name  quux/mumble/name
reverse        name\mumble\bar  name\mumble\quux
post-forward   name|bar/mumble  name|quux/mumble
post-forward-angle-brackets   name<bar/mumble>  name<quux/mumble>

Если вы хотите удалить общие суффиксы каталогов конфликтующих файлов, добавьте строку ниже в файл инициализации emacs.

(setq uniquify-strip-common-суффикс t)

Теперь, если вы откроете /a1/b/c/d и /a2/b/c/d, имена буферов будут говорить "d|a1" и "d|a2" вместо "d|a1/b/c" и "d|a2/b/c".

Используйте похотливого исследователя. Настройте его с помощью:

(require 'lusty-explorer)

;; Override the normal file-opening and buffer switching.
(global-set-key (kbd "C-x C-f") 'lusty-file-explorer)
(global-set-key (kbd "C-x b")   'lusty-buffer-explorer))
Другие вопросы по тегам