Archlinux Serüveni 3 : Vim

5 dakikalık okuma

Vim Coding

Artık bir Linux kullanıcısı olduğuma göre geleneksel editör alışkanlıklarımı da değiştirmenin vakti geldi. Tabii burada sadece kullanım alışkanlıklarından da öte kas alışkanlıkları da devreye giriyor. Çünkü geleneksel editörlerde bolca fare ve yön tuşları kullanımı vardı fakat geçiş yaptığım Vim editöründe, tamamen klavye kullanımı söz konusu. Dolayısıyla bazen yön tuşlarına giden elimi ulaşmadan geri çevirmek gibi kas alışkanlıklarıyla karşı karşıya kalıyorum. Bunu sağlak birinin sol elle yazı yazma çabasına benzetebiliriz.  Bu bölümde Vim editöründen, kullanmakta zorlandığım noktalardan ve son olarak bu zorlukları kolaylaştırma çabamdan bahsedeceğim.

Yön Tuşları

Bu editörle ilgili okuduğum her yazıda en önce değinilen konulardan biri normal modda yön tuşları yerine aynı işi yapan h, j, k, l tuşlarının kullanılmasıydı. Vim öğrenmek için geliştirilen iki boyutlu oyunlarda bile oyun karakterini yönlendirmek için bu tuşların kullanımına izin veriliyordu. Hatta bir blogda, yazar Vim kullanıcılarının sıkça yön tuşlarını kullandığından ve bunun kötü bir alışkanlık olduğundan bahsetmiş. Bunun üzerine yazısında yön tuşlarının pasifize edilmesi ile ilgili şöyle bir konfigürasyon paylaşmış.

1nnoremap <Left> :echo "won't happen! Use the h key"<cr>
2nnoremap <Right> :echo "won't happen! Use the l key"<cr>
3nnoremap <Up> :echo "won't happen! Use the k key"<cr>
4nnoremap <Down> :echo "won't happen! Use the j key"<cr>

Bu konfigürasyonla, yön tuşlarına bastığınızda, bastığınız tuş yerine h, j, k, l tuşlarından uygun olanını kullanmanız konusunda uyarılıyorsunuz. Ve tabii yön tuşları işlevselliğini kaybediyor. Mecburen istenilen tuşları kullanmak zorunda kalıyorsunuz. Vim Keys

Seç & Kopyala & Yapıştır

Heralde en çok zorlandığım meselelerden biri budur. Windows’ta çok rahattı, Ctrl+c ardından Ctrl+v. Ancak Vim’de işler sandığımdan biraz farklı çıktı. Bir kere öyle basit kopyala yapıştır mantığı yok.

Aynı dosyada kopyala yapıştır gayet kolay. Visual moda girmek için v, ardından kopyalamak istenilen yeri seçiyorsunuz navigasyon tuşlarıyla, y ile kopyalıyorsunuz ve yine aynı dosyada yapıştıracağınız yere gelip p ile yapıştırıyorsunuz.

Bunun da aslında detayları var. Windows’ta sadece bir adet Clipboard var. Ama burada birden fazla. Bunlara, anladığım kadarıyla register deniliyor. Yani birden fazla içeriği hafızada tutarak istediğinizi clipboard’dan çekip yapıştırabilirsiniz. Yukarıda bahsettiğim kopyalama operatörü y “unnamed” adlı register’a kayıt işlemini gerçekleştiriyor. p de unnamed adlı register içeriğini yapıştırıyor [4].

İşletim sisteminden, vim editöre kopyalama yapmak yukarıda bahsettiğim durumdan farklı. Zaten asıl burada zorlanmıştım. Tarayıcıdan bir cümle kopyalıyordum, ancak Vim ‘e bir türlü yapıştıramıyordum. p‘ye bastığımda Vim’de en son kopyaladığım içerik yapışıyordu yine. Zaten register kavramını öğrendikten sonra da nedenini anlamıştım. Amacıma ulaşmak için işletim sisteminin register ‘ine erişmem gerekiyordu. Peki nasıl?

Uzun süre araştırdım ve sorun düşündüğümden köklü çıktı. Vim’i kurduğumda xterm_clipboard adlı özelliği varsayılan olarak gelmediği için işletim sisteminin clipboard’ına erişemiyordum. Öyle eklenti gibi de kurulmuyordu bu özellik. Çözüm, GVim kurmaktı. (Özelliğin olup olmadığını vim –version komutu ile öğrendim. Çıktıda yer alan xterm_clipboard ‘un sol tarafında “-” (eksi) varsa bu özellik mevcut değil demektir.)

GVim’i kurdum ve özellik de beraberinde gelmiş oldu. Aşağıdaki resimde de görüldüğü gibi…

Clipboard

Sırada bu özelliği kullanmak vardı. Archlinux Wiki’de bunun için ayrıca bir altbaşlık yer alıyor [5]. Başlık altında yazılanları bu satırı yazarken tekrar okudum. Okurken bir şeyi atladığımı farketmişim. Şuana kadar sistem clipboard’ına erişerek içeriği yapıştırmak için hep “+p kombinasyonunu kullandım. Çok yavaşlatıyordu beni. Ama şuandan itibaren aşağıdaki atladığım konfigürasyonla yalnızca p harfini kullanarak işletim sisteminin clipboard’ından yapıştırma işlemini, y harfini kullanarak işletim sisteminin clipboard’ına yazma işlemini gerçekleştirebiliyorum.

