【问题标题】:Managing many thousand buffers in emacs在 emacs 中管理数千个缓冲区
【发布时间】:2013-11-17 01:30:33
【问题描述】:

我正在进行一个包含一万多个文件的项目。我希望能够轻松浏览这些文件。

iswitchb 模式在这么多文件下非常糟糕; icicles速度比较好,不过我喜欢iswitchb的UI。

建议?


Stefan 请求在 iswitchb-mode 执行时运行探查器:

- 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%

【问题讨论】:

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

标签: emacs icicles iswitchb-mode


【解决方案1】:

刚刚在具有 10000 个缓冲区的会话中尝试了 iswitchb,我确实看到它的速度慢得无法忍受。

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

【讨论】:

    【解决方案2】:

    如果您想使用Icicles,但您希望交互行为更接近 iswitchb,那么您可以尝试几种自定义,具体取决于 iswitchb 的哪些部分 你喜欢的互动。请参阅 Icicles 文档的这一部分:Icicles - Ido and IswitchB

    Wrt 使用大量文件:请记住,您还可以使用 Icicles 定义projects - 您一起使用的相关文件集。这与 etags 和其他方法一样,是一种预先过滤可能的候选文件名的方法。

    【讨论】:

      【解决方案3】:

      你试过了吗?

      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.
      

      【讨论】:

        【解决方案4】:

        你可以试试 Helm。它可以用于切换缓冲区等等:http://amitp.blogspot.hu/2012/10/emacs-helm-for-finding-files.html

        【讨论】:

          【解决方案5】:

          您的数以万计的文件能否组织成有用的集合——甚至可能是重叠的集合?

          书签对这样的组织很有帮助。使用Bookmark+,您可以添加书签:

          • 单个文件。
          • 文件集。
          • 单独的 Dired 缓冲区,记录它们的标记、“省略”设置和插入的子目录。
          • Dired 缓冲区的稀疏树,基于标记的子目录,递归。
          • Emacs 桌面。
          • 书签文件,即书签集。
          • 书签列表显示及其设置(标记、遗漏等)。

          您可以标记书签,delicious-style。标签是您选择用于对书签或文件(即自动文件书签)进行分类的名称(任意字符串)。您可以为书签分配任意数量的标签。标签甚至可以有关联的(任意的)Lisp 值。

          您可以多次为同一个文件(或文件集)添加书签,并为这些不同的书签赋予不同的标签。

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

          【讨论】:

          • 不,事情是随机访问的,此时没有可行的分组。
          猜你喜欢
          • 2013-01-16
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 2012-01-25
          • 1970-01-01
          相关资源
          最近更新 更多