我一直是GNU Emacs文件导航模型的粉丝.我一直在交换缓冲带C-x C-f ...,C-x b; C-mouse-1偶尔.
但是,最近我发现自己编写了一些项目,这些项目具有多个具有相同名称的文件集,但是在不同的目录中,沿着这些行:
package/message.py
package/message.zcml
package/ui/message.py
package/ui/message.zcml
package/ui2/message.py
package/ui2/message.zcml
Run Code Online (Sandbox Code Playgroud)
在这些情况下,我通常的缓冲切换工具效率不高.很难记得我想要的文件是否在缓冲message.py<2>或message.py<3>,这是很挑剔的,它们之间进行切换C-x b.也许,我想要的是像标签栏或菜单,我可以安排我正在处理的文件并让它们保持空间排列,这样我就可以快速切换它们.我简要地看着speedbar和tabbar-mode,但没有发现太大的帮助.有什么建议?
我从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
Run Code Online (Sandbox Code Playgroud)
从您的示例中,您的缓冲区将命名为"message.py | ui","message.py | ui2"等...
除了使用uniquify来获取更有用的缓冲区名称之外,您可能还需要考虑使用ibuffer组来满足您的“空间排列”需求。您可以根据过滤器集创建命名组,并且可以根据文件路径 (*) 进行过滤,因此您可以轻松地为每个目录创建单独的组。
我强烈建议绑定C-xC-btoibuffer作为默认值的替代。
除此之外,如果您ido-mode与配置结合使用uniquify,那么当您键入C-xb切换缓冲区时,您可以键入并匹配(唯一的)缓冲区名称的任何部分。如果您启用ido-enable-flex-matching(或者使用LustyExplorer之类的东西代替),那么您可以键入该缓冲区名称的未连接部分,并且模糊匹配将智能地缩小列表范围(例如,键入“mez2”可能足以隔离“message.zcml | ui2” ”)。
(*) 就我个人而言,当我创建文件名过滤器时,我更喜欢 ibuffer 来匹配直接缓冲区以及文件缓冲区,因此我相应地重新定义了该过滤器:
;; 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))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |