Управление многими тысячами буферов в Emacs
Я нахожусь на проекте с более чем десятью тысячами файлов. Я хотел бы иметь возможность легко перемещаться по этим файлам.
iswitchb
режим очень сильно тормозит с таким количеством файлов; icicles
лучше по скорости, но мне нравится интерфейс iswitchb.
Предложения?
Стефан попросил запустить профилировщик на 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%
5 ответов
Если вы хотите использовать Icicles, но хотите, чтобы интерактивное поведение больше напоминало iswitchb, то вы можете попробовать несколько настроек в зависимости от того, какие части взаимодействия iswitchb вам нравятся. Смотрите этот раздел документа Сосульки: Сосульки - Ido и IswitchB.
При использовании миллиардов файлов: помните, что вы также можете определять проекты, используя Icicles - наборы связанных файлов, которые вы используете вместе. Это, как и etags и другие подходы, является одним из способов предварительной фильтрации возможных кандидатов на имена файлов.
Просто попробовав iswitchb в сеансах с 10000 буферами, я действительно вижу, что это невыносимо медленно.
Я предлагаю вам попробовать M-x icomplete-mode
: в Emacs-24.3 по умолчанию C-x b
Завершение уже принимает совпадения подстроки, точно так же, как iswitchb, поэтому единственная отсутствующая функция - это та, которую предлагает icomplete-mode
, но icomplete-mode
все еще идеально быстро в моей сессии с 10000 буферов. В основном, начиная с Emacs-24.3, iswitchb устарела icomplete-mode
,
Могут ли ваши миллионы файлов быть организованы в полезные наборы - даже, возможно, перекрывающиеся наборы?
Закладки могут очень помочь с такой организацией. С помощью Bookmark + вы можете добавить в закладки:
- Отдельные файлы.
- Наборы файлов.
- Отдельные буферы Dired, запись их маркировки, "пропущенные" настройки и вставленные подкаталоги.
- Редкие деревья буферов Dired, основанные на отмеченных подкаталогах, рекурсивно.
- Рабочие столы Emacs.
- Файлы закладок, т. Е. Наборы закладок.
- Отображение списка закладок с их настройками (маркировка, пропуски и т. Д.).
И вы можете пометить закладки, вкусный стиль. Теги - это имена (произвольные строки), которые вы выбираете для категоризации закладок или файлов (то есть, автофайловые закладки). Вы можете назначить любое количество тегов для закладки. Теги могут даже иметь ассоциированные (произвольные) значения Lisp.
Вы можете пометить один и тот же файл (или набор файлов) несколько раз и присвоить этим разным закладкам разные теги.
Таким образом, существуют различные способы определения разных "представлений" файлов и наборов файлов.
Вы пробовали это?
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.
Вы можете дать Хелму попробовать. Его можно использовать для переключения буферов и многого другого: http://amitp.blogspot.hu/2012/10/emacs-helm-for-finding-files.html