Po migrácii mojich dotfiles na Mac M3 som narazil na blokujúci problém v
mojom neovim nastavení. Zakaždým, keď som uložil PHP súbor, na jeho
začiatok sa pridalo veľa nezmyselných dát. Ak si pamätáte,
moje nastavenie používa
prettier na formátovanie
všetkého, väčšinou cez
coc-prettier, ale keďže
@prettier/plugin-php je len
plugin a nie súčasť hlavnej vetvy, používam
vim-prettier špeciálne len
pre .php súbory. Nastavenie dobre slúži mojim potrebám, po zavedení
vyžadovalo len minimálne doladenie.
Späť k nezmyslom, vyzerali presne takto:
␛]4;1;rgb:cc/24/1d␇␛]4;2;rgb:98/97/1a␇␛]4;3;rgb:d7/99/21␇␛]4;4;rgb:45/85/88␇␛]4;5;rgb:b1/62/86␇␛]4;6;rgb:68/9d/6a␇␛]11;rgb:28/28/28␇␛]10;rgb:eb/db/b2␇␛]4;0;rgb:28/28/28␇␛]4;7;rgb:a8/99/84␇␛]4;8;rgb:92/83/74␇␛]4;9;rgb:fb/59/34␇␛]4;10;rgb:b8/bb/26␇␛]4;11;rgb:fa/bd/2f␇␛]4;12;rgb:83/a5/98␇␛]4;13;rgb:d3/86/9b␇␛]4;14;rgb:8e/c0/7c␇␛]4;15;rgb:eb/db/b2␇␛]4;236;rgb:32/30/2f␇␛]4;234;rgb:1d/20/21␇␛]4;235;rgb:28/28/28␇␛]4;237;rgb:3c/38/36␇␛]4;239;rgb:50/49/45␇␛]4;241;rgb:66/5c/54␇␛]4;243;rgb:7c/6f/64␇␛]4;244;rgb:92/83/74␇␛]4;245;rgb:92/83/74␇␛]4;228;rgb:f2/e5/bc␇␛]4;230;rgb:f9/f5/d7␇␛]4;229;rgb:fb/f1/c7␇␛]4;223;rgb:eb/db/b2␇␛]4;250;rgb:d5/c4/a1␇␛]4;248;rgb:bd/ae/93␇␛]4;246;rgb:a8/99/84␇␛]4;167;rgb:fb/49/34␇␛]4;142;rgb:b8/bb/26␇␛]4;214;rgb:fa/bd/2f␇␛]4;109;rgb:83/a5/98␇␛]4;175;rgb:d3/86/9b␇␛]4;108;rgb:8e/c0/7c␇␛]4;208;rgb:fe/80/19␇␛]4;88;rgb:9d/00/06␇␛]4;100;rgb:79/74/0e␇␛]4;136;rgb:b5/76/14␇␛]4;24;rgb:07/66/78␇␛]4;96;rgb:8f/3f/71␇␛]4;66;rgb:42/7b/58␇␛]4;130;rgb:af/3a/03␇<?php
// rest of the file ...
Tu je doslovný výstup z ChatGPT, ktorý vysvetľuje, čo tieto sekvencie znamenajú, keďže takéto informácie neviem poskytnúť z pamäti, ani vytvoriť relevantný vyhľadávací dopyt:
]4;N;rgb:RR/GG/BB␇ nastaví farbu pre položku palety N na zadanú RGB farbu]10;rgb:RR/GG/BB␇ nastaví farbu popredia (textu)]11;rgb:RR/GG/BB␇ nastaví farbu pozadia
A príklady vyššie uvedeného:
]4;1;rgb:cc/24/1d␇ nastaví farbu 1 na RGB(204, 36, 29)]10;rgb:eb/db/b2␇ nastaví farbu textu na RGB(235, 219, 178)]11;rgb:28/28/28␇ nastaví farbu pozadia na RGB(40, 40, 40)
Lokalizácia problému #
Musím povedať, že som strávil dosť veľa času lokalizáciou tohto problému,
ale bolo to celkom zábavné. Súčasťou môjho prechodu z Arch na Mac bola
zmena zsh na fish shell. Momentálne neviem povedať, či to bolo dobré
alebo zlé rozhodnutie, ani či bol načasovanie správne, ale to si
pravdepodobne zaslúži samostatný článok.
Prvá vec, ktorú som vyskúšal, bolo uistenie sa, že problém skutočne nejako
súvisí s prettier, keďže to bol v tom bode len môj neoverený predpoklad.
Po zakomentovaní môjho riadku “autosave” v ~/.config/nvim/init.vim:
autocmd BufWritePre *.php PrettierAsync
Na začiatku súboru nezmysly neboli, ale manuálne spustenie :PrettierAsync
v neovime ich znovu vyprodukovalo. Ako vidíte, prettier pre PHP sa stal
úplne nepoužiteľným. Preto som otestoval, či natívne Prettier formáty robia
to isté. Výsledok bol záporný. Oprava formátovania napríklad markdownového
.md súboru žiadne nezmysly nevyprodukovala. To mi dalo celkom istotu, že
problém leží v plugin-php, takže som to skúsil manuálne:
npx prettier --write file.php
Na moje veľké prekvapenie v takomto súbore žiadne nezmysly neboli. Bol som bez stopy, tak som sa pozrel na akékoľvek otvorené issues v týchto nástrojoch, ale nič neprinieslo žiadne výsledky. Ako som už povedal, je veľmi ťažké vytvoriť relevantný vyhľadávací dopyt pre takýto problém.
Execute! #
Po trochu dlhšom skúmaní som skúsil spustiť vyššie uvedené priamo v neovime
cez execute pomocou :!
:!npx prettier --write %
Toto prinieslo prekvapenie, keďže presne tie isté nezmyselné dáta boli vo
výsledku (a ešte nie v súbore). Mal som ďalší náznak, ale stále som
nevedel, čo presne problém spôsobuje. Stále som si myslel, že plugin-php
je vinník v tomto bode, výsledky mojich testov:
- neovim s mojou konfiguráciou v
fishprodukoval problém, ale vzshabashnie - neovim s
-u NONE(bez extra konfigurácie) produkoval problém vo všetkých troch shelloch - čistý vim v akomkoľvek shelle problém neprodukoval, ďalší náznak
Keďže plugin-php problém neprodukoval cez npx priamo, ani vo vim a
len v neovim, presunul som svoju pozornosť tam. Stále som bol bez
odpovede, keďže spúšťanie v akomkoľvek shelli a dokonca bez mojej
konfigurácie problém produkovalo. Žiadna nedávna aktualizácia neovim, bežal
som v0.9.5 celkom dlho, hoci v0.10.0 bol vydaný pred troma dňami, ešte som
tam neprejdel, keďže boli oznámené niektoré
breaking changes a
nebol som si istý, či ma ovplyvnia alebo nie. Lepšie počkať týždeň alebo
dva, kým sa vyžehlia najzrejmejšie bugy.
Stopa #
Neviem, ako mi to napadlo, možno z beznádeje, ale skúsil som spustiť nasledujúce:
:!ls
Toto produkovalo rovnaké nezmysly pred skutočným výstupom ls v neovime.
Hotovo, problém vôbec neležal v prettier ani plugin-php! Teraz zabávne
vyhľadávací výraz vim dumb shell ma priviedol k tomuto
stackoverflow odpovedi,
ktorá mala skutočné riešenie môjho problému.
Pridaním tohto príkazu do môjho init.nvim:
set shell=/bin/bash
Žiadne nezmysly sa neprodukovali. Verím, že problém je vo formátovaní
farieb shellu fish. Neovim pravdepodobne číta predvolený shell a používa
ho vo vnútri, bez ohľadu na to, z akého shellu je spúšťaný. Užite si to!