e-Bergi'nin 2007 Ekim sayısında vi metin düzenleyicisi (text editor) hakkında bir yazı yayınlanmıştı. Bu yazımızda da vi/vim/gvim için kullanabileceğiniz ayarlardan bahsedeceğiz. Vi metin düzenleyicisini, kullandığınız GNU/Linux dağıtımındaki "vim" adlı paketten kurduğunuzu varsayıyoruz. Ayrıca programı çalıştırırken de "vim" şeklinde çalıştırmanızı tavsiye ediyoruz. Eğer "vi" komutunu vererek çalıştırırsanız geriye uyumluluk sağlamak için bazı gelişmiş özellikler kapalı olacaktır.

Vi metin düzenleyicisi yüklendiğinde bazı dosyalardan ayarlarını okur. Bu dosyaların ilki "/etc/vim/vimrc"; sistemdeki herkesin ortak kullanacağı ayarlar bu dosyadadır. Genelde bu dosyaya müdahale etmeniz gerekmez, çünkü değişikliklerinizi kendinize ait olan ayar dosyanızda yapabilirsiniz. Bu kendinize ait dosya ev dizininizin altındaki ".vimrc" dosyasıdır. Bildiğiniz gibi GNU/Linux dağıtımlarında adının ilk karakteri nokta olan dosyalar gizli dosyalardır. ".vimrc" dosyanızı değiştirmek için; grafik ortamda gvim kullanıyorsanız "Dosya Aç" kutusunda sağ tıklayıp "Gizli dosyaları göster" seçeneğini etkinleştirmelisiniz. Komut satırında aşağıdaki komutla aynı şeyi yapabilirsiniz.

vim ~/.vimrc

Eğer daha önceden bir ".vimrc" dosyası oluşturmadıysanız böyle bir dosyayı göremeyeceksiniz. Durum böyle de olsa, dosyanın içine yazacağınız ayarları yazdıktan sonra ev dizininiz altına ".vimrc" adıyla kaydetmeniz yeterli olacaktır. Vim'i Windows işletim sisteminde kullanıyorsanız ayarları yazacağınız dosya "C:\Program Files\vim_vimrc" olmalıdır.

Bu ayar dosyaları aslında Vim'in kendine has programlama dilindeki komutlardır ve program açılışında bu dosyalar satır satır işlenirler. Burada anlatılan ayarların her birini Vim komut modundayken iki nokta işaretinden(:) sonra yazarak kullanabilirsiniz. Ayrıca, Vim'in gelişmiş yeteneklerini kullanmak için bu dosyada çeşitli fonksiyonlar tanımlayabilirsiniz; ancak biz bu kadar detaya girmeyeceğiz, dilerseniz vim'in belgelerinden bunları öğrenebilirsiniz. Şimdi gelelim kullanabileceğiniz bazı ayarları açıklamaya.

Ayarlar

set ignorecase smartcase : Bu ayar bölü işareti(/) kullanarak Vim'de arama yaparken büyük-küçük harf ayrımının nasıl çalışacağını belirtir. Eğer arama yaparken hiç büyük harf yazmadıysanız, arama büyük-küçük harfler göz önüne alınmaksızın yapılır. Eğer aranması için yazdığınız kelimede en az bir büyük harf varsa, arama büyük-küçük harf ayrımına uyar. Örnek bir metin ve arama sonuçları aşağıdaki gibi olacaktır.

Veli dede Ali'nin velisiymiş
Aramak için yazdığınız metin Arama sonucu
/veli Veli dede Ali'nin velisiymiş
/Veli (büyük 'V' harfine dikkat) Veli dede Ali'nin velisiymiş

set ignorecase! : Sondaki ünlemin anlamı bu ayarın "ignorecase" ayarını tersine çevirdiğidir, yani aramalarda her zaman büyük-küçük harf ayrımı gözetilir. Bir örnek;

Aramak için yazdığınız metin Arama sonucu
/veli Veli dede Ali'nin velisiymiş
/Veli (büyük 'V' harfine dikkat) Veli dede Ali'nin velisiymiş

set hlsearch : Arama işlemi sonucunda bulunan kelimenin parlak bir renkte işaretlenmesini sağlar. Böylelikle kalabalık bir dosyanın içinde aradığınız kelimenin nerelerde geçtiğini çok kolay görebilirsiniz.

set incsearch : Arama yaparken, '/' karakterine bastığınız andan itibaren arama yapmaya başlanır. Arayacağınız kelimenin tamamını yazmadan, sadece yazdığınız kısmı dosya içinde aranır. Üstte açıklanan "hlsearch" ayarıyla birlikte kullandığınızda, aranan kelime dosyada yoksa hemen fark edebilirsiniz, ya da aradığınız kelimenin tamamını yazmadan yerini bulabilirsiniz. Ufak bir ipucu, bu özellik Firefox web tarayıcısında da yer almaktadır, '/' yazıp bir kelime yazmaya başladığınızda web sayfası içinde arama yapmaya başlar.

set showcmd : Komut modundayken girdiğiniz komutu ekranın en alt satırında görebilmenizi sağlar. Tek harflik komutlar için çok bir anlam ifade etmese de uzun komutlar için ne yazdığınızı görebilmenizi ve yanlış bir şey yazdığınızda geri silme tuşuyla(backspace) komutu iptal edebilmenizi sağlar. Örneğin üç satır kopyalamak için "3yy" yazarken, siz ilk tuşa bastığınızda vim'in en alt satırında önce '3' daha sonra '3y' görünür.

