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:
w
bunun 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 tee
Parçası çağıran tee
yö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?
sudo
uygulanı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ı?