Как лучше всего обрабатывать несколько файлов с одинаковыми именами в emacs?

Одна проблема, которая у меня есть с emacs, заключается в том, что он не очень хорошо обрабатывает файлы с одинаковыми именами в разных каталогах. Например, если я не буду осторожен, в итоге у меня будет открыто 20 __init__.py буферов. Что я делал, так это использовал M-x rename-buffer и переименовывал его, чтобы указать, в каком пакете он находится. Однако делать это вручную несколько утомительно.

Есть ли у кого-нибудь какие-либо стратегии для решения этой проблемы?


person Jason Baker    schedule 17.08.2009    source источник


Ответы (2)


Мне нравится uniquify, который поставляется с Emacs:

(require 'uniquify)

(setq uniquify-buffer-name-style 'reverse)
(setq uniquify-separator "/")
(setq uniquify-after-kill-buffer-p t) ; rename after killing uniquified

(setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers (or Gnus mail buffers)

С этими настройками каталог добавляется к имени буфера, давая вам указание где находится файл. Например, загрузка файлов /some/path/to/Makefile и /some/path/to/different/Makefile приведет к следующим именам буферов:

Makefile/to           (which is /some/path/to/Makefile)

и

Makefile/different    (which is /some/path/to/different/Makefile)

uniquify также обрабатывает обновление имен буферов при удалении буферов, поэтому, когда один из двух буферов Makefile удаляется, другой переименовывается просто в Makefile.

person Trey Jackson    schedule 17.08.2009
comment
И он поставляется с Emacs Starter Kit по умолчанию. - person viam0Zah; 18.08.2009
comment
Вы имеете в виду, что Emacs Starter Kit включает его по умолчанию? Потому что он поставляется с самим Emacs. - person Trey Jackson; 18.08.2009

Если вам нужен полный контроль, вы можете переопределить create-file-buffer.

Если вам нужно полное имя файла, это может быть так же просто, как

(defun create-file-buffer (filename)
  "Create a suitably named buffer for visiting FILENAME, and return it."
  (generate-new-buffer filename))

См. files.el для справки.

person starblue    schedule 17.08.2009
comment
Неразумно переопределять стандартную библиотечную функцию. Лучше посоветуйте, как работает uniquify. - person viam0Zah; 18.08.2009