【问题标题】:Emacs: Switching Between Buffers with the Same Name but in Different DirectoriesEmacs:在同名但位于不同目录的缓冲区之间切换
【发布时间】:2011-08-02 05:49:17
【问题描述】:

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

apples/main.cpp
oranges/main.cpp

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

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

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

【问题讨论】:

  • 啊啊啊啊!我写了一个 elisp 函数来做到这一点,但它在工作,我不记得我是怎么做到的。如果您在星期一之前没有得到答复,请给我发电子邮件。
  • 看起来下面的答案中提供的uniquify 可以完美地完成工作。
  • 是的。我的 elisp 函数实际上通过我所在的 bzr 分支使缓冲区唯一化,这很好。

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


【解决方案1】:

扩展 Tomasz 的答案。

除了 forward 之外,您还可以考虑 uniquify-buffer-name-style 的其他选项:

文件 /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-suffix t)

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

【讨论】:

    【解决方案2】:

    使用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))
    

    【讨论】:

      【解决方案3】:

      使用uniquify。我是这样用的:

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-07
      • 2011-10-12
      • 2011-11-15
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      相关资源
      最近更新 更多