Birçoğunuz vudo'yu sudo ile açmayı unuttuğunuzda bile, root iznine ihtiyaç duyan bir dosyaya yazmanıza izin veren komutu muhtemelen gördünüz:
:w !sudo tee %
Mesele şu ki, tam olarak burada olanları anlamıyorum.
Bunu zaten anladım:
wbunun için
*:w_c* *:write_c*
:[range]w[rite] [++opt] !{cmd}
Execute {cmd} with [range] lines as standard input
(note the space in front of the '!'). {cmd} is
executed like with ":!{cmd}", any '!' is replaced with
the previous command |:!|.
böylece tüm satırları standart girdi olarak geçirir.
!sudo teeParçası çağıran teeyönetici ayrıcalıklarıyla.
Herkes için mantıklı, %dosya adı çıktı (için bir parametre olarak tee), ancak bu davranış için yardım başvurular bulamıyorum.
tl; dr Birisi bu komutu incelememe yardım edebilir mi?
sudouygulanır cat, ancak uygulanmaz >, bu nedenle izin verilmez. Tüm komutu bir sudo alt kabuğunda çalıştırmayı deneyebilirsiniz :w !sudo sh -c "cat % > yams.txt", ancak bu da işe yaramaz, çünkü alt kabukta %nil; dosyanızın içeriğini boşaltırsınız.
:w !sudo sh -c "cat >%"aslında sudo tee %Vim subshell'e ulaşmadan %önce dosya adını değiştirir . Ancak, dosya adında boşluklar varsa ikisi de çalışmaz; bunu yapmak :w !sudo sh -c "cat >'%'"ya :w !sudo tee "%"da düzeltmek zorundasınız .
:w !sudo cat > %Standart çıktıyı da kirletmez, işe yaramaz mı?