【发布时间】: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