`: W! Sudo tee%` nasıl çalışır?


27

Vim'de yazma izniniz olmayan bir dosyayı açarsanız, sonra onu değiştirmeniz gerektiğine karar verirseniz, değişikliklerinizi vim'den çıkmadan yazabilirsiniz. :w !sudo tee %
Bunun nasıl işe yaradığını anlayamıyorum. Lütfen bunu parçalayabilir misiniz? Parçası
anlıyorum, :wmevcut tamponu diske yazar, sanırım zaten bir dosya adı varmış gibi değil mi?
Ayrıca !hangisinin sudo teekomutu yerine getirdiğini ve %mevcut tampon içeriğini temsil ettiğini anlıyorum.
Ama yine de bunun nasıl çalıştığını anlamıyorum.

Yanıtlar:


30

Yapı :w !cmd, " komut ile iletilen mevcut tamponu yaz" anlamına gelir . Mesela bunu yapabilirsiniz, :w !catve tamponu içinden geçirir cat.

Şimdi %bir dosya adı tamponu ile ilişkili

Böylece :w !sudo tee %tamponun içindekileri geçecek sudo tee FILENAME. Bu, arabellek içeriğini etkili bir şekilde dosyaya yazar.


Ve nedir tee?
CodyBugstein


2

Tam olarak doğru değil!

!commandkomutu, metni alan , bir şey yapan ve çıktısını alan bir filtre komutu olarak çalıştırır .stdinstdout

Kullanarak w, size dosya içeriğini itti stdinarasında sudo tee %. %geçerli dosyanın adını içeren vim'deki özel kayıttır.

Öyleyse sudo tee FILENAMEanladınız ki tee stdin- dosya içeriği - geçerli dosyaya itecek .


2
:!commandbir filtredir (cf. :h !), :w !commandolmasa da, sadece commandgeçerli dosyayla stdin(cf. :h :w_c) çalışır. Görmek için: :w !sed /./dmevcut tamponun içeriğini değiştirmez. Ancak tarif gerçekten başka bir sebepten dolayı doğru değil, kaçılması %gerekiyor :exec 'w !sudo tee ' . shellescape(expand('%', 1)). Özgün komut, örneğin boşluklu dosya adlarıyla çalışmaz.
Satō Katsura
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.