Куча оптимизаций Vim скриптов

Что: 231afdef7064d9a180de16f4ad8b285f85bb6e79

Когда: 2021-06-29 12:13:15+03:00

Темы: tip vim

Куча оптимизаций Vim скриптов

https://www.arp242.net/effective-vimscript.html
Напоролся тут вот на такую статью и... понапеределывал свою .vim
директорию на diff в 500+ строк. Я всё же ужасно знаю и пишу на vimscript.


  она останавливалась. Как set -e в shell. Как я без этого страдал!

  загромождался глобальный namespace

  обращал внимание на *map команды, которые тоже можно ограничить только
  буфером. Как и аббревиатуры

  об экранировании и не иметь синтаксической подсветки), а в виде ссылки
  на функцию. Что может быть и лямбдой, что очень удобно

  файлы, то всякие глобальные настройки помешают всему функционалу в них
  работать. Например мой Defsplit имел глобальную настройку
  используемого отступа. Переделал на то, чтобы это была переменная буфера

  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.

оставить комментарий

Сгенерирован: SGBlog 0.34.0