Jak działa `: w! Sudo tee%`


27

Jeśli otworzysz plik, do którego nie masz uprawnień do zapisu w vimie, to zdecydujesz, że musisz go zmienić, możesz napisać zmiany bez wychodzenia z vima :w !sudo tee %
, ponieważ nie rozumiem, jak to może działać. Czy możesz to przeanalizować?
Rozumiem tę :wczęść, zapisuje bieżący bufor na dysk, zakładając, że już jest z nim związana nazwa pliku, prawda?
Rozumiem również, kto !wykonuje sudo teepolecenie i %reprezentuje bieżącą zawartość bufora, prawda?
Ale nadal nie rozumiem, jak to działa.

Odpowiedzi:


30

Struktura :w !cmdoznacza „zapisz bieżący bufor przesłany potokiem za pomocą polecenia”. Możesz to zrobić na przykład :w !cati przepuści bufor cat.

Teraz %jest nazwa pliku skojarzony z buforem

Tak :w !sudo tee %rurowy będzie zawartość bufora poprzez sudo tee FILENAME. To skutecznie zapisuje zawartość bufora do pliku.


A co to jest tee?
CodyBugstein


2

Nie do końca!

!commanduruchamia polecenie jako polecenie filtru , które pobiera tekst stdin, coś robi i wysyła do stdout.

Za pomocą w, to pchnął zawartość pliku do stdinz sudo tee %. %to specjalny rejestr w vimie, który przechowuje nazwę bieżącego pliku.

Masz więc sudo tee FILENAME, co spowoduje wypchnięcie tee stdin- zawartość pliku - do bieżącego pliku.


2
:!commandjest filtrem (por. :h !), chociaż :w !commandnie jest, po prostu wykonuje się commandz bieżącym plikiem jako stdin(por :h :w_c.). To :w !sed /./dznaczy : nie zmienia zawartości bieżącego bufora. Ale przepis jest rzeczywiście nie tak z innej przyczyny, %należy uciec: :exec 'w !sudo tee ' . shellescape(expand('%', 1)). Oryginalne polecenie nie działa z, powiedzmy, nazwami plików ze spacjami.
Satō Katsura
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.