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

Ala*_*ing 6 emacs buffer autocomplete switch-statement ido-mode

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

apples/main.cpp
oranges/main.cpp
Run Code Online (Sandbox Code Playgroud)

我通过一个emacs窗口打开它们 emacs apples/main.cpp oranges/main.cpp

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

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

Tom*_*ndt 13

使用uniquify.我这样用它:

(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
Run Code Online (Sandbox Code Playgroud)


Bab*_*san 5

扩展Tomasz的答案.

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>
Run Code Online (Sandbox Code Playgroud)

如果要删除冲突文件的公共目录后缀,请将以下行添加到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".