Vim'in içinden kök olmak


72

Bazen /etcVim kullanarak yapılandırma dosyalarını düzenlemeye başlıyorum , ancak sudoVim'i başlatmak için kullanmayı unutma . O zaman kaçınılmaz sonuç, düzenlemelerimi tamamladıktan sonra, dosyayı kaydetme iznine sahip olmadığımma dair korkunç bir bildirimle karşılaştım.

Çoğunlukla düzenlemeler, Vim'den çıkıp her şeyi yeniden root olarak yaptığım kadar küçük. Elbette yazabildiğim ve sonra root olarak kopyalayabildiğim bir yere kaydedebilirim, ama bu da biraz sinir bozucu.

Fakat sudoVim'in içinden kök salmanın ya da kullanımın , değişiklikleri atmak zorunda kalmadan yapmanın daha kolay bir yolu olduğundan eminim . Eğer yöntem sudo, kullanıcı için daha iyi olacak şekilde kurulmasına bağlı olmazsa.


1
Tüm yönetici düzenlemeleri sudoedityerine kullanma alışkanlığına girdim vim. Artık bu sorunla hiç karşılaşmamanın bir yolu :). Gilles'un cevabı için +1 .
jw013

SO'dan gelen bu Q & A uyarısı yararlıdır, bu yüzden burada bunlara bağlantı verilir: vi içindeki bir dosyada kök izinleri almak? & Nasıl hile çalışması vim “sudo ile yazma” geliyor? .
slm

Yanıtlar:


46

sudo, varolan bir işlemin etkin kullanıcısını değiştiremez, her zaman yükseltilmiş ayrıcalıklara sahip olan ve orijinal kabuk etkilenmeyen yeni bir işlem oluşturur. Bu UNIX tasarımının temelini oluşturur. Çoğu zaman sadece / tmp dosyasını geçici bir çözüm olarak kaydederim. Gerçekten doğrudan kaydetmek istiyorsanız, Vim'in bir dosyayı başka bir işleme aktarabileceği bir özelliğini kullanmayı deneyebilirsiniz. Bu komutla kaydetmeyi deneyin:

:w !sudo dd of=%

Test edildi ve çalışıyor. Vim sizden dosyayı yeniden yüklemenizi isteyecektir, ancak bu gereksizdir: ogeri alma geçmişinizi yeniden yüklemek ve kaybetmemek için sadece düğmesine basabilirsiniz . Bunu bir Vim komutuna / işlevine bile kaydedebilir veya kolay erişim için bir anahtara bile bağlayabilirsiniz, ancak bunu okuyucuya bir egzersiz olarak bırakacağım.


2
Bu ilginç bir çözüm, ancak %vim'de düzenlemekte olduğunuz dosyanın yolu olacak olan yolu değiştirebilirsiniz.
Reid,

%Dosya adında boşluk olması durumunda in tırnaklarını kaydırmanız gerekir .
intuited

Ayrıca: bu 'modified'ayar sıfırlanmayacaktır ; Bunu el ile yapabilirsiniz set nomodified.
intuited

2
Eğer gerçekten dikkatli olmak istiyorsanız Aslında yapmanız gereken exec 'w !sudo dd of=' . shellescape(expand('%'))dosya adı vb tırnak tersbölüler, dolar-işaretleri içerir durumda
intuited

Bunun Commandlinefu komutundan plaketlere göre farkı nedir?

36

Dosyayı kök olarak kaydetme:

: w! sudo tişört%


13

sudoeditDosyaları kök olarak düzenlemek için arayın .

vimDoğrudan potansiyel olarak tehlikeli bir şey yapmanın çok geçici olduğunuzu belirten bir uyarı olarak çağırırken ortaya çıkan rahatsızlığı düşünün .



3

Bu da iyi çalışır:

:w !sudo sh -c "cat > %"

Bu, bu cevaptaki @Nathan Long'un yorumundan ilham almıştır .

DİKKAT :

"yerine kullanılmalı 'çünkü %kabuktan geçmeden önce genişlemek istiyoruz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.