Nasıl vim "sudo" hile çalışma ile yazar?
Birçoğunuz muhtemelen sudo vim ile açmayı unuttun bile root izni gereken bir dosya yazmak için izin veren bir komut gördüm:
:w !sudo tee %
Şey tam olarak burada ne oluyor anlamıyorum.
Zaten bu fark var:
w
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 |:!|.
standart girdi olarak tüm hatları geçer.
!sudo tee
Bölüm yönetici ayrıcalıklarına sahip tee
çağırır.
Tüm mantıklı, %
dosya çıktı (tee
için bir parametre olarak), ama bu davranış için yardım referans bulamıyorum.
tl;drBiri bana bu komut incelemek yardımcı olabilir mi?
CEVAP
%
demek "güncel dosya"
eugene y pointed out, %
gerçekten demek "geçerli dosya adı". Vim bunun için başka bir kullanım yerine koyma komutları. Örneğin, :%s/foo/bar
" anlamına gelirgeçerli dosyanın içindebar ile foo tekrarlarını değiştirmek." :s
, yazmadan önce bazı metni vurgulayın altı çizili olan satırları değiştirme aralığı olarak %
yerini görürsünüz.
:w
dosya güncelleme değil
Bu numara kafa karıştırıcı kısmı :w
dosya değiştirme olduğunu düşünebilirsiniz, ama değil. Eğer sen açtın ve modifiye file1.txt
ran :w file2.txt
, bir "Kaydet"; file1.txt
olmaz değiştirilmiş, ancak geçerli arabellek içeriğini olurdu gönderilen file2.txt
.
* *22, yerinearabellek içeriğini almak için bir kabuk komutunu yazın. Örneğin, :w !cat
sadece içeriğini göster.
Eğer Vim sudo erişim ile çalıştırmak olmasaydı :w
korumalı bir dosya değiştirmek olmaz, ama eğer kabuk tampon içeriğini geçerse,kabuk bir komutolabilirsudo ile çalıştırın. Bu durumda, tee
kullanıyoruz.
Anlayış tee
Belirtilen dosyaya çıktı(ler) yönlendirir. tee
resim normal bash boru bir durumda T şeklinde bir boru olarak tee
komutu gelince: ^strong>ayrıca standart çıktıya gönderirbir sonraki yöneltilen Komutanlığı tarafından yakalanan olabilir.,
ps -ax | tee processes.txt | grep 'foo'
, örneğin, işler listesini bir metin dosyasına yazılırvegrep
birlikte geçti.
----------- tee ------------
| | -------- | |
| ps -ax | -------- | grep 'foo' |
| | || | |
----------- || ------------
||
---------------
| |
| processes.txt |
| |
---------------
(Diyagram*. *40 ile oluşturulmuş)
Daha fazla bilgi için tee man page bkz.
Bir hack olarak Tee
Sorunuzu açıklar durumdatee
kullanarak neler görmezden geliyoruz çünkü kesmek. sudo tee
bizim dosyaya yazar ve aynı zamanda tampon standart çıktıya içeriğini, ama gönderirstandart çıkış görmezden geliyoruz. Gerek yok bir şey geçmek için başka bir komut yöneltilen bu durumda; biz sadece kullanma tee
alternatif bir şekilde yazılı bir dosya ve elimizden gelen çağrı ile sudo
.
Bu hile yapmak çok kolay
Senin için bu .vimrc
Bu hile kolay kullanımlı yapmak için ekleyebilirsiniz: sadece yazın :w!!
.
" Allow saving of files as sudo when I forgot to start vim using sudo.
cmap w!! w !sudo tee > /dev/null %
> /dev/null
bölümüaçıkçadediğim gibi, başka bir borulu komut için bir şey geçmesine gerek yok olmadığına göre standart çıkış atar.
Nasıl tamir "çalışma kopyası yöne...
Nasıl " = = = var" dahili eğ...
Nasıl devre dışı "çalışma alanını...
Nasıl doğru ActionScript 3 SOAP web se...
Nasıl "mevcut çerçeveler" ekl...