Что: 231afdef7064d9a180de16f4ad8b285f85bb6e79 Когда: 2021-06-29 12:13:15+03:00 ------------------------------------------------------------------------ Темы: 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. ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20%D0%9A%D1%83%D1%87%D0%B0%20%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B9%20Vim%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2%20%28231afdef7064d9a180de16f4ad8b285f85bb6e79%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0