Оптимизация и ускорение редактора 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!