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

Emacs:在具有相同名称但位于不同目录中的缓冲区之间切换,emacs,autocomplete,buffer,switch-statement,ido-mode,Emacs,Autocomplete,Buffer,Switch Statement,Ido Mode,我有两个同名但位于不同目录中的文件: apples/main.cpp oranges/main.cpp 我通过emacs-apples/main.cpp-oranges/main.cpp 当我使用C-xb在这两个缓冲区之间切换时,缓冲区名称是“main.cpp”和“main.cpp”。我希望在切换缓冲区时能够看到这两个文件的完整路径,这样我就可以消除苹果和橙子版本之间的歧义。有办法做到这一点吗 一种方法是,当Emacs检测到具有该名称的缓冲区已打开时,修改在第二个main.cpp之后生成的任何

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

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

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

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

使用。我是这样用的:

(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
使用。将其配置为:

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

扩展Tomasz的答案

对于uniquify buffer name样式,除了forward,您还可以考虑其他选项:

文件/foo/bar/mumble/name和/baz/qux/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>
转发条/mumble/name-quox/mumble/name
反向名称\mumble\bar名称\mumble\qux
post转发名称| bar/mumble名称| quux/mumble
后置尖括号名称
如果要去除冲突文件的公共目录后缀,请将下面的行添加到emacs init文件中

(setq uniquify带公共后缀t)

现在,如果打开/a1/b/c/d和/a2/b/c/d,缓冲区名称将显示
“d | a1”和“d | a2”而不是“d | a1/b/c”和“d | a2/b/c”。

arghgh!我写了一个elisp函数来做这个,但它正在工作,我不记得我是怎么做的。如果你在周一之前还没有答复,请给我发电子邮件。看起来下面的答复中所提供的内容可以完美地完成工作。是的。我的elisp函数实际上通过我所在的
bzr
分支对缓冲区进行了uniquified,这很好。