Макрос Vim очень медленный
Я сохраняю очень простой макрос vim для ключа: qa $pjq, а затем выполняю его 40000 раз с 40000 @a. Это очень медленно. Я должен делать что-то неправильно, потому что, хотя он работает, требуется примерно 60-90 секунд. Это так быстро, как vim? Есть ли какие-то настройки, которые могут ускорить это? Есть ли смесь плагинов, которые замедляют выполнение макросов?
Я использую Mac и использую MacVim. Это простой текстовый файл, он действительно не упрощается.
Ответы
Ответ 1
Не требуется много времени для вставки 40 000 строк, но если вы постоянно обновляете экран, как это часто бывает в макросе, который замедляет работу.
Во-первых, вопрос о том, что должен делать ваш макрос. Если он просто вставляет содержимое регистра по умолчанию, то правильное определение макроса - это просто qapjq
. Нет необходимости позиционировать курсор в определенном месте на предыдущей строке. [РЕДАКТИРОВАТЬ: извините, я предполагал, что вы делаете пачку linewise, позиционирование необходимо, если вы вставляете символьный регистр в конце строки.,..]
Во-вторых, вы можете ускорить свой текущий макрос, установив lazyredraw (:set lazyredraw
), поэтому экран не обновляется по мере его появления. Вероятно, это не ускорит работу, так как макросы клавиатуры, подобные этому, не похожи на прямую обработку буфера.
В-третьих, здесь другой метод, который должен занимать около секунды:
.,+40000g/.*/normal! $p
Ответ 2
Это нормально. Как писал Герберт Сиц, обновление экрана происходит медленно.
Вы можете просто запустить команду подстановки: :.,+40000s/.*/&<c-r>"
.
-
.,+40000
- это диапазон, включающий текущую строку и 40000 после
-
.*
в шаблоне соответствует целой строке
-
&
в строке - это строка, которая была сопоставлена
-
<c-r>"
вставляет содержимое неназванного регистра
Ответ 3
Я бы рекомендовал запустить пустой vim с помощью "vim -u NONE".
Часто плагины замедляют работу.
Вы увидите, что он работает намного быстрее.
Затем вам нужно выяснить, какой плагин вызывает это замедление.
См. Также Как увидеть, какие плагины делают Vim медленным?