SORU
8 NİSAN 2010, PERŞEMBE


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
16 AĞUSTOS 2011, Salı


% 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Damien Walters

    Damien Walte

    20 AĞUSTOS 2006
  • Alexey - servant of Christ

    Alexey - ser

    15 EYLÜL 2007
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012