Başlangıçta vi ile çok mücadele ettiğimi inkar edemesem de, vi'nin gerçekten öğrenmesi çok kolay olduğu konusunda bir tartışma yapılabilir. (Unix kullanmaya başladığımda seçim vi ya da emacs'tı, bu yüzden ed'i seçtiğimde, erken Unix ders kitaplarını okumayı öğrendiğim çok basit bir çizgi editörü oldu.) Her gün vi kullanıyorum, ama muhtemelen özelliklerinin yalnızca çok küçük bir alt kümesini kullanın.
İlk önce vi'yi kullanmak için bir argüman var: vi tüm sistemlerde var, çok az kaynak kullanıyor ve diğer editörlerin başarısız olabileceği veya yavaş ve kullanılamaz olduğu kararsız ve yavaş bağlantılar üzerinde kullanılabilir. Veya sistemin bozuk olduğu durumlarda, ok tuşları doğru şekilde yorumlanmaz (örneğin kötü terminfo ayarları.) Bu nedenle, vi, soruna yol açmadan, soruna yol açan yapılandırma dosyalarını düzeltmek için kullanılabilir.
İşte vi'nin yararlı bir alt kümesini nasıl öğreneceğiniz: İlk olarak: vi'yi etkileşimli, terminal-GUI "düzenleyicisi" olarak düşünmeyi bırakın ve metin dosyalarını değiştirmek için bir programlama dili olarak görün. Başlangıçta "vi" VIsual modu için duruyordu ve vi, başlangıç için iyi bir yer olan, görsel olmayan bir muadili var. Kabuk isteminde ex yazın (ben dönüşü temsil etmek için ¬ kullanacağım):
$ ex¬
Entering Ex mode. Type "visual" to go to Normal mode.
:
Şimdi enter tuşuna basın.
:¬
E749: empty buffer
:
Yani, içine bir şey koyalım. "A¬" yazın ve bir metin satırı yazın, ardından satırda tek başına bir nokta yazın:
:a¬
Hello World¬
.¬
:
Ekle komutu buydu. Kolay, kısa ve anımsatıcı. Ancak tamponda ne olduğunu görmek güzel olurdu:
:%p¬
Hello World
:
Açıkçası p baskı komutu buydu. %, Kestirme bir çizgi aralığıdır. Her komuttan önce, komutun uygulanması gereken bir satır numarası veya aralık olabilir. %, "tüm satırlar" anlamına gelir. $ son satır ve nokta geçerli satır anlamına gelir. Sayı, belirli bir satır anlamına gelir. Bir aralık n, m olarak yazılır ve bir sayı eklenebilir veya çıkarılabilir, böylece + 1, $ - 1, bir sonraki satırdan sonuncu satıra kadar anlamına gelir. Yalnızca bir satır numarasından oluşan bir komut o satıra gider. Kullandığım komutların geri kalan küçük alt kümesi:
:1i¬
this text is inserted before line 1.¬
.¬
:
:w /tmp/filename¬
"/tmp/filename" [New] 2L, 49C written
:
w tüm (veya seçilen aralıktaki) satırları bir dosyaya yazar.
:1d¬
satır 1'i siler.
:.s/Hello/Hello,/¬
Hello, World
:.s/$/!/¬
Hello, World!
s, normal bir ifadenin yerine geçer. Düzenli ifadeleri bilmek güzel!
:q¬
E37: No write since last change (add ! to override)
q çıkar. wq yazar ve çıkar. q! yazmadan çıkar ve benzer bir şekilde, w! mümkünse bir dosyaya yazmaya zorlar.
Şimdi havalı:
:p
Hello, World!
:.!tr a-z A-Z
:p
HELLO, WORLD!
! komut olarak satırları bir kabuk komutuna filtreler.
Ve sonunda:
:vi¬
VISUAL moduna girer. Kanmayın. Bir editör gibi görünüyor, ama yine de sadece etkileşimli bir programlama kabuğu. Sadece her zaman arabellek ve birkaç komut daha bakmak için olsun. Görsel modda a: ex modundan: istemini gösterir. Ok tuşları (eğer çalışırlarsa) hareket eder ve eğer yapmazlarsa, hjkl do! h sola, j aşağı, k yukarı ve sağa. 0 ilk karaktere ve ^ (burada normal ifade düşünün!) Satırdaki ilk boşluk olmayan karaktere gider. $ (tekrar regex!) satır sonuna gider. Yazma: 999¬, tıpkı eski modda olduğu gibi doğal olarak 999 satırına gider.
"i", satırlar yerine karakterlere eklenen ekleme moduna girer ve ".¬" yerine kaçış tuşuna basılarak biter. "I" başında ekler, imlecin altındaki karakterden sonra "a" ve geçerli satırın sonundan sonra "A" ekler. Metin yazmayı bitirdiğinizde daima escape tuşuna basın. "x", imlecin altındaki karakteri siler ve "D", imleçten satır sonuna kadar siler. "Y" geçerli satırı sorar (kopyalar) ve "P" geri yapıştırır. ": pu" aynı şeyi yapar, ancak öncesinde bir satır numarası olabilir. ": ya", "Y" nin eşdeğeridir ve yine, bir satır aralığına uygulamak için faydalıdır. Bence bir mark komutu da var, ama bunu hatırlamadığımı itiraf edeceğim. Ben özlemiyorum.
Yukarıda kullandığım şeydir ve muhtemelen çok "verimli" vi kullanıcısı olmadığımı biliyorum. Öte yandan, ex'in çok yönlülüğünü kullanıyorum, örneğin yapılandırma dosyalarını komut dosyası düzenleme için. Ana bilgisayar adınızı foo.bar.com'u bir dizi conf dosyasında www.foobar.com olarak değiştirmeniz mi gerekiyor?
for file in conf/*
do (echo "%s/foo.bar.com/www.foobar.com/" ; echo "wq") |ex $file ; done
Söylemeye çalıştığım şey, vi ile ilgili sorunun insanların bunu zor bir editör olarak düşünmeleridir. Yapmanız gereken tek şey zihninizi biraz değiştirmek ve bunun yerine çok basit ama aynı zamanda çok güçlü bir interaktif programlama dili olarak görmek. O kadar güçlü ki, mevcut komutların bir alt kümesiyle bile, onu sadece bir editör olarak değil, Unix'in geri kalanıyla iyi entegre edilmiş genel, yazılabilir bir araç olarak büyük bir etki için kullanabilirsiniz. Nano'nun tüm bunları yapacağından şüpheliyim - emacs ... belki.