[О блоге]
[наверх]
[пред]
[2021-06-29 12:13:15+03:00]
[231afdef7064d9a180de16f4ad8b285f85bb6e79]
Темы: [tip][vim]
Куча оптимизаций Vim скриптов
https://www.arp242.net/effective-vimscript.html
Напоролся тут вот на такую статью и... понапеределывал свою .vim
директорию на diff в 500+ строк. Я всё же ужасно знаю и пишу на vimscript.
* К function можно добавить abort, чтобы при ошибках во время исполнения
она останавливалась. Как set -e в shell. Как я без этого страдал!
* Не везде у меня присутствовали ограничители scope, чтобы не
загромождался глобальный namespace
* set на setlocal в ftplugins я когда-то заменял. Но совершенно не
обращал внимание на *map команды, которые тоже можно ограничить только
буфером. Как и аббревиатуры
* У разных функций можно передавать код не в виде строчки (где помнить
об экранировании и не иметь синтаксической подсветки), а в виде ссылки
на функцию. Что может быть и лямбдой, что очень удобно
* Так как я могу запросто одновременно редактировать и Python и Go
файлы, то всякие глобальные настройки помешают всему функционалу в них
работать. Например мой Defsplit имел глобальную настройку
используемого отступа. Переделал на то, чтобы это была переменная буфера
* Аналогично проделал с функцией печатающей значение LintStatus в
statusline. Прежде я переопределял функцию в ftplugin скриптах. Теперь
я ftplugin выставляю буффер-локальную переменную с ссылкой на функцию
печати статуса lint -- теперь каждый буфер для разных типов файлов
будет иметь свои работающие статусы
И главное изменение: я начал использовать autoload директорию. Не
понимаю почему я раньше просто игнорировал эту удобнейшую штуку! И
namespace удобный она создаёт и, самое главное, загружает всего лишь
один раз при первом использовании. Однократная ленивая загрузка. Плюс
исчезают проблемы когда нет возможности передать s:-scoped переменные во
многих местах. Плюс сам факт наличия autoload-функции использую для
проверки был ли скрипт загружен или нет (если нет, то делаю всякие *map
и command например). Удобнейший функционал!
Плюс я думал что тема с bracketed paste закрыта навсегда. Но
документация Vim, как будто, живёт своей жизнью и постоянно изменяется и
начинает содержать доселе неизведанные и неизвестные факты :help
xterm-bracketed-paste. Vim 8.2 из коробки понимает что это такое и
смотрит на настройки терминала для определения возможностей. У меня не
определяет (лень выяснять по какой причине, наверное описание screen
терминала не содержит ничего про xterm-специфичные вещи), но help
подсказывает тривиальное решение:
let &t_BE = "\e[?2004h"
let &t_BD = "\e[?2004l"
exec "set t_PS=\e[200~"
exec "set t_PE=\e[201~"
После которого вообще никаких скриптов и map-ов не нужно для работающего
bracketed paste.
[оставить комментарий]