From b6692e5ff393fc54ea8e6c568d1e7e2fb7795560 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 16 Jul 2022 15:01:50 +0300 Subject: [PATCH] =?utf8?q?=D0=A1=D0=BD=D0=BE=D0=B2=D0=B0=20=D0=BF=D1=80?= =?utf8?q?=D0=BE=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80=D0=BE?= =?utf8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B0=20?= =?utf8?q?=D0=B2=20Vim?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. В противном случае вызываю =-форматирование. -- 2.48.1