Emacs: переключение между буферами с одинаковыми именами, но в разных каталогах - PullRequest
6 голосов
/ 10 апреля 2011

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

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 ]

13 голосов
/ 10 апреля 2011

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

(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
5 голосов
/ 11 апреля 2011

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

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

Files / 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».

1 голос
/ 10 апреля 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))
...