YAZILIM

Vim Rehberi: Modlardan Kısayollara Eksiksiz Anlatım

Vim Rehberi: Modlardan Kısayollara Eksiksiz Anlatım yazısının kapak görseli

Vim’e ilk başladığında en çok zorlanılan yer editörün mantığı değil, alışkanlıkları bırakmak oluyor. Herkes tuş kombinasyonu ezberleyerek başlıyor ama asıl fark, Vim’in neden bu şekilde çalıştığını kavrayınca ortaya çıkıyor. Bu yazıda o mantığı baştan sona, kategori kategori anlatıyorum: modlar, hareket komutları, düzenleme, arama değiştirme, makrolar, register kullanımı, pencere ve buffer yönetimi, ayar dosyası ve eklentiler. Sonunda da yeni başlayanların en sık takıldığı hatalara ve çözümlerine bakacağız.

Amaç ezber listesi çıkarmak değil. Bir komutun ne işe yaradığını bilmek başka, ne zaman ve neden o komutu seçtiğini bilmek başka. Bu yazı ikincisini hedefliyor.

1. Mod Mantığı

Vim’i anlamanın anahtarı tek bir şey: bu bir modal editör. Yani klavyenin davranışı sabit değil, hangi moddasın ona göre değişiyor.

Normal mod, Vim açıldığında düştüğün yer. Burada tuşlar harf değil komut anlamına gelir. Mesela d tuşuna bastığında ekrana d yazılmaz, silme işlemi başlar. Gezinme, silme, kopyalama gibi her şey bu modda yapılır.

Insert mod, klasik yazı yazma modu. i, a, o gibi tuşlarla girilir, Esc ile çıkılır.

Visual mod, fareyle sürükleyerek seçim yapmanın klavye karşılığı. v karakter bazlı seçim, V satır bazlı seçim, Ctrl+v ise blok seçimi yapar.

Komut satırı modu, kaydetme, çıkış ya da bul-değiştir gibi işlemlerin yapıldığı yer. Normal moddayken : tuşuna basarak girilir.

Replace mod, yazdığın karakterler mevcut metnin üzerine yazılır, araya eklenmez. R ile girilir.

Yeni başlayanların çoğu bir hataya düşüyor: Vim’i sürekli yazı yazılan bir kutu gibi görüyorlar. Oysa doğru alışkanlık şu: Normal mod ana üssün, çoğu zamanını orada geçir. Insert moda sadece yeni bir şey yazacağın zaman gir, yazmayı bitirince hemen Esc ile çık.

2. Hareket Komutları

Vim’de gezinmek ok tuşlarıyla ilgili değil. Amaç, imleci en az hareketle tam istediğin yere götürmek.

Karakter ve satır bazlı

  • h j k l sırasıyla sol, aşağı, yukarı, sağ yönünde hareket eder. Ana sıra üzerinden gezinme mantığı buradan geliyor.
  • 0 satırın başına, ^ ilk boş olmayan karaktere, $ satır sonuna götürür.

Kelime bazlı

  • w bir sonraki kelimenin başına, b bir öncekinin başına, e mevcut kelimenin sonuna atlar.
  • Büyük harfli versiyonları (W, B, E) noktalama işaretlerini de kelimenin parçası sayıyor. Dosya yolu ya da özel karakter içeren kod satırlarında işe yarıyor.

Dosya ve ekran bazlı

  • gg dosyanın başına, G sonuna götürür.
  • {sayı}G ya da :{sayı} belirli bir satıra atlar. Örneğin 42G doğrudan 42. satıra gider.
  • Ctrl+d ve Ctrl+u yarım sayfa aşağı ve yukarı kaydırır.
  • H, M, L imleci görünen ekranın üstüne, ortasına, altına taşır.

Satır içinde arama ile hareket

  • f{karakter} satırda o karakterin bir sonraki geçtiği yere gider, F{karakter} geriye doğru arar.
  • t{karakter} karakterden hemen öncesinde durur, özellikle bir ayraçtan önce durmak istediğinde kullanışlı.
  • ; son aramayı tekrarlar, , ters yönde tekrarlar.

