[О блоге] [наверх] [пред] [2022-10-19 16:57:04+03:00] [f4a041639f520162b246b48ef248e7116b4a5919]
Темы: [vim]

Более легковесный Mark плагин

http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/pack/stargrave/start/mark/autoload/mark.vim
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/pack/stargrave/start/mark/plugin/mark.vim
https://www.vim.org/scripts/script.php?script_id=1238
https://www.vim.org/scripts/script.php?script_id=2666
https://github.com/inkarkat/vim-mark
Уже скоро как десять лет использую Mark плагин для Vim. Простое нажатие
\m (leader+m) подсветит слово под курсором. Нажав на другом слове: будет
подсветка другим цветом. Помню что в SQL-е, где полно очень похожих слов
(в единственном и множественном числе например) это очень помогало. Раз
в неделю но обязательно использую этот функционал.

Пока тут обновлял свои плагины, то заметил что у меня очень старая
версия Mark-а. Которая делается Ingo Karkat-ом и является fork-ом от
оригинального написанного Yuheng Xie. Современная версия Mark куда более
фичастая и требует ещё и установки библиотеки вспомогательных функций.
Что мне не нравится. Я ничего не хочу кроме подсветки слова под курсором.
Но современный Mark это тысячи строк vimscript-а.

Оказалось что оригинальный автор вернулся к своему плагину и продолжает
его развитие, явно написав что он в курсе наработок Karkat-а, но в своём
стиле будет продолжать его пилить. И его версия занимает несколько сот
строк всего, умея не только подсвечивать слова. То есть функционала мне
за глаза, существенно более маленькая, единственный файл в plugin
директории, и мне очень нравится его vimscript код компактный.

Понравилась идея того, что :Mark просто прячет все выставленные метки,
но повторное выполнение этой команды их снова покажет. Явного удаления
меток нет, но логично что если начать выставлять метки когда предыдущие
скрыты -- то старые будут удалены.

Пока писал этот пост, то внезапно обнаружил что он не подсвечивает
русские слова. Моментально нашёл место где это не отрабатывает как
ожидалось. Исправил. Дальше захотел портировать на vim9script. Увидел
что много мест с дубляжом кода, плюс проверок на наличие функций,
которые в современных версиях Vim можно бы было убрать. Короче говоря,
глядя на всё это, полностью написал свою реализацию с нуля. Которая
ничего не делает кроме подсветки слов под курсором. С одной стороны оно
есть и написано, только надо причесать. Но я ни разу никогда не
использовал ни подсветку по regexp-у, а поиск по подсвеченным словам
меня даже раздражал.

Моя реализация вышла в 55 строк, не считая объявление цветовой схемы.
autoload (231afdef7064d9a180de16f4ad8b285f85bb6e79) для ленивой загрузки
скрипта. vim9script (1663d9d463041807b70067497fe45249e45b7755) везде.
Использование списка вместо кучи переменных с автогенерированным именем.
Никаких глобальных переменных. Более простое и лёгкое обновление всех окон.

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