Günümün büyük kısmı iTerm2 içinde geçiyor. Fare ile klavye arasında sürekli gidip gelmek verimliliği düşürüyor, bu yüzden bir süredir terminal tabanlı bir iş akışına yöneldim. Vim ile başladım: hjkl, dd, ciw, visual mode gibi temel hareketleri öğrendim. Sonrasında Neovim’e geçtim ve bu yazıda hem sebeplerini hem kurulum sürecimi anlatıyorum.
Vim ile Neovim arasındaki fark
Neovim, Vim’in rakibi değil, forkudur. 2014’te başladı ve amacı Vim’in geliştirme ve bakım sürecindeki tıkanıklıkları çözmekti. Vim’in kod tabanı eski, scripting dili Vimscript sınırlı ve modern özellikler (asenkron işlemler gibi) eklemek uzun sürüyordu.
Neovim, Vim’in modal editing yapısını ve klavye kısayollarını olduğu gibi korudu. Vim hareketlerini bilen biri için Neovim’e geçiş sıfır öğrenme maliyeti gerektiriyor. Değişen kısım, editörün altyapısı.
Neovim’in öne çıkan özellikleri
Lua desteği. Neovim, yapılandırma ve eklenti geliştirme için Vimscript yerine Lua kullanıyor. Lua, hızlı, iyi dokümante edilmiş ve genel amaçlı bir dil. Bu tercih, son yıllarda Neovim eklenti ekosisteminin hızla büyümesinin temel sebebi. Eklenti geliştiricileri Vimscript yerine Lua yazmayı tercih ediyor.
Yerleşik LSP desteği. Language Server Protocol (LSP), VS Code gibi editörlerdeki otomatik tamamlama, satır içi hata gösterimi ve “tanımına git” gibi özellikleri sağlayan protokol. Vim’de bu özellik için ağır eklentiler kurmak gerekiyordu. Neovim, LSP istemcisini editöre gömülü olarak sunuyor. Bir dil sunucusunu (TypeScript, Python vb.) bağlayınca terminalden çıkmadan IDE seviyesinde bir deneyim elde ediliyor.
Asenkron mimari. Neovim, eklentilerin editörü kilitlemeden çalışabilmesi için baştan asenkron olarak tasarlandı. Vim’e asenkron iş kontrolü sonradan eklendi ve eski mimarinin üzerine oturtuldu. Neovim’de bu, tasarımın temel bir parçası.
Dahili terminal. İki editörde de dahili terminal var, ancak Neovim’inki daha stabil ve iş akışının doğal bir parçası olarak kullanılıyor.
Daha aktif geliştirme. Vim’in geliştirme hızı son yıllarda yavaşladı. Neovim’in topluluğu, eklenti sayısı ve sürüm sıklığı daha yüksek. Bir editör ekosistemine zaman yatırmadan önce bu, dikkate değer bir kriter.
Bu, Vim’in kullanışsız olduğu anlamına gelmiyor. Sunucularda hâlâ standart olarak kurulu geliyor ve saf Vim kısayollarını bilmek, minimal bir ortamda çalışmak zorunda kaldığında işe yarayan bir beceri. Ancak günlük kullanım için Neovim, aynı temel üzerine daha modern bir altyapı sunuyor.
Kurulum
Config’i sıfırdan yazmak yerine LazyVim’i temel aldım. LazyVim, kutudan çıktığı gibi çalışan, IDE benzeri bir başlangıç config’i: fuzzy dosya arama, proje genelinde arama, dosya gezgini, git entegrasyonu, yaygın diller için hazır LSP kurulumu ve makul varsayılan ayarlar içeriyor.
Kurulum için gereken ek bileşenler:
- ripgrep ve fd: LazyVim’in arama ve dosya bulma özellikleri bu araçları arka planda kullanıyor.
- Nerd Font (Hack Nerd Font kullandım): dosya tipi ikonları ve arayüz sembollerinin doğru render edilmesi için gerekli.
- EDITOR ve VISUAL değişkenleri: shell config’inde nvim olarak ayarlandığında git commit, crontab -e gibi komutlar Neovim’de açılıyor.
Bu bileşenler hazır olduktan sonra nvim ilk açıldığında LazyVim’in eklenti yöneticisi devreye giriyor ve gerekli tüm eklentileri otomatik indirip kuruyor. Kurulum birkaç dakika sürüyor ve sonucunda terminal içinde çalışan, IDE’ye yakın bir ortam elde ediliyor.
Config repo
Config’i public bir repoda tutuyorum, yeni bir makinede kurulumu tekrarlamak için ve isteyen başkalarının doğrudan kullanabilmesi için: github.com/barisgunduz/nvim-config
README dosyasında gerekli Homebrew paketleri, config’in ~/.config/nvim içine klonlanması ve varsayılan editör değişkeninin ayarlanması adım adım anlatılıyor.
Sonuç
İki haftalık kullanımın ardından geçiş kararımı doğru buluyorum. Dosyalar arasında fare kullanmadan geçiş yapmak, proje genelinde hızlı arama yapabilmek ve commit mesajlarını context değiştirmeden düzenleyebilmek, günlük iş akışında gözle görülür bir hız kazandırıyor. Terminal tabanlı bir iş akışı kullanan biri için Neovim’e geçiş, kısa vadede harcanan zamana değecek bir yatırım.