在emacs中管理数千个缓冲区

在emacs中管理数千个缓冲区,emacs,icicles,iswitchb-mode,Emacs,Icicles,Iswitchb Mode,我正在做一个有一万多个文件的项目。我希望能够轻松地浏览这些文件 iswitchb模式由于文件太多而陷入困境冰柱的速度更好,但我喜欢iswitchb的UI 建议 Stefan请求在iswitchb模式下运行探查器执行: - call-interactively 2740 79% - iswitchb-buffer

我正在做一个有一万多个文件的项目。我希望能够轻松地浏览这些文件

iswitchb
模式由于文件太多而陷入困境<代码>冰柱的速度更好,但我喜欢iswitchb的UI

建议


Stefan请求在
iswitchb模式下运行探查器执行:

- call-interactively                                             2740  79%
  - iswitchb-buffer                                              2628  76%
    - iswitchb                                                   2628  76%
      - iswitchb-read-buffer                                     2628  76%
        - completing-read                                        2599  75%
          - completing-read-default                              2596  75%
            - read-from-minibuffer                               2596  75%
              - iswitchb-post-command                            1034  30%
                - iswitchb-exhibit                               1034  30%
                  - iswitchb-set-common-completion                947  27%
                    - iswitchb-find-common-substri                925  26%
                      - mapcar                                    925  26%
                        - iswitchb-word-matching-s                922  26%
                          + iswitchb-case                          10   0%
                            string-match                            1   0%
                  + iswitchb-set-matches                           63   1%
                  + iswitchb-completions                           24   0%
              + redisplay_internal (C function)                   869  25%
              - timer-event-handler                               499  14%
                - byte-code                                       499  14%
                  - apply                                         499  14%
                    - jit-lock-context-fontify                    491  14%
                      + buffer-list                                15   0%
                    + show-paren-function                           6   0%
                    + display-time-event-handler                    2   0%
              + call-interactively                                 34   0%
              + icicle-unhighlight-lighter                          3   0%
              + iswitchb-pre-command                                1   0%
        + iswitchb-make-buflist                                    15   0%
如果您想使用,但希望交互行为更像iswitchb,则可以尝试几种自定义设置,具体取决于您喜欢的iswitchb交互的哪些部分。请参阅冰柱文档的此部分:

Wrt使用数不清的文件:请记住,您还可以使用冰柱来定义,这些冰柱是您一起使用的相关文件集。与etags和其他方法一样,这是预筛选可能的候选文件名的一种方法。

您尝试过这种方法吗

iswitchb-max-to-show is a variable defined in `iswitchb.el'.
Its value is nil

Documentation:
If non-nil, limit the number of names shown in the minibuffer.
If this value is N, and N is greater than the number of matching
buffers, the first N/2 and the last N/2 matching buffers are
shown.  This can greatly speed up iswitchb if you have a
multitude of buffers open.

You can customize this variable.

你可以试试赫尔姆。它可以用于切换缓冲区和更多内容:

你的海量文件可以组织成有用的集合吗?甚至可能是重叠的集合

书签对这样的组织很有帮助。使用,您可以将以下内容添加到书签:

  • 单个文件
  • 文件集
  • 单个Dired缓冲区,记录它们的标记,“省略”设置和插入的子目录
  • 基于标记子目录的Dired缓冲区的稀疏树,递归地
  • Emacs台式机
  • 书签文件,即书签集
  • 显示书签列表及其设置(标记、遗漏等)
你可以标记书签,-样式。标记是您选择用于对书签或文件(即自动文件书签)进行分类的名称(任意字符串)。您可以为书签指定任意数量的标记。标记甚至可以具有关联的(任意)Lisp值

您可以多次为同一文件(或文件集)添加书签,并为不同的书签添加不同的标记


瞧,有多种方法可以定义不同的文件和文件集的“视图”。

刚刚在一个有10000个缓冲区的会话中尝试了iswitchb,我发现确实如此,它的速度太慢了


我建议您尝试
M-x icomplete模式
:在Emacs-24.3中,默认的
C-x b
完成已经接受子字符串匹配,就像iswitchb一样,因此唯一缺少的功能是
icomplete模式
提供的功能,但是
icomplete模式
在具有10000个缓冲区的会话中仍然非常快。基本上,从Emacs-24.3开始,iswitchb就被
icomplete模式

淘汰了。我猜,从您的声誉(以及您提问的方式)判断,这不是一个愚蠢的请求,可以更轻松、更有效地完成。为什么需要一次浏览这么多文件?这些都是源代码文件吗?我没有解决办法,只是好奇。@iamnotmaynard:都是源代码。我正在跟踪四处游荡的代码执行路径。如果您假设每个文件平均有500个LoC,那么这是一个需要探索和维护的数百万LoC项目。还有,有点可怕。@PaulNathan:我理解为什么你有数千个文件,但不理解为什么你有数千个缓冲区。Emacs代码通常不会针对数千个缓冲区进行优化,因此您的问题可能是一个简单的性能缺陷,可以很容易地修复。请尝试
M-x探查器启动RET-RET
,然后使用iswitchb一段时间,反复触发慢速行为,然后
M-x探查器报告
(不要忘记点击“+”上的RET以查看配置文件树的内部)。探查器信息表明,问题可能是Iswitchb需要很长时间才能生成一条很长的线(重新显示所花费的25%很可能是由于长的线)
icomplete
相反,在输出相当于
icomplete prospects height
行之后停止,因此它不仅处理一个长列表所花的时间更少,而且重新显示也会花费更少的时间来显示它。不,事情是非常随机的,在这一点上没有可行的分组。