Михаил Юдин

Оптимизация и ускорение редактора VIM

Оптимизация и ускорение редактора VIM

Делюсь опытом ускорения редактора VIM при использовании через SSH соединение, в том числе при работе через tmux.

VIM хорошо работает по SSH

После перехода на удалёнку по SSH и перехода с IDEA на VIM, стал использовать ресурсы серверов для веб-разработки, ибо сервера обычно мощнее и оперативы больше ;)

Скорость работы VIM по SSH зависит от нескольких факторов:

  • качество соединения
  • скорость передачи данных
  • используемый протокол передачи данных
  • количество обновлений экрана

Увеличиваем скорость при помощи mosh

Качество и скорость передачи данных понятный вопрос и он тут обсуждаться не будет.

Используемый протокол влияет на скорость работы VIM. По умолчанию ssh работает по протоколу TCP, что увеличивает задержки на проверку целостности передаваемых данных.

Существует альтернатива ssh — mosh. Программа состоит из сервера и клиента, что требует установки на обоих машинах. Преимущество использования mosh в обмене данными по протоколу UDP, что увеличивает скорость работы редактора минимум в 2 раза. Бонусом в mosh реализованы методики работы с проблемными соединениями вплоть до разрыва.

Уменьшаем количество обновлений экрана

Чем больше перерисовок на экране, тем больше данных для этого нужно передать. Чтобы лишний раз не перерисовывать весь экран, а только его часть и только в моменты когда это нужно существует опция lazyredraw. Для её использования пропишите в ваш файл .vimrc директиву: set lazyredraw.

Так же советую отключить относительную нумерацию строк и подсветку текущей строки.

Делается это при помощи:

set nocursorline nocursorcolumn norelativenumber

Увеличиваем скорость переключения между буферами

Примерно неделю или две мучался с тем, что приходилось ждать около двух секунд пока не переключится буфер на другой. Поисследовав различные конфиги обнаружил интересную опцию hidden, что даёт возможность хранить открытые буферы в памяти. Это увеличивает скорость переключения между буферами примерно в 25 раз по ощущениям.

Использовать эту опцию удобно в паре с опцией подтверждения закрытия буфера чтобы не потерять несохранённые данные, а так же установить опцию переиспользования буфера.

Все три опции устанавливаются так же в .vimrc:

set hidden confirm
set switchbuf=useopen

Увеличиваем скорость подсветки синтаксиса

В vim есть возможность ограничить количество колонок для подсветки синтаксиса. Задаётся это опцией synmaxcol. Для меня осталось загадкой, почему для кириллицы значение параметра должно быть увеличено в двое. по предположениям это связано с использованием кодировки utf-8. Таким образом, для подсветки 128 колонок необходимо:

set synmaxcol=256
set regexpengine=1

Вторая строка бонусом заставляет движок использовать старую версию матчера регулярных выражений.

Внимание: меленькое значение заставит слететь подсветку синтаксиса для строк ниже при превышении лимита. Правда отрисовку это ещё больше ускорит =)

В заключение

Используйте минимум плагинов, включайте фичи при надобности, используйте больше встроенных возможностей. В соседнем материале кстати рассказал, как создать статусную строку без плагинов в 5 строк.

Всё вышеописанное позволило ускорить работу в редакторе примерно раз в 100 по сравнению с изначальной конфигурацией.

Приложу что получилось в vimrc:

set nocursorline nocursorcolumn norelativenumber
set ttyfast
set lazyredraw
set updatetime=300
set synmaxcol=256 " UTF = x2
syntax sync minlines=256
set regexpengine=1
set hidden confirm " this speeds up buffer switch x25 I think
set switchbuf=useopen

Комфортной и быстрой работы в редакторе VIM!

Ещё почитать

Статусная строка VIM без плагинов в 5 строк

Статусная строка VIM без плагинов в 5 строк

Нет фото

Работаем удалённо по SSH на карантине

Нет фото

Быстрый способ создать и залить SSH ключ на сервер

Нет фото

Acer Aspire v5 122p alsa, mpd