Пакет с несколькими курсорами замедляет работу emacs

9

Я использую пакет Multiple Cursors в html-файле, и это замечательно для нескольких курсоров, но если я создаю более 30 или 50 курсоров, он становится ужасно медленным, и для перемещения курсоров требуется около пяти или шести секунд.
Я использую это неправильно, или он просто не подготовлен для создания такого количества курсоров?

Fabman
источник
2
Это зависит от того, что происходит в буфере - некоторые буферы являются более сложными для множественных курсоров Magnar. Иногда у меня может быть несколько сотен без существенного замедления, а иногда только несколько (скажем так wdired-mode) вызывает замедление. Существует открытый запрос функции - debbugs.gnu.org/cgi/bugreport.cgi?bug=22873 - для перемещения нескольких возможностей курсора в исходный код C, но это все еще продолжается в настоящее время. Одним из предложенных мной пунктов продажи команде разработчиков Emacs было потенциальное увеличение скорости, если бы оно было внедрено в базу кода C.
юрист
3
У меня нет решения, но я хотел подтвердить такую ​​же медлительность и для меня. Я не удивлюсь, если проблема связана с блокировкой шрифтов. Когда я отключаю блокировку шрифта глобально, курсоры снова становятся быстрыми.
Пользователь Emacs
1
... в этом случае множественные курсоры не будут вызывать замедления напрямую (даже если медлительность оказывается фактором, когда вы его используете). Я бы M-x profiler-startделал и делал несколько медленных вещей, а затем M-x profiler-reportпродолжал углубляться в детали, занимая большую часть времени ЦП, пока вы не сможете выделить его в какую-то конкретную библиотеку (если есть); затем попробуйте отключить эту библиотеку. Не забудьте остановить профилировщик, когда закончите с ним.
Фил

Ответы:

5

Список второстепенных режимов, которые плохо воспроизводятся в режиме нескольких курсоров, можно настроить с помощью mc/unsupported-minor-modes. Все режимы, добавленные в этот список, будут отключены при входе в режим нескольких курсоров, они будут снова включены после выхода из режима нескольких курсоров.

Вы можете добавить элемент в этот список следующим образом

(add-to-list 'mc/unsupported-minor-modes 'flyspell-mode)

Это имеет большое значение для отзывчивости режима нескольких курсоров. Я обнаружил, что два второстепенных режима, оказывающих наибольшее влияние, были режимом linum и flyspell

Чарльз Ричи
источник
Если кто-то может попытаться объяснить, почему flyspell замедляет работу (или дать краткий рецепт, чтобы воспроизвести медленность с flyspell), возможно, мы могли бы попытаться решить эту проблему.
Стефан
1
Я попытался профилировать медлительность, но не смог найти какой-либо последовательной картины. Тем не менее, медлительность, представленная flyspell, не так уж и плоха, модуль, который я нахожу гораздо хуже, это режим linum. Отключение режима linum позволило мне перейти с 30 курсоров за раз к более чем 600.
Чарльз Ричи
Воспроизводимый рецепт будет иметь большое значение.
Стефан
1
Спасибо вам за помощь!. кажется, что это была проблема. Indent-guide-mode и Linum-mode, где я должен отключить (я отключил Indent-Guide и заменил Linum на nlinum). Теперь я могу иметь сотни курсоров без каких-либо задержек.
Фабман
0

... более 30 или 50 курсоров это становится ужасно медленным ....

Вот временное решение: настройте эту переменную

mc/max-cursors

до значения менее 30 в качестве обходного пути. По умолчанию это ноль, что означает отсутствие ограничений. Фактическое число для восстановления скорости зависит от типа буфера, используемых шрифтов и того, что еще выполняется в данный момент. В любом случае, проблема, с которой вы столкнулись, широко освещалась.

Пользователь Emacs
источник