Zapisać plik vim jako superużytkownik?

10

To często zdarza mi się problem z użytecznością:

Otwieram plik systemowy tylko do odczytu za pomocą vima, nawet go edytuję, ponieważ nie jestem wystarczająco uważny lub ponieważ vim w systemie jest źle skonfigurowany. Po wprowadzeniu zmian utknąłem w pamięci, aby zapisać je w pliku tymczasowym lub je stracić, ponieważ: w! nie zadziała.

Czy istnieje polecenie vim (: W !!!), które pozwala zapisać bieżący bufor jako superużytkownik? (Vim zapyta oczywiście o twoje hasło sudo lub su)

zimbatm
źródło
powiązane pytania (niezupełnie dokładne duplikaty): superuser.com/questions/23428/vim-sudo-vim-bad-idea .. superuser.com/questions/106865/ ... .. i od SO, stackoverflow.com/questions/1005 /…
quix quoteote
1
SO jest zdecydowanie duplikatem, jednak dwa pytania SU dotyczą osobnego problemu rozwiązanego za pomocą sudoeditpolecenia. To pytanie koncentruje się bardziej na zapomnieniu wpisania go na pierwszym miejscu i podniesieniu po uruchomieniu edytora.
ciężki

Odpowiedzi:

15
:w !sudo tee % >/dev/null`

Objaśnienie: Za pomocą !można uruchamiać programy. Przedrostek: w, zawartość pliku (zawartość, którą masz w vimie, a nie oryginalny plik, a dokładniej: bufor) zostanie przekazana do komendy na standardowym wejściu. %zostaje zastąpiony nazwą pliku, co >/dev/nullpozwala uniknąć ponownego drukowania zawartości na ekranie (co jest typowym zachowaniem tee).

Znalazłem jeszcze krótszą drogę. ddnie drukuje na standardowe wyjście, więc możesz zapisać wartość zerową.

:w !sudo dd of=%

To samo dotyczy :rwstawiania wyniku danego polecenia, dzięki czemu można na przykład wstawić bieżącą datę do pliku za pomocą:r !date

Marian
źródło
Wielkie dzięki, sprawiłeś, że moje życie stało się o wiele lepsze! (Brian też)
zimbatm
Właśnie dodałem drugą metodę.
Marian
To naprawdę miłe!
Anthony Giorgio
nie działa z nieoficjalnymi plikami
Christian Brabandt,
5

Próbować:

:w !sudo tee % >/dev/null
Brian
źródło