名称相同的文件之间的Emacs导航 [英] Emacs navigation between files with same names

查看:95
本文介绍了名称相同的文件之间的Emacs导航的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我长期以来一直是GNU Emacs文件导航模型的粉丝。我已经用 C-x C-f ... C-x b



然而,最近我一直在找到自己编程的项目,有套具有相同名称的几个文件,但在不同的目录中,按照以下几行:

  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> ,并且在 Cx b 之间切换它们是非常诡异的。或许,我想要的就是标签栏或菜单,我可以安排我正在编写的文件,并让它们保持空间排列,以便我可以快速切换到它们之间。我简要地看了一下 speedbar tabbar-mode ,但没有找到太多帮助。任何建议?

解决方案

随着使用 uniquify 获得更多有用的缓冲区名称,您可能需要考虑使用 ibuffer 组为您的空间安排需求。您可以基于一组过滤器创建命名组,并且可以对文件路径(*)进行过滤,因此您可以轻松地为每个目录单独分组。



我强烈建议将 Cx Cb 绑定到 ibuffer 作为默认值的替代。



除此之外,如果您使用 ido-mode uniquify config配合使用,那么当您键入 Cx b 以切换缓冲区时,可以键入并匹配(未定义)缓冲区名称的任何部分。如果启用 ido-enable-flex-matching (或者使用类似 LustyExplorer ),那么您可以键入该缓冲区名称的未连接的部分,并且模糊匹配将智能地缩小列表(例如,键入mez2可能足以隔离message.zcml | ui2 )



(*)个人而言,当我做一个文件名过滤器时,我更喜欢libuffer匹配dired缓冲区以及文件缓冲区,所以我相应地重新定义了这个过滤器:

  ;;启用ibuffer-filter-by-filename过滤目录名称。 
(eval-after-loadibuf-ext
'(define-ibuffer-filter filename
将当前视图切换到具有与QUALIFIER匹配的文件或目录名称的缓冲区。
((描述filename
:reader(read-from-minibuffer按文件/目录名称过滤(regexp):))
(ibuffer-awhen(或(buffer-local-value' -file-name buf)
(buffer-local-value'dired-directory buf))
(string-match qualifier it))))
pre>

I've long been a fan of GNU Emacs' file navigation model. I've been switching buffers with C-x C-f ..., C-x b; C-mouse-1 occasionally.

However, recently I've been finding myself programming on projects that have sets of several files with the same names, but in different directories, along these lines:

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

In these circumstances my usual buffer switching tools are not very efficient. It's hard to remember whether the file I want is in the buffer message.py<2> or message.py<3>, and it's pretty fussy to switch between them with C-x b. What I would like, perhaps, is something like tab bar or a menu where I could arrange the files I'm working on and have them maintain their spatial arrangement, so that I could quickly switch beetween them. I briefly looked at speedbar and tabbar-mode, but didn't find much help. Any suggestions?

解决方案

Along with using uniquify to obtain more helpful buffer names, you might want to look into using ibuffer groups for your "spatial arrangement" needs. You can create named groups based on sets of filters, and you can filter on file path(*), so you could easily have separate groups for each of those directories.

I highly recommend binding C-xC-b to ibuffer as a replacement for the default.

Aside from that, if you use ido-mode in conjunction with the uniquify config, then when you type C-xb to switch buffers, you can type and match against any part of the (uniquified) buffer name. If you enable ido-enable-flex-matching (or alternatively, use something like LustyExplorer instead) then you can type unconnected parts of that buffer name, and the fuzzy matching will narrow the list intelligently (e.g. typing "mez2" might be enough to isolate "message.zcml|ui2").

(*) Personally I prefer ibuffer to match dired buffers as well as file buffers when I make a filename filter, so I redefine that filter accordingly:

;; 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))))

这篇关于名称相同的文件之间的Emacs导航的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