Czasami zaczynam edytować pliki konfiguracyjne /etc
za pomocą Vima, ale zapominam użyć go sudo
do uruchomienia Vima. Nieuniknionym rezultatem jest to, że po zakończeniu edycji napotykam przerażające powiadomienie, że nie mam uprawnień do zapisania pliku.
Przeważnie zmiany są na tyle małe, że po prostu wychodzę z Vima i robię to wszystko jako root. Mógłbym oczywiście zapisać w lokalizacji, w której mogę pisać, a następnie kopiować jako root, ale jest to również trochę denerwujące.
Ale jestem pewien, że istnieje łatwiejszy sposób na rootowanie lub używanie sudo
z poziomu Vima, bez konieczności odrzucania zmian. Gdyby metoda nie polegała na sudo
skonfigurowaniu dla użytkownika, byłoby to jeszcze lepsze.
sudoedit
zamiastvim
do wszystkich edycji przez administratora. To jeden ze sposobów, aby nigdy więcej nie napotkać tego problemu :). +1 za odpowiedź Gillesa .Odpowiedzi:
sudo nie może zmienić faktycznego użytkownika istniejącego procesu, zawsze tworzy nowy proces, który ma podwyższone uprawnienia, a oryginalna powłoka pozostaje nienaruszona. Jest to fundament projektu UNIX. Najczęściej po prostu zapisuję plik do / tmp jako obejście. Jeśli naprawdę chcesz go zapisać bezpośrednio, możesz spróbować użyć funkcji Vima, w której może on potokować plik do innego procesu. Spróbuj zapisać za pomocą tego polecenia:
Testowane i działa. Vim poprosi cię o ponowne załadowanie pliku, ale nie jest to konieczne: możesz po prostu nacisnąć, oaby uniknąć ponownego załadowania i utraty historii cofania. Możesz nawet zapisać to w poleceniu / funkcji Vima lub nawet przypisać do klawisza dla łatwego dostępu, ale zostawię to jako ćwiczenie czytelnikowi.
źródło
%
, która w vimie będzie ścieżką pliku, który aktualnie edytujesz.%
cudzysłowy, jeśli nazwa pliku zawiera spację.'modified'
ustawienia; możesz to zrobić ręcznie za pomocąset nomodified
.exec 'w !sudo dd of=' . shellescape(expand('%'))
w przypadku, gdy nazwa pliku zawiera cytaty, backslashy, znaki dolara, itpZapisywanie pliku jako root:
źródło
Zadzwoń,
sudoedit
aby edytować pliki jako root.Pomyśl o niedogodnościach podczas
vim
bezpośredniego dzwonienia jako ostrzeżenia, że jesteś zbyt swobodny w robieniu czegoś potencjalnie niebezpiecznego.źródło
Możesz to umieścić w swoim
.vimrc
Uruchamiasz go w ten sposób
:w!!
- popchnie pliksudo tee
do bieżącej nazwy pliku (%
).Od https://stackoverflow.com/questions/95072/what-are-your-favorite-vim-tricks
źródło
!sudo sponge %
zamiast tego.Działa to również dobrze:
Jest to inspirowane komentarzem @Nathana Longa w tej odpowiedzi .
UWAGA :
"
należy użyć zamiast tego,'
ponieważ chcemy%
rozszerzyć przed przejściem do powłoki.źródło