2012-01-27 52 views
5

我一直是GNU Emacs文件导航模型的粉丝。我一直在用C-x C-f ...C-x b切换缓冲区;偶尔会有C-mouse-1同名文件之间的Emacs导航

然而,最近我发现自己对编程有套的几个文件具有相同名称的项目,但在不同的目录,沿着这些线路:

package/message.py 
package/message.zcml 
package/ui/message.py 
package/ui/message.zcml 
package/ui2/message.py 
package/ui2/message.zcml 

在这种情况下我平时的缓冲切换工具效率不高。很难记住我想要的文件是在缓存message.py<2>还是message.py<3>中,并且在C-x b之间切换它们非常困难。或许,我想要的可能是标签栏或菜单,我可以安排正在处理的文件,并让它们保持其空间布局,以便我可以快速切换它们。我简单地看了一眼speedbartabbar-mode,但没有找到太大的帮助。有什么建议么?

+0

嘿,我有工作的一些Python同样的问题东西(即Django)。他们想要多少个名为settings.py或test.py的文件!?我也会对你的问题的解决方案非常感兴趣。 – 2012-01-27 21:09:08

回答

3

与使用uniquify一起获取更多有用的缓冲区名称,您可能需要考虑使用ibuffer组来满足您的“空间布置”需求。您可以根据过滤器组创建命名组,并且可以在文件路径(*)上进行过滤,因此您可以轻松为每个目录分别设置不同的组。

我高度推荐C-XC-B结合ibuffer作为默认的替代品。

除了,如果结合使用ido-modeuniquify配置,然后当你输入C-Xb切换缓冲器,则可以针对(uniquified)缓冲液名称的任何部分键入和匹配。如果启用ido-enable-flex-matching(或者替代地使用类似LustyExplorer的东西),则可以键入该缓冲区名称的未连接部分,并且模糊匹配将智能地缩小列表的范围(例如,键入“mez2”可能足以隔离“message.zcml | UI2" )。

(*)我个人更喜欢ibuffer匹配dired缓存以及文件缓冲区,当我做一个文件名过滤器,所以我相应的重新定义过滤器:

;; Enable ibuffer-filter-by-filename to filter on directory names too. 
(eval-after-load "ibuf-ext" 
    '(define-ibuffer-filter filename 
    "Toggle current view to buffers with file or directory name matching QUALIFIER." 
    (:description "filename" 
     :reader (read-from-minibuffer "Filter by file/directory name (regexp): ")) 
    (ibuffer-awhen (or (buffer-local-value 'buffer-file-name buf) 
         (buffer-local-value 'dired-directory buf)) 
     (string-match qualifier it)))) 
+0

谢谢,缓存中的'uniquify'和'ido-mode'正是我一直在寻找的东西。尽管如此,在尝试一天之后,我无法习惯于欣赏文件。 – 2012-01-31 15:10:59

3

您可以重命名缓冲区而不更改它附加到的文件。 M-x rename-buffer <ret> new-buffer-name <ret>。之后,您可以使用更方便的缓冲区名称来回弹出,但是当您保存任何更改时,它们将转到与每个缓冲区关联的实际文件。

在你的情况,你可能你message.py<n>文件重命名为ui-messageui2-messagebase-message。用C-x b更容易导航(并记住它们属于哪个文件)。

6

我发现从Borbus此解决方案: https://stackoverflow.com/a/845311/552421

;; uniquify changes conflicting buffer names from file<2> etc 
(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 

从你的榜样,您的缓冲区将被命名为 “message.py | UI”, “message.py | UI2”,等等。

+1

是的,独一无二是emacs-starter-kit中的标准配置。虽然,我更喜欢前面的名字风格。 – libjack 2012-01-27 23:08:48

+0

emacs-starter-kit?很酷,没有听说过! – 2012-01-30 11:41:02