Paragraf ve cümle bazlı

  • { ve } boş satırla ayrılmış paragraflar arasında gezdirir.
  • ( ve ) cümleler arasında gezdirir.

Buradaki kritik nokta şu: Vim’in hareket komutları birbirine eklenebiliyor. Bu özellik bir sonraki bölümdeki düzenleme komutlarını asıl güçlü kılan şey.

3. Düzenleme Komutları

Vim’in fark yarattığı asıl yer burası. Bu bölümü anladığında editör, fareyle çalışan araçlardan gerçekten hızlı bir şeye dönüşüyor.

Operatör artı hareket mantığı

Vim’in düzenleme komutlarının arkasında sabit bir kural var: operatör + hareket yazıldığında, imleç ile o hareketin gideceği nokta arasındaki metin işleme girer. Birkaç operatörü ve birkaç hareketi öğrendiğinde bunları istediğin gibi birleştirebiliyorsun.

Sık kullanılan operatörler:

  • d silme
  • c değiştirme (siler, ardından Insert moda geçirir)
  • y kopyalama
  • > ve < girinti ekleme, azaltma

Hareketlerle birlikte örnekler:

  • dw kelimenin sonuna kadar siler
  • d$ satır sonuna kadar siler
  • dd mevcut satırın tamamını siler (operatörü iki kez yazmak tüm satırı hedefler)
  • ciw imlecin üzerindeki kelimeyi değiştirir
  • ci" tırnak içindeki metni değiştirir, imleç tırnakların içinde herhangi bir yerde olabilir
  • yy mevcut satırı kopyalar
  • y} paragraf sonuna kadar kopyalar

Metin nesneleri

