vi Editörü
Önceki Sed ve Vi Sonraki
vi Editörü
Bir linux sistemde her kullanıcının zevkine hitap eden çeşitli metin editörler vardır. Bunların arasında en çok kullanılan ve standart olan ed ve vi, UNIX sistemler için özel olarak tasarlanmış editörlerdir. vi kadar çok kullanılmasa da ed, pico ve joe da büyük bir taraftar kitlesine sahiptir. vi ilk başta karmaşık görünse de hızı ve verimi ile her kullanıcının işini büyük ölçüde kolaylaştıracak bir editördür. En çok kullanılan komut takımlarını öğrendikten sonra vi ile aynı dili konuşuyor olduğunuzu göreceksiniz.
vi'a Başlangıç
PC editörlerin büyük çoğunluğunda klavye, editör komutlarını almak ve basılan tuşları ekrana göndermek için kullanılan iki gruba ayrılmıştır. Kullanıcı aynı anda hem komut işletip hem de yazı yazabilir. Bu tip editörler geniş bir klavye haritasına sahip oldukları için, örneğin fonksiyon tuşlarını veya klavyenin en sağındaki sayısal tuşları da kullanıyor olabilirler. vi' ın tasarım aşamasında bu durumdan kaçınılmış, standart dışı klavyesi olan bilgisayarların da var olabileceği düşünülerek klavye üzerinde kullanılması gereken tuşların sayısını mümkün olduğunca indirilmesine çalışılmıştır. Burada karşımıza vi editörünün çalışma aşamasında üç ayrı işlev geliyor. Birincisi, bilgisayara komutların girdisi sırasında kullanılan komut modu, ikincisi yazı yazarken kullanılan yazı modu ve satır modu.
Komut modunda klavye üzerinde görevi olan tüm tuşlar, bilgisayar komut vermek için kullanılıyor. Yazı modunda ise diğer editörlerdekine benzer şekilde yazı yazmak mümkün oluyor. Klavye modunu değiştirdiğinizde klavye tuşlarının işlevleri de hemen değişiyor. vi editörünü ilk çalıştırdığınız anda komut moduna girersiniz. Bu anda her tuşa ait bir komut çalıştırılmaya hazırdır (örneğin `j' bir karakter aşağı, `k' bir karakter yukarı gider). Bu anda kullanıcı yazı moduna geçmek isterse `i' tuşuna basabilir.
Yazı moduna iken klavyeden girilen her karakter ekranda görünür. Bundan sonrası daktilo kullanmaya benzer. Tekrar komut moduna geçmek için ESC tuşu yardımcı olur. Bir dosya yazarken veya düzeltmede bulunurken her iki yazım stili arasında sürekli gidip geldiğinizi farkedeksiniz.
Bunlara ek olarak dosya işlemleri veya eşleme (substitution) yaparken iki mod da kullanılmaz. Linux kullanıcısı vi üzerinde çalışırken en alt satırda vi mesajlarını görür ve gerektiği zaman satır modunda komutları girer. Satır moduna geçmek için `:' (iki nokta üstüste) karakteri kullanılır. Bu tuşa basıldığında ekranın en altında bir satır açılır ve vi sizden bir komut girmenizi bekler. vi komutunu yazdıp enter'a bastıktan sonra tekrar editör komut moduna geçersiniz.
Dosya İşlemleri
Sisteme girip ekrana vi telefon yazdığınızda aşağıdakine benzer bir metin üzerinde arama ve değiştirme görüntüsü monitörde belirecek ve program çalıştırılacaktır.
_
~
~
~
~
~
~
~
~
~
~
~
~
 "telefon" [NEW FILE]  1 line, 1 char
vi'a ilk girdiğiniz anda komut modunda olursunuz. Yazı moduna geçmek için `i' veya `a' tuşuna basın. Bu andan itibaren zamanınızın büyük bir kısmını geçireceğiniz yazı moduna atlarsınız. Bıkana kadar yazıp önce ESC tuşuna, ardından iki kere `Z' tuşuna basın. Bu komut dizisi önce dosyayı kaydedecek, sonra da vi editörden çıkmanızı ve kabuğa dönmenizi sağlayacaktır.
vi' a yeni başlayanların yaptıkları en sık hatalardan biri yazı modundan komut moduna geçerken ESC tuşuna basmamalarıdır. `w' komutu `ZZ' komutuna benzer çalışır, hafızada halihazırda bulunan dosyayı, editörden çıkmadan diske kaydeder. Eğer isimsiz bir dosyada üzerinde çalışıyorsanız (örneğin vi telefon yerine sadece vi yazarak editöre girmişseniz) dosyayı sabit diske yazmak için `w' satır komutunu kullanmalısınız. Bunun için daha önce de belirtildiği gibi
:w telefon
yazıp satır moduna geçerek komutu girmelisiniz
vi editörden çıkmak için `:q' yazın.
vi' da Yazma
Şimdi vi yardımıyla bir dosya üzerinde denemeler yapalım. Aşağıdaki satırları kabuk satırında iken yazın ve ENTER'a basın.
metu:~$ vi deneme
Ekran silinecek ve yukarıdakine benzer bir görüntüyle karşılaşacaksınız. Yazı moduna geçmek için `i' tuşuna basın. Hemen ardından bir zamanlar İnternet üzerinde görüp kaydettiğim birkaç satırı yazın.
Arada sırada kitapta bir şeyler ararken /'e basasım gelmiyor değil.
~
~
~
~
~
~
Ekranın en sonuna geldiğinizde vi, alttaki satır başına geçmeyecektir. Bunun için ENTER tuşuna basarak yazmaya devam edin.
Arada sırada kitapta bir şeyler ararken /'e basasım gelmiyor değil.
Fazla vi kullanmaktan tembelliğe alışmışız anlaşılan,
~
~
~
~
~
Satır sonuna geldiğiniz zaman komut satırına geçmek için ESC tuşuna basın. Klavyenin sağındaki yön tuşlarını kullanarak dosya içinde gezinebilirsiniz. vi'ın sevdiğim özelliklerinden birisi de kullanıcıyı 10 parmak yazmaya zorlamasıdır. Yön tuşlarının görevini h, j, k ve l tuşları da yapabilir, böylece kullanıcı sağ elini klavye üzerinde sürekli gezdirmek zorunda kalmaz.
  • j, imleci bir satır aşağı indir
  • k, imleci bir satır yukarı gönder
  • h, imleci bir karakter sola al
  • l, imleci bir karakter sağa al
Alternatif olarak ENTER tuşu komut modunda `j' tuşu yerine de kullanılabilir. Kursörü yön tuşları yardımıyla ``Fazla'' kelimesiyle başlayan satıra kadar taşıyın. `i' tuşuna basıp tekrar yazı moduna geçerek metin üzerinde biraz değişiklik yapın:
Arada sırada kitapta bir şeyler ararken /'e basasım gelmiyor değil.
Fazla vi kullanmaktan dolayı_tembelliğe alışmışız anlaşılan...
~
~
~
~
~
``dolayı'' kelimesini ekledikten sonra bir noktayı işaret etmek istiyorum. Kullandığım Linux makinası Türkçe destekli olduğu için Türkçe karakterleri okuyup yazmam mümkün, aslında Linux işletim sistemi hemen her ülkenin alfabesini desteklediğinden herhangi bir dilde (örneğin Alman alfabesi karakterlerini kullanarak) yazmak için birkaç komut yeterli oluyor.
`i' tuşu imlecin bulunduğu yerden yazmasına rağmen, `a' komutu bir karakter sağdan başlayarak yazmanızı sağlar. `o' komutu ise imlecin bulunduğu yerin altında bir satır boşluk bırakır ve boş satırın başına geçerek yazı moduna atlar. ESC tuşuna basarak komut modundayken en alt satıra inin ve `o' tuşuna basın. Burada bir satır daha ekleyelim:
Arada sırada kitapta bir şeyler ararken /'e basasım gelmiyor değil.
Fazla vi kullanmaktan dolayı tembelliğe alışmışız anlaşılan..
Sayfaları karıştırmak zor geliyor...
~
~
~
~
Eğer ekrandaki bilgi birkaç sayfadan ibaretse Control-F tuşunu bir sayfa ileri gitmek için, Control-B tuşunu ise metni bir sayfa geriye almak için kullanabilirsiniz.
vi her satırı kendi içinde numaralandırır. Belirli bir satıra gitmek için tuşlar dışında satırın numarası kullanarak da gidilebilir. `G' komutu yardımıyla imlecin gideceği satırı belirtebilirsiniz. Bunun için komut modunda iken satır numarasını girin (ekranda görünmeyecektir) ve hemen ardından `G' tuşuna basın. Eğer satır numarası girilmezse imleci dosyanın sonunda konumlandırılır.
Silme ve Kopyalama
Yazı modunda iken back space tuşu yardımıyla, komut modunda iken ise `x' komutu ile istediğiniz kadar harfi silmeniz mümkündür. `dd' komutu ise imleci üzerinde bulunduğu satırı siler ve alttaki tüm satırlar bir satır yukarı alınır. PC üzerindeki editörlerdeki satır sonuna gelince imlecin otomatik olarak bir satır aşağı kayması, :set wm=n satır komutu yardımıyla gerçekleştirilir. Komuttaki n sayısı, sağdan kaç boşluk bırakılacağını söyler. Ekranın sağından 4 satır boşluk bırakmak için (bu durumda satır uzunluğu 76 karaktere inecektir) :set wm=4 yazın.
`dd' veya `x' komutundan sonra silinen harf ve harf grupları hafızaya alınır ve istenildiği zaman `p' tuşu yardımıyla imlecin bulunduğu yerden itibaren ekrana basılır. `P' yardımıyla hafızadaki metni imlecin bir satır üzerine kopyalayabilirsiniz.
Kursörün bulunduğu yerden satır sonuna kadar silmek için `d$' , metin sonuna kadar silmek için `dG' kullanılabilir. ($ ve G harflerinin işlevlerine dikkat edin!)
Son kaldığımız yerden devam edelim. Son satırı `dd' ile silelim.
Arada sırada kitapta bir şeyler ararken /'e basasım gelmiyor değil.
Fazla vi kullanmaktan dolayı tembelliğe alışmışız anlaşılan..
~
~
~
~
~
Ardından kestiğimiz satırı P komutuyla en üste yapıştıralım .
Sayfaları karıştırmak zor geliyor...
Arada sırada kitapta bir şeyler ararken /'e basasım gelmiyor değil.
Fazla vi kullanmaktan dolayı tembelliğe alışmışız anlaşılan..
~
~
~
~
Tek bir karakteri başka bir karakterle değiştirmek için önce komut modunda karakteri silip yazı moduna geçtikten sonra gerekli değişikliği yapmaya gerek yoktur. `r' komutu tek bir harfi değiştirmek için kullanılır. Bu tuşa basınca imlecin üzerinde bulunduğu karakter silinir ve editör kullanıcıdan yerine gelecek karakteri bekler. Bundan sonra vi tekrar komut moduna döner.
Bir kelimeyi silip üzerine yazmak için de `cw' komutu kullanılabilir. Kelimenin başına gelin ve sırayla önce `c' sonra `w' tuşlarına basın. Editör yazmayı bitirmenizi bekleyecektir. ESC tuşuna basıncaya kadar yazdıklarınız ekranda kalacak ve (varsa) kelimeden arta kalan harf(ler) silinecektir.
Her ölümlü gibi siz de hata yapabilirsiniz. Hata yaptıktan sonra eski konuma dönmek için `u' komutunu kullanın. Bu komut, üzerinde değişiklikler yaptığınız metni son çalıştırılan komuttan önceki duruma getirir. Yeni konuma tekrar geri dönmek için Control-R 'ye basın.
Komut Tekrarı
20 satırı silmek için 20 kere dd tuşuna basmak gereksizdir. Bunun için `dd' komutundan önce klavyeden 20 rakamını girmek yeterli olur. Girilen rakamlar `G' komutundaki örneğe benzer şekilde ekranda görünmezler. Kullanılan rakamlar, kendinden sonra gelecek olan komutun kaç kere işletileceğini belirtir. Örnek olarak `8x' komutu sekiz karakteri siler, `12j' komutu 12 satır aşağı iner. Üzerinde çalıştığımız dosyada birkaç uygulama yapalım. Kursörü ilk satırdaki ``geliyor'' kelimesinin başına alın ve `7x' komutunu girin. Son durum yaklaşık şu şekilde olmalıdır:
Sayfaları karıştırmak zor ...
Arada sırada kitapta bir şeyler ararken /'e basasım gelmiyor değil.
Fazla vi kullanmaktan dolayı tembelliğe alışmışız anlaşılan..
~
~
~
vi'ın komut tekrar özelliği sayesinde ekrana yazdıklarınızı ardarda kopyalayabilirsiniz. Örnek dosya üzerinde birinci satırın başına gidin ve `9i' yazın. Gireceğiniz yazı modunda ekrana ne gönderirseniz ESC tuşundan sonra 9 kopyası basılacaktır:
bip bip bip bip bip bip bip bip bipSayfaları karıştırmak zor ...
Arada sırada kitapta bir şeyler ararken /'e basasım gelmiyor değil.
Fazla vi kullanmaktan dolayı tembelliğe alışmışız anlaşılan..
~
~
~
~
Kopyalama
Silinen karakter veya karakter gruplarının hafızaya kaydedildiğini söylemiştik. Bu hafıza geçici bir tampon vazifesi görür. `yy' komutu üzerinde bulunduğu satırı kopyalar. Eğer komuttan önce sayı girilirse o kadar satır kopyalanır. Ardından kullanıcı metin üzerinde istediği yere gelip `p' tuşuna basarak hafızadaki satırları imlecin bulunduğu satırın altından itibaren basar. `yy' komutu yerine `Y' de tercih edilebilir.
Arama ve Eşleştirme
vi'da çalışırken arama yapmak isteyebilirsiniz. Eğer üzerinde çalıştığınız metin uzun ise belirli bir kelime veya kelime gruplarını aramak çok zaman alabilir. Komut modunda iken `/' karakterine basarak arama/tarama moduna geçin. Ekranın en alt kısmında bir satır açılacaktır. Aramak istediğiniz kelimeyi yazın ve ENTER tuşuna basın. vi editörü imlecin bulunduğu yerden itibaren girilen anahtar sözcüğü metin içinde tarayacaktır. Eğer aranan kelime bulunmuşsa satır bunun üzerine konumlandırır.
`/' komutu dosyanın sonuna doğru arama yaparken `?' komutu başa doğru gider. Aynı kelimeyi tekrar aratmak için `n' tuşuna basın. Arama işlemi, `/' komutu yardımıyla yapılmışsa ileri doğru, `?' komutu yardımıyla yapılmışsa geriye doğru tekrar başlayacaktır.
Aslında arama yaparken komut modunda girilen her karakter grubu bir düzgün deyimdir. Örnek olarak komut modunda `d$' yazdığımızda $ harfinin satır sonunu belirttiğini, `dG' komutundaki `G' harfinin de metin sonunu işaret ettiğinden imlecin bulunduğu yerden itibaren dosya sonuna kadar sildiğini görmüştük. Metin içindeki büyük harfleri aramak için
/[A-Z]
kullanılabilir. Burada gösterebildiğimiz özellikleri vi'ın sadece küçük bir parçasıdır. vi kullanıcılarının işine yarayabilecek birkaç arama-eşleştirme komutuna göz atalım.
:[a,b]s/deyim/eşlenecek deyim/işleç
Yukarıdaki komut metin içinde a ve b satırları arasındaki ``deyim''i, ``eşlenecek deyim''e çevirir. Özel tanımlı karakterleri de kullanabilirsiniz. Aşağıdaki komut da 1. ve 10. satırları arasında bulduğu tüm ``nümerik'' kelimelerini ``sayısal'' hale getirir.
:1,10s/nümerik/sayısal;
Satır sayısı yerine tüm dosya üzerinde eşleştirme yapmak için % sembolünü, satır sonunu belirtmek için $ sembolünü kullanabilirsiniz. Bu durumda satır sayısını belirten [a,b] tanımını boş bıraktığınızda değişiklik sadece imlecin bulunduğu satırda yapılacaktır. İşleçler de birkaç çeşit olabilir. `c' işleci, her eşleme öncesi kullanıcıdan izin alır. vi kullanırken çoğu durumda her satırda rastlanan ilk eşlemeyi yerine getirecek olan `g' işlecini kullandığınızı göreceksiniz. Daha az kullanılan `i' işleci ise aramanın büyük-küçük harf gözetimi yapmadan yerine getirmesini sağlar.
:%s/elektronik/s/nik//g
komutu, içinde ``elektronik'' kelimesi geçen her satırdaki ``elektronik'' kelimesini ``elektron'' haline getirir. Fakat ``mekanik'' kelimesine dokunmaz. Sed altında kullanılan `\(\)' operatörü vi için de geçerli bir tanımdır. Aşağıdaki komut da yukarıdaki uygulamaya benzer şekilde her ``kalemlik'' kelimesini ``kalemler'' haline getirir.
:g/\(kalem\)lik/s//\1ler/g
Diğer Dosyaların Metne Eklenmesi
Kursörün bulunduğu yerden itibaren rehber.txt dosyasını halihazırda çalıştığınız metine kopyalamak için
:r rehber.txt
komutunu kullanın.
Kabuk Komutlarının Çalıştırılması
vi altında iken kabuk komutlarını, hatta kabuğun kendisini bile çalıştırmak mümkündür. `:!' ile komut ismini girebilirsiniz. Aşağıdaki komut vi'dan çıkmadan ls komutunu çalıştıracak ve sonucu ekrana verecektir.
:!ls -la
Bunun yanısıra komut çıktısını ekran yerine üzerinde çalıştığımız metine aktarmak için aşağıdaki vi komutunu kullanın:
:r! ls -al
Metnin son halini görelim:
bip bip bip bip bip bip bip bip bipSayfaları karıştırmak zor ...
Arada sırada kitapta bir şeyler ararken / 'e basasım gelmiyor değil.
Fazla vi kullanmaktan dolayı tembelliğe alışmışız anlaşılan..
bash.txt
index.html
images/
~
vi Başlangıç Dosyaları
vi her açıldığında belirli bir dosyayı okur ve gerekli düzenlemeleri ve düzeltmeleri yapar. Bu işlemler için kullanılan set komutu birtakım parametreler alır. Örneğin set wm=n , n karakter kenar boşluğu bırakmak için, set nu ise her satırın numaralandırılması için kullanılır. Bu komutlar ister vi içinde , ister başlangıç dosyası içinde çalıştırılabilir.
vi her açılışta öntanımlı olarak önce bulunduğunuz dizin içindeki, ardından ev dizininizin içindeki .exrc dosyasına bakar. Böylece açılış anında yapılandırma işlemlerini bu dosyayı kullanarak kolayca gerçekleştirebilirsiniz. Dosyaya her satırda bir set komutu gelecek şekilde istedinildiği kadar komut yerleştirilebilir. Aşağıda örnek bir .exrc dosyası görülüyor.
set ignorecase
set wrapmargin=2
set tabstop=6
Yukarıdaki seçenekler arasında ignorecase, vi editörünün arama yaparken küçük-büyük harf ayrımı gözetmemesini; wrapmargin=2 sol kenardan iki satır boşluk bırakmasını; tabstop=6 ise TAB tuşuna her basıldığında imlecin 6 karakter ileri gitmesini sağlar. Daha kısa yazmak isterseniz sırasıyla ic, wm ve ts kullanın.
Önceki Üst Ana Başlık Sonraki
SED (Stream editor) Başlangıç TCP/IP
Bir Linux Kitaplığı Sayfası