2012-01-27 82 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