1set clipboard=unnamedplus

Dosya Gezgini – NerdTree

Vim ilk kurulduğunda, varsayılan dosya gezgini olarak Netrw geliyor. Ancak birçok kullanıcı, daha kolay ve işlevsel olduğunu düşündüğü için Netrw yerine NerdTree eklentisini kullanıyorlar. Ben de daha kolay olduğu düşüncesindeyim açıkçası çünkü Netrw’yi kullanmayı denedim ve biraz zorlandım. Bir de NerdTree deneyeyim diyerek kullanmaya başladım.

Benim en temel ihtiyacım, proje gezgininin editörün sol tarafında küçük bir pencerede açılması ve sağ taraftada istediğim dosyanın içeriğinin görüntülenmesiydi. Dosya gezgininde rahatça gezip dosya içeriklerini rahatça değiştirmek istiyordum en basit haliyle. Birkaç kaynaktan nasıl kullanacağımı öğrendim.

Mesela dosya gezgininin açılıp kapanmasını bir kısayola (Ctrl+n) bağlamıştı yazarın biri [2]. Bu kısayolu gerçekten çok kullanıyorum. Dosya içeriğine odaklanacağım zaman dosya gezginini kapatıp sadece içeriğe odaklanabiliyorum. Bu konfigürasyon için gereken satırı da buraya bırakayım:

1nmap <C-n> :NERDTreeToggle<CR>

Ayrıca, NerdTree dosya/dizin ekleme, silme, isim değiştirme gibi basit işlemleri de gerçekleştirebilmemi sağlıyor. Nerdtree

Otomatik Tamamlama – YouCompleteMe

Bazı diller için geliştirilmiş IDE’lerde geliştiricinin işini kolaylaştıracak fonksiyonel işlevler bir arada bulunurlar. Bunlardan biri de otomatik tamamlamadır. Python betik dili ile yazmakta olduğum projemi Windows ‘ta PyCharm kullanarak kodluyordum. Kullanışlı bir IDE’ydi. Otomatik tamamlama işlevi yazım hızımı arttırıyordu. Ancak bu işi de Vim’e aktarma zamanı gelmişti.

Yine ufak bir araştırma ile YouCompleteMe adlı eklenti ile karşılaştım. Python yanında birçok dili de destekliyordu [3]. Kurulumu diğer eklentilere göre daha zordu. Manuel derleme işlemleri yapma gereksinimi vardı. Neticede gerekli adımları uygulayarak kurulumu gerçekleştirip kullanmaya başladım ve gayet memnunum.

Dile Göre Renklendirme – Syntax Highlighting

Herhangi bir dille yazılmış kodu, renksiz düz yazı gibi okumak ya da o şekilde üzerinde çalışma yapmak, bazıları gibi benim de hoşuma gitmez. Bu yüzden hemen hemen tüm IDE’lerde, kod, diline göre renklendirilerek daha okunaklı hale getirilir.

Vim’de bu özellik gömülü olarak kurulumda gelir. Sadece özelliği aktif hale getirmek gerekir. Aşağıdaki tek satır bunun için yeterlidir:

1syntax on

Arama ve Vurgulama (Highlighting)

Yine geliştiricilerin sıkça kullandığı operasyonlardan biri de arama işlemidir. Vim’de bir kelimeyi aramak için :/ kullanılır. Aynı ifadenin geçtiği sonraki konuma gitmek için n harfi, önceki konuma gitmek için N kullanılır. Buraya değinmemin nedeni varsayılan ayarlarda vurgulamanın olmaması. Yani bir ifade aradığımda renklendirme olmadan imlecin konumu görmek bir hayli zor. Bunun önüne geçmek için aşağıdaki konfigürasyonu ekledim:

1set hlsearch

Burada karşılaştığım problemlerden biri de son aradığım ifadelerin vurgulu şekilde kalmasıydı. Bunu iptal etmek için :noh kullanılıyor. Bu da sık kullanılanlarım arasında.

VIM Esprileri

Görsel ararken VIM ile ilgili onlarca espri ile karşılaştım. Genelde VIM editöreden çıkamama ile ilgili görseller revaçta. İki tanesi ile buraları biraz süsleyelim.

Espri1

Bu da esprilerin ne denli çok olduğuna dair bir görsel:

Espri2

Sonuç

Bu bölümde en basit haliyle Vim ‘i ilk kullanmaya başladığım zamanlardaki problemlerden bahsetmiş oldum. Elbette sadece bunlar değildi karşılaştığım problemler. Yazmayı unuttuklarım veya yazmak için ertelediklerim de var. Yıllar sonra bu blog kalırsa, dönüp bakınca neler hissedeceğimi merak ediyorum açıkçası.

Dipnot: İlerleyen zamanlarda “Bir Python IDE’si olarak Vim” başlıklı bir yazı da yazmak istiyorum. Bu isteğim burada dursun.

Kaynaklar

  1. https://kgrz.io/getting-started-with-using-vim.html
  2. http://witkowskibartosz.com/blog/how_to_use_nerdtree.html#.WznEE-FfhhE
  3. https://valloric.github.io/YouCompleteMe/
  4. https://www.brianstorti.com/vim-registers/
  5. https://wiki.archlinux.org/index.php/vim#Clipboard
comments powered by Disqus