set showmatch : Bir kapama parantezi yazdığınızda, hangi açma paranteziyle eşleştiğini renklendirerek gösterir. Parantezlerden birinin üzerindeyken komut modunda '%' tuşuna bastığınızda imleci bu eşleşen parantezi üzerine taşıyabilirsiniz.

set number : Her satırın başında satır numarasının yazılmasını sağlar. Daha sonra komut modundayken ":25" ya da "25G" yazarak 25. satıra gidebilirsiniz.

set background=dark ya da set background=light : Gvim için kullandığınız tema, veya vim için kullandığınız uçbirim (terminal) programının arka planı siyah ya da koyu bir renk ise "set background=dark" size daha parlak renkli yazılar sunacaktır. Benzer şekilde beyaz ya da açık renkli bir uçbirim kullanıyorsanız "set background=light" daha okunabilir koyu renk yazılar gösterecektir. Bu renklendirme aşağıda bahsedilen "syntax on" ayarı geçerliyse ve sadece renklendirme kullanılan dosya türlerinde geçerlidir ( ayar dosyası, program kaynak kodu gibi dosyalar. Örneğin .vimrc dosyasının kendisi renklendirilir )

syntax on : Yukarıdaki maddede bahsettiğimiz kod/ayar dosyası renklendirmesini etkinleştiren komuttur. Hemen hemen tüm ayar dosyaları ya da programlama dilleri için vim'in kendi sağladığı renklendirmeler mevcuttur.

set autoindent : Özellikle program kodları veya ayar dosyalarında kullanışlı olan bu ayar, satırların girinti seviyelerini kendiliğinden ayarlar. Düz metin yazarken de, metnin belli bir girinti ile yazılmasını istiyorsanız kullanışlıdır. Otomatik girintileme açıkken Vim içine başka programdan bir metin yapıştırmak istiyorsanız aşağıdaki ipuçları kısmına bakmanızı tavsiye ederiz.

set smartindent : Bir üstteki "autoindent" ayarını daha akıllı yapan bir ek ayar, ikisini birlikte kullanmanızı tavsiye ederiz.

İpuçları

Şimdi de Vim ile ilgili bir kaç ipucu;

Otomatik girintileme (autoindent) açıkken metin yapıştırmak : Eğer autoindent ve smartindent açıkken başka bir programdan kopyaladığınız -ve halihazırda sekme(tab) içeren- bir metni Vim'e yapıştırmayı denediyseniz, otomatik girintileme özelliğinden ötürü metnin sürekli girintilendiğini ve çok kötü bir sonuç verdiğini görmüş olabilirsiniz. Bunu engellemek için komut modundayken :set paste ile vim'e bir metin yapıştıracağınızı söylemelisiniz. Yapıştırdıktan sonra :set nopaste ile tekrar eski hale dönebilirsiniz.

Görünmeyen karakterleri(sekme, yeni satır) göstermek : Bazen sekme(tab) yeni satır(newline/enter) gibi görüntülenmeyen karakterleri görmek isteyebilirsiniz, özellikle python dilinde program yazarken. Bunun için komut modunda :set list yazmanız yeterli, sekme karakterleri "I" (şapka ve I harfi) ile, yeni satır karakterleri de "$" (dolar) ile gösterilecektir. Bu özelliği kapatmak için yine komut modunda :set nolist yazmanız yeterli.

Betiklere çalıştırma izni verme : Betik(script) yazarken önce dosyayı oluşturmak, sonra ona "chmod u+x DOSYA_İSMİ" komutu ile çalıştırma izni vermek gerekir. Genelde çalıştırma izni vermek unutulduğundan, ilk satırı "#!" ve "/bin/" içeren dosyalara çalıştırma izni vermek için aşağıdaki satırı Vim ayar dosyanıza yazabilirsiniz.

au BufWritePost *  if getline(1) =~ "^#!.*/bin/" | silent !chmod a+x <afile>

Vim içinden komut çalıştırmak : Metin düzenleyicinizden çıkmadan bir komut çalıştırıp çıktısını görebilirsiniz. bunun için vim komut modundayken ":!" yazıp sonrasında çalıştıracağınız komutu yazın. Örneğin;

:! ls -l

Umarız Vim metin düzenleyicisine biraz daha ısınmışsınızdır. Yazımızı bir adet örnek vimrc dosyası ile bitiriyoruz. Tirnak (") karakterinden sonra Vim'in dikkate almayacağı ama size bilgi sağlayacak yorumlar yazabilirsiniz.

set ignorecase smartcase " Akilli buyuk kucuk harf ayrimi
set incsearch          " Artarak arama
set hlsearch           " Aranan kelimeleri renklendir

set background=dark    " Arkaplan siyah ya da koyu renk
syntax on              " Renklendirmeyi ac
set showcmd
set showmatch

set autoindent
set smartindent        " Akilli girintilendirme

" Sekmeleri 4 bosluk karakteriyle degistir
set expandtab
set softtabstop=4
set ts=4
set shiftwidth=4

" Betikleri calistirilabilir hale getir
au BufWritePost *  if getline(1) =~ "^#!.*/bin/" | silent !chmod a+x <afile>

Kaynaklar