ciw, ci", di( gibi kombinasyonları mümkün kılan şey metin nesneleri. i “iç kısım” anlamına gelir, sadece içeriği hedefler. a ise içerikle birlikte çevresindeki ayraçları da kapsar. Örnekler:

  • di( parantez içindekini siler, parantezleri korur.
  • da( parantezleri de içerikle birlikte siler.
  • ci{ süslü parantez içindekini değiştirir.
  • dit bir HTML etiketinin içini siler.

Bu, yeni başlayanların en az kullandığı ama günlük kod düzenlemede en çok zaman kazandıran özelliklerden biri.

Geri alma ve tekrar

  • u son değişikliği geri alır, Ctrl+r yeniden uygular.
  • . son yapılan değişikliği tekrar eder. Bu göründüğünden çok daha kullanışlı: bir düzenleme yap, sonra dosyada gezinip aynı işlemi . ile tek tuşla tekrarla.

Kopyala, kes, yapıştır

  • y Vim’in kopyalama karşılığı.
  • d ya da x ile silme de metni bir register’a kaydeder, yani kesme gibi çalışır.
  • p imleçten sonrasına, P imleçten öncesine yapıştırır.

Büyük küçük harf ve biçim

  • ~ imlecin üzerindeki karakterin büyük küçük harfini çevirir.
  • gU{hareket} büyük harfe, gu{hareket} küçük harfe çevirir. Örneğin gUiw mevcut kelimeyi büyük harfe çevirir.
  • J mevcut satırı bir sonrakiyle birleştirir.

4. Arama ve Değiştirme

Vim’de arama sözdizimini bildiğinde hem hızlı hem çok kesin çalışıyor.

Temel arama

  • /kelime ileri yönde arar, ?kelime geri yönde arar.
  • n aramayı aynı yönde tekrarlar, N ters yönde tekrarlar.
  • * imlecin üzerindeki kelimeyi ileri yönde, # geri yönde arar.

Bul değiştir komutu

Genel yapısı şöyle:

:%s/eski/yeni/g
  • % tüm dosyaya uygulanacağı anlamına gelir, olmazsa komut sadece bulunduğun satıra uygulanır.
  • s değiştirme komutu.
  • g bir satırdaki tüm eşleşmeleri değiştirir, sadece ilkini değil.
  • Sona c eklersen, mesela :%s/eski/yeni/gc, her eşleşme için ayrı onay ister.

Belirli satır aralığında değiştirme:

:10,20s/eski/yeni/g

Bu komut sadece 10 ile 20. satırlar arasında çalışır.

Büyük küçük harf duyarsız arama

Aranan kelimenin sonuna \c ekle, örneğin /kelime\c, ya da :set ignorecase ile bunu kalıcı ayar haline getir.

5. Register Kullanımı

Çoğu editörde tek bir pano vardır. Vim’de ise register denen düzinelerce pano var.

  • İsimsiz register (") en son kopyalanan ya da silinen metni tutar.
  • "a ile "z arası isimli register’lar metni bilerek saklamana izin verir. "ayy ile a register’ına kopyala, "ap ile sonradan yapıştır.
  • "+ sistem panosuna bağlanan register. Vim’den başka programlara "+y ile kopyalayabilir, başka programlardan "+p ile yapıştırabilirsin.
  • "0 her zaman en son yapılan kopyalamayı tutar, arada yapılan silme işlemlerinden etkilenmez. Kopyaladığın bir bloğu, aralarda başka şeyler silsen bile birden fazla kez yapıştırmak istediğinde işe yarar.

Register’larda şu an ne olduğunu görmek için :registers yaz.

6. Makrolar

Makro, bir tuş dizisini kaydedip sonra tekrar oynatmanı sağlar. Aynı işlemi çok satırda tekrarlaman gerektiğinde en pratik çözüm.

  1. qq ile q register’ına kayıt başlat.
  2. Tekrarlanmasını istediğin işlemi tam olarak yap.
  3. q ile kaydı durdur.
  4. @q ile tekrar oynat.
  5. @@ ile son çalıştırdığın makroyu tekrar çalıştır.
  6. Birden fazla kez çalıştırmak için, mesela 10@q on kez uygular.

Gerçek hayattan örnek: 40 satırın sonuna noktalı virgül eklemen lazım. Satır sonuna gidip noktalı virgül ekleyen ve bir satır aşağı inen bir makro kaydet, sonra 39@q yaz, kalan 39 satır tek seferde tamamlanır.

7. Buffer, Pencere, Sekme Farkı

Bu üç kavram sürekli karıştırılıyor, o yüzden açık şekilde ayırmak lazım.

Buffer, hafızaya yüklenmiş bir dosya demek. Şu an ekranda görünüp görünmediğine bakılmaksızın açık olan her dosya bir buffer.

  • :ls açık buffer’ları listeler.
  • :b {sayı} ya da :b {kısmi isim} ile bir buffer’a geçilir.
  • :bn ve :bp sırayla bir sonraki ve önceki buffer’a geçer.

Pencere, bir buffer’ı gösteren görüntü alanı. Aynı ya da farklı buffer’ları gösteren birden fazla pencere aynı anda açık olabilir.

  • :split ya da Ctrl+w s yatay böler.
  • :vsplit ya da Ctrl+w v dikey böler.
  • Ctrl+w sonrasında ok tuşu ya da h j k l pencereler arasında geçiş yapar.
  • Ctrl+w q mevcut pencereyi kapatır.

Sekme, tek bir dosyadan çok bir çalışma alanı grubuna karşılık gelir.

  • :tabnew yeni sekme açar.
  • gt ve gT sırayla sonraki ve önceki sekmeye geçer.

Deneyimli kullanıcıların çoğu her yeni dosya için sekme açmak yerine buffer ve pencere kullanmayı tercih ediyor, çünkü buffer’lar zaten çok dosyayla çalışmayı yeni sekme açmaya gerek kalmadan sağlıyor.

8. Ayar Dosyası: .vimrc

Ayarların ~/.vimrc dosyasında tutulur (Neovim kullanıyorsan ~/.config/nvim/init.vim). Varsayılan deneyimi belirgin şekilde iyileştiren birkaç ayar:

set number relativenumber   " satır numaralarını göster, imlece göre
set incsearch               " yazarken arama sonuçlarını anlık göster
set ignorecase smartcase    " büyük küçük harf konusunda akıllı arama
set expandtab shiftwidth=4  " tab yerine boşluk kullan, 4 boşluk genişliğinde
set clipboard=unnamedplus   " varsayılan olarak sistem panosunu kullan
set hlsearch                " tüm arama eşleşmelerini vurgula
syntax on                   " söz dizimi renklendirmeyi aç

relativenumber ayarı özellikle gezinmeyi değiştiriyor. Satır numaraları imlece göre gösterilince 5j ya da 8dd gibi komutlar hemen netleşiyor, çünkü hedefin kaç satır uzakta olduğunu saymana gerek kalmıyor, direkt görüyorsun.

9. Eklentiler

Vim’in eklenti dünyası, iyi bir editörü gerçek anlamda güçlü bir geliştirme ortamına çeviren yer. Profesyonel kurulumlarda sürekli karşına çıkan birkaçı şunlar:

  • vim-plug ya da packer.nvim: eklenti yöneticisi. Aşağıdakilerin çoğu önce bir eklenti yöneticisi kurmana bağlı.
  • fzf.vim: proje genelinde hızlı dosya bulma ve arama, klasörlerde elle gezinmekten çok daha hızlı.
  • NERDTree ya da nvim-tree: dosya gezgini kenar çubuğu. Sadece buffer geçişi yerine görsel proje yapısı istediğinde işine yarar.
  • vim-airline: mod, git dalı, dosya bilgisi gibi şeyleri tek bakışta gösteren durum çubuğu.
  • coc.nvim ya da Neovim’in kendi LSP desteği: otomatik tamamlama, tanıma gitme, satır içi hata gösterimi getiriyor. Genelde sadece tam kapsamlı IDE’lerde olduğu düşünülen özellikler.
  • vim-surround: çevreleyen karakterleri değiştirme komutları ekler. Bir kelimeyi tırnak içine almak ya da parantezi köşeli parantezle değiştirmek elle uğraşmadan tek komutla yapılır.
  • vim-fugitive: editörden çıkmadan stage, commit, diff inceleme yapmanı sağlayan Git entegrasyonu.
  • ale: arka planda linter çalıştırır, hataları satır içinde gösterir.

Yeni başlıyorsan hepsini bir anda kurmaya kalkma. Önce çekirdek Vim’e hakim ol. Eklentiler asıl değerini, hangi işin seni yorduğunu net şekilde fark edecek kadar temel komutları öğrendiğinde gösteriyor.

10. Sık Karşılaşılan Hatalar ve Çözümleri

“Hiçbir şey yazamıyorum, takıldım kaldım” Muhtemelen Normal moddasın ve direkt yazmaya çalışıyorsun. Önce i tuşuna bas, Insert moda geç.

“Vim’den çıkış yapamıyorum”

  • :q kaydedilmemiş değişiklik yoksa çıkar.
  • :q! kaydedilmemiş değişiklikleri atarak çıkar.
  • :wq ya da :x kaydedip çıkar.
  • :wqa açık tüm buffer ve pencereleri tek seferde kaydedip çıkar.

“E37: No write since last change” hatası Vim, değiştirilmiş bir dosyayı kapatmayı reddediyor. Ya önce :w ile kaydet ya da ! ekleyerek işlemi zorla, örneğin :q!.

“E45: ‘readonly’ option is set” hatası Vim’in salt okunur işaretlediği bir dosyayı düzenliyorsun, genelde dosya izinlerinden kaynaklanır. :w! ile yazmayı zorlayabilirsin, gerçekten izin sorunuysa Vim dışında sudo gerekebilir, bazı kurulumlarda editörden çıkmadan :w !sudo tee % yükseltilmiş yetkiyle yazmanı sağlar.

Yapıştırılan metin girintisini kaybediyor Bu, Vim dışından kod yapıştırırken karşılaşılan klasik merdiven sorunu. Yapıştırmadan önce :set paste çalıştır, yapıştır, ardından :set nopaste ile geri al. Birçok güncel kurulum bunu otomatik hallediyor ama manuel çözümü bilmekte fayda var.

Arama vurguları gitmiyor :noh yazınca arama vurgulama özelliğini kapatmadan, sadece o anki vurgulanmış eşleşmeleri temizler.

Yanlışlıkla bir makronun üzerine yazdım Makrolar register’larda tutulur, yani farkında olmadan tekrar q‘ya kayıt başlatırsan muhtemelen öncekinin üzerine yazmış olursun. Register’ların geri alma geçmişi yok, o yüzden önemli makroları kullanılmayan harflere kaydetmek ve kayda başlamadan önce :registers ile kontrol etmek mantıklı.

Büyük dosyalarda Vim yavaşlıyor Söz dizimi renklendirme ve bazı eklentiler çok büyük dosyalarda yavaşlığa neden olabiliyor. :syntax off ile geçici kapat, ya da vim -u NONE ile dosyayı ayarlarını hiç yüklemeden aç ve sorunun bir eklentiden gelip gelmediğini gör.

11. Alışkanlık Nasıl Oturuyor

Komut listesi okumak onu otomatik hale getirmiyor, gerçek işte kullanmak getiriyor. Öğrenme sürecini hızlandıran birkaç pratik alışkanlık:

  • .vimrc dosyanda ok tuşlarını bir hafta kapat. İlk başta yapay hissettiriyor ama h j k l kullanımını kademeli alışkanlıktan çok daha hızlı yerleştiriyor.
  • . komutunu sürekli kullan. Aynı düzenlemeyi elle iki kez yaptığını fark edersen dur, hangi tek komutun bunu . ile yapabileceğini düşün.
  • Metin nesnelerini uydurma örnekler yerine gerçek kod üzerinde dene. ci(, da", dit ancak zaten çözmekte olduğun gerçek bir işte kullanınca parmaklarına yerleşiyor.
  • .vimrc dosyanı başta küçük tut. Tamamen anladığın on satırlık bir ayar dosyası, başkasının dotfiles deposundan kopyaladığın beş yüz satırlık bir dosyadan çok daha değerli.

Hızlı Referans Tablosu

KategoriKomutİşlev
Modi / EscInsert moda gir / Normal moda dön
Hareketw b eKelime ileri, geri, sona
Hareketgg GDosya başı / sonu
Düzenlemedd yy pSatır sil, satır kopyala, yapıştır
Düzenlemeciw di(İç kelimeyi değiştir, parantez içini sil
Arama:%s/eski/yeni/gTüm dosyada değiştir
Register"ayy "apa register’ıyla kopyala/yapıştır
Makroqq ... q @qMakro kaydet ve oynat
Pencere:vsplit Ctrl+w wPencere böl, odak değiştir
Çıkış:wq :q!Kaydedip çık / kaydetmeden çık

Vim’de ezber değil, tekrar işe yarıyor. Bu yazıdaki her şeyi bir anda öğrenmen gerekmiyor. Bir kategori seç, bir hafta boyunca bilinçli şekilde kullan, bir sonrakine ancak birincisi elinde otomatikleştiğinde geç. Zaman içinde tuş kombinasyonlarını düşünmeden kullandığını fark edeceksin.

Web ve mobil teknolojilere ilgi duyuyorum. Yaklaşık 14 yıldır web geliştirme ve internet reklamcılığı üzerinde çalışıyorum. Web yazılım teknolojileri ve yönetimi konusunda uzmanım. Birçok şirkete teknoloji ve reklamcılık danışmanlığı verdim. Hâlâ bazılarına destek vermeye devam ediyorum. Kendi projelerimle ilgili bazı çalışmalarım var. Çoğu içerik üreticiliği ile ilgili. Projelerimin hepsi Gündüz Medya markası altında toplanmıştır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir