Emacs:在具有相同名称但在不同目录中的缓冲区之间切换

时间:2011-04-09 20:47:16

标签: emacs autocomplete buffer switch-statement ido-mode

我有两个同名但在不同目录中的文件:

apples/main.cpp
oranges/main.cpp

我通过emacs apples/main.cpp oranges/main.cpp

在一个emacs窗口中打开它们

当我使用C-x b在这两个缓冲区之间切换时,缓冲区名称为“main.cpp”和“main.cpp< 2>”。我希望能够在切换缓冲区时看到这两个文件的完整路径,这样我就可以在苹果和橙子版本之间消除歧义。有没有办法做到这一点?

一种方法是修改生成< 2>的任何代码。在第二个main.cpp之后,当Emacs检测到具有该名称的缓冲区已经打开时。但是,我找不到怎么做。

3 个答案:

答案 0 :(得分:13)

使用uniquify。我这样用它:

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

答案 1 :(得分:5)

扩展Tomasz的答案。

除了 forward 之外,还有其他选项可供您考虑使用uniquify-buffer-name-style:

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 init文件中。

(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”。

答案 2 :(得分:1)

使用lusty explorer。配置它:

(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))