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 обнаруживает, что буфер с таким именем уже открыт. Однако я не мог найти, как это сделать.


person Alan Turing    schedule 09.04.2011    source источник
comment
аааааа! Я написал для этого функцию elisp, но она работает, и я не помню, как я это сделал. Если у вас нет ответа до понедельника, напишите мне.   -  person drysdam    schedule 10.04.2011
comment
Похоже, uniquify, приведенный в ответе ниже, отлично справляется со своей задачей.   -  person Alan Turing    schedule 10.04.2011
comment
Ага. Моя функция elisp на самом деле унифицирует буфер по ветке bzr, в которой я нахожусь, что приятно.   -  person drysdam    schedule 10.04.2011


Ответы (3)


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

(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
person Tomasz Elendt    schedule 09.04.2011

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

Существуют и другие параметры для стиля 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-suffix t)

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

person Babu Srinivasan    schedule 11.04.2011

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

(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))
person Ben    schedule 09.04.2011