Что: b6692e5ff393fc54ea8e6c568d1e7e2fb7795560
Когда: 2022-07-16 15:01:50+03:00
Темы: go vim
Снова про форматирование кода в Vim http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=1e761ea8af276caa2ff605cb4d7d0a63fac51a36 http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=f0f5d759e21858dc6a50f88ce80cdec24493a52c В 3a417a68fd72f8b882dfc760b7dd6fa3a3940cd4 писал про то, что можно существенно упростить вызов форматировалки кода. Но был не прав: оно не учитывает что команда может упасть и выдать ошибки. И в моём случае полностью перетирает содержимое выводом об ошибке. Оказалось, что Go-шный родной плагин не делает ничего лишнего: проверяет код ошибки, парсит вывод с ошибками из текущего буфера, заполняя quickfix, дальше выполняет undo. Использование самого буфера как временное хранилище мне нравится. Плагин был сделан отлично. Но я его портировал на vim9script. Но есть другая проблема: если были ошибки, то из-за перетирания всего буфера, его changelist становится полностью невалидным. Я делаю :Fmt, получаю ошибку, но уже ни одна команда перемещения по изменениями у меня не отработает. Можно вызвать команду через system(), получить её вывод и код возврата, ничего не делая с буфером. Но я не нашёл способа как бы обновить весь буфер не инвалидировав changelist, тогда как equalprg вызов оставляет его почти полностью неизменным. Поэтому в фоне (если вызывать system() или systemlist(), то они скармливают данные не через pipe, а через временный файл) запускаю equalprg, агрегирую её строчки, и при плохом коде возврата заполняю ими quickfix. В противном случае вызываю =-форматирование.
Сгенерирован: SGBlog 0.34.0