Neovim’e Yazılmış Bir Aşk Mektubu
(caio.ca)- Neovim, kod düzenlemeyi hızlı yazı yazmaktan çok; gezinme, değiştirme, silme, yeniden düzenleme ve test sonuçlarını kontrol etmenin birbirini izlediği tekrar eden bir döngü olarak ele almayı sağlar
- Vim’in düzenleme grameri,
ci",dap,., makrolar ve text object’ler gibi anlam temelli işlemleri birleştirerek tekrar eden düzenlemelerdeki sürtünmeyi azaltır - Neovim, gezgin, terminal veya Git panelini dayatmaz; buffer merkezli yapıda Telescope, Fugitive, LSP gibi araçları kullanıcının seçmesine izin verir
- Yapılandırma, Git’te tutulan dosyalar olarak sahip olunabilir ve shell, tmux, ripgrep, git ve language server’larla birlikte çalışan sistemin bir parçası olarak kalır
- Lua, yerleşik LSP, Treesitter ve Lazy.nvim ile modernleşmiş olsa da, asıl değeri öğrenilen hareketlerin zamanla birikmesi ve workflow’un doğrudan evrilmesidir
Vim’den Neovim’a uzanan çalışma hissi
- Vim kullanımı 2011’de başladı; ilk zamanlarda
.vimrckopyalanıyor amajtuşunun neden karakter yazmak yerine imleci hareket ettirdiği bile anlaşılmıyordu - İlk hafta zordu, ilk ay yabancı hissettirdi; ama Vim’in modeli tanıdık hale geldikten sonra diğer editörler, kod ile kullanıcı arasında bir tampon katman varmış gibi hissettirmeye başladı
- VS Code, JetBrains IDE’leri, Sublime, Atom, Zed gibi birçok editör kullanıldı; JetBrains araçları son derece güçlü, VS Code ise neredeyse herkes için yeterince iyi ve kolay genişletilebilir olduğu için başarılı
- Yine de Neovim’in kullanılmaya devam edilme nedeni, çalışma biçimine uyum sağlaması ve kod düzenlemenin tekrar eden döngüsünü doğrudan desteklemesi
Düzenlemeyi kısayollarla değil, bir dille ele alma biçimi
- Kod düzenlemek, hızlı yazı yazmaktan çok gezinme, küçük değişiklikler yapma, yanlış soyutlamaları silme, fonksiyonları yeniden düzenleme, dosyaları taşıma ve testlerle tanıları kontrol etme gibi işlerin tekrarına benzer
- Çoğu editör metni bir belge, klavyeyi de bir giriş aygıtı olarak görür; ama Vim, düzenlemeyi bir gramer gibi ele alır
ci"tırnak içini değiştirir,dapparagrafı siler,.ise son değişikliği tekrarlar- Makrolar küçük bir rutini bir kez öğretip tüm dosya boyunca tekrar uygulatır; text object’ler de işlemleri karakter sayısına göre değil, anlam birimlerine göre uygulamayı sağlar
- Vim grameri ele oturduğunda, kodu fareyle sürükleme, yan çubuklara tıklama ya da her gün onlarca kez yapılan işler için komut paletini açma ihtiyacı azalır
- Sık yapılan işler küçük ve doğrudan hareketlere dönüşür, editörün gürültüsü de azalır
Workflow dayatmayan Neovim
- GUI merkezli editörler, gezginin, terminalin, Git panelinin ve debugger’ın yeri ile biçimi konusunda sabit bir bakış açısına sahip olma eğilimindedir; zamanla editör bir kokpite dönüşür
- Neovim buffer’dan başlar ve etrafında ne olacağına kullanıcı karar verir
- Dosya ağacı gerekiyorsa eklenebilir; bulanık arama için Telescope veya fzf-lua gibi uygun araçlar seçilebilir
- Git entegrasyonu için Fugitive kullanılabilir; LSP, diagnostics, formatting, snippets, Treesitter, test runner ve autocomplete de yavaş bir Electron dashboard’una dönüşmeden kullanılabilir
- Hız, yalnızca açılış süresi değil, bir güven meselesidir
- Tuşa basıldığında anında tepki vermelidir
- Büyük dosyalar açılırken tüm arayüz takılmamalıdır
- SSH bağlantısında, tmux ile eşli çalışmada ve küçük terminal pencerelerinde düzenleme yaparken de her gün kullanılan editör hissi korunmalıdır
- Yerel projelerde, uzak sunucularda, hızlı yapılandırma değişikliklerinde, büyük Rails uygulamalarında, küçük shell script’lerinde ve Markdown yazarken aynı gezinme, aynı komutlar, aynı kas hafızası kullanılabilir
- Bu tutarlılık, tüm kariyer boyunca birikir
Sahip olunabilir yapılandırma ve sistemin parçası olarak kalan araç
- Neovim yapılandırması Git’te duran dosyalardır; bu yüzden doğrudan okunabilir, bozulabilir ve gereksiz bir eklenti fark edildiğinde yarısı silinebilir
- Gizemli ayar veritabanlarına, yarım yamalak anlaşılan senkronizasyon hesabı durumlarına ya da birkaç sürüm önceki bir onay kutusu değişikliği yüzünden arka planda tuhaf çalışan uzantılara bağımlı değildir
- Birçok modern editör her şeyin olduğu yer olmaya çalışırken, Neovim daha büyük bir sistemin keskin bir parçası olarak kalmaktan memnundur
- Shell’in yerini almaya çalışmaz; tmux, ripgrep, git, language server, formatter, linter ve test runner ile birlikte çalışır
- Tüm masayı sahiplenmek zorunda olmaması da Neovim’in uzun ömürlü olmasının nedenlerinden biridir
- 2011’den bu yana birçok editör, eklenti ekosistemi, tema, marketplace ve AI paneli ortaya çıktı; ama Vim zaten eski bir araçtı ve Neovim, insanların onda önemli bulduğu şeyleri atmadan gerekli yerleri modernleştirdi
Modernleşme ve uzun süreli öğrenme getirisi
- Lua, yapılandırmayı daha iyi hale getirdi ve eklenti ekosistemini de büyük ölçüde iyileştirdi
- Yerleşik LSP, IDE özelliklerini editöre taşırken şişkin bir his yaratmaz
- Treesitter, sözdizimi vurgusunu ve kod farkındalığını modern hale getirdi; Lazy.nvim ise eklenti yönetimini hızlı ve basit yaptı
- Neovim’in temel çekiciliği, öğrenilen şeylerin zaman geçse de işe yaramaya devam etmesidir
- Tek bir motion öğrenildiğinde bile sürekli fayda sağlar
- Bir makro yazıldığında sıkıcı düzenlemeler ortadan kalkar
- Text object’ler keşfedildiğinde can sıkıcı refactor işlemleri kolaylaşır
- Tek bir komut ayarlandığında elin bir parçası haline gelir
- Bir editör, şirket yeni bir yan çubuk çıkardığı için değil, kullanıcı onu daha iyi kullandığı için daha iyi hale gelir
- Verimlilik, yalnızca “burada 5 saniye kazandım” diye ölçülemez; asıl fark, binlerce küçük düzenlemede sürtünmenin azalmasıdır
- Kod, testler, git diff ve arama sonuçları arasında gidip gelirken sanki başka bir odaya geçmiş gibi hissetmeden probleme odaklanılabilir
- Neovim, yüksek programlanabilirliği sayesinde varsayılanları kabullenmek yerine workflow’u doğrudan şekillendirmeyi sağlar
- Rahatsız edici bir durum iki kez tekrar ederse, çoğu zaman bir mapping, komut, küçük bir Lua fonksiyonu, daha iyi bir eklenti ya da eklentiyi kaldırmakla düzeltilebilir
- Yapılandırma, gerçek çalışma biçimine uyacak şekilde evrilir; istenen değişiklik net olduğunda düşünce ile düzenleme arasına çok az şey girer
- 15 yıl boyunca diller, framework’ler, makine performansı ve sektör trendleri değişti; ama Vim ve Neovim, en iyi işlerin yapıldığı merkez editör olmaya devam etti
1 yorum
Lobste.rs görüşleri
12-14 yıl önce vim kullanmaya başlamamın nedeni, kodu tam önümde gösteren hafif bir düzenleyiciye ihtiyaç duymamdı
Fareyi bırakıp öğrenmeye başladım; sonradan Mitchell Hashimoto’nun da vim’i benzer şekilde öğrendiğini görünce hoşuma gitti
neovim’i TJ DeVries (https://www.youtube.com/@teej_dv) ve onun YouTube kanalı sayesinde tanıdım; orada onun neovim, telescope ve başka projeleri hacklediğini izledim
Lua’ya geçiş doğal hissettirdi ve zaten sevdiğim küçük bir dil olduğu için hoşuma gitti
İlk kullandığım eklentiler treesitter ve telescope’tu; şimdi de birkaç küçük eklentiyle birlikte neovim kullanıyorum
neovim bende hiç bozulmadı, sadece çalışıyor. LLM eklentileri kullanmıyorum; o ekosistemin düzenleyicinin dışında da kalabileceğini düşünüyorum
Ekibin sadece hafif ve odaklı bir kod düzenleyici sunmaya devam etmesini umuyorum
Bu yüzden neovim’in Lua eklemesi bana çok çekici gelmişti
Yaklaşık 20 yıl önce, sadece üretkenlikten bağımsız olarak günlük hayatı keyifli kılan unsurların neler olduğunu düşünmüştüm
Listenin en üstünde linux ve vim vardı
Ne iş yaparsam yapayım, hangi teknoloji yığınını kullanırsam kullanayım, bu ikisi ergonomik, tanıdık ve rahat bir çalışma ortamı sağlıyordu
2009’da mülakata girdiğim dönemde
:wq’nun ötesinde vim öğrenmeye başladım. Çünkü çalışanların hepsi vim kullanıyordu ve onlarla birlikte çalışmanın başka yolu yoktuHatta bazıları yön tuşlarını bile devre dışı bırakmıştı
Ondan önce terminal düzenleyici deneyimim üniversitede
picokullanmaktan ibaretti; normalde ise o dönemde popüler olan GUI düzenleyicileri kullanıyordumNeyse ki işe alındım ve o zamandan beri vim kullanıyorum
Son zamanlarda vim tarzı düşünmenin yazılım hayatımın başka alanlarına da sızdığını fark ettim
Sanırım başlangıç noktası macOS’ta Hammerspoon ile pencere yönetimi için alt haritalar kullanan sanal bir klavye yapmamdı; geçen yılın sonunda Arch Linux denememle birlikte tiling pencere yönetimi çok kolaylaştı
Bir süre önce neovim’e geçtim ve gerçekten harika olduğunu düşünüyorum
Editör şakalarının ve tartışmalarının çok olduğunun farkındayım ama birkaç istisna dışında, kod yazarak çalışan insanların vim, emacs ya da benzeri bir düzenleyici kullanmamasını hâlâ anlamakta zorlanıyorum
Hangi meslek olursa olsun işe en uygun aracı seçmek önemlidir ve düzenlemeyi bir dil gibi ele almak yazılımda büyük bir avantajdır
Yukarıdaki “anlamakta zorlanıyorum” kısmına gelirsek, VS Code gibi düzenleyicilerin davranışları, kısayolları ve eklentileri de çok kullanışlı
VS Code belgelerine gerçekten bakmaya değer; pratikte çok iş yapıyor
Ayrıca benim de dahil olduğum bazı insanlar için fareyle imleci buffer içindeki rastgele bir konuma götürmek ve rastgele bir aralık seçmek basit ve yeterince hızlı
KISS doğru yaklaşım
Çünkü çoğu zaman başka editörler o iş için daha iyi araçlar oluyor
Bugünlerde en sık kullandığım Python için PyCharm’ın bunlardan daha iyi bir araç olduğunu düşünüyorum
Neyse ki kas hafızasını korumamı sağlayan çok iyi bir IDEAVim eklentisi var
Mac’te kullanınca sistem kısayolları vi kısayollarıyla çakışmıyor; bu da duruma göre istediğimi seçebilmem açısından avantaj
C++ kullanırken CLion’ın daha iyi bir araç olduğunu düşünüyorum ama orada da IDEAVim çalışıyor
Kategorisi belirsiz ufak tefek işler için sık sık zed kullanıyorum; onun vim emülasyonu da oldukça iyi
Uzak sistemlere bağlanırken iyi bir terminal düzenleyicisinin olması kesinlikle güzel ama tam bir GUI kullanabildiğimde terminal düzenleyicilerini pek sevmiyorum
Modal düzenlemeyi seviyorum ama kas hafızamdan vazgeçmem gerekmiyorsa GUI düzenleyici kullanmak için de gayet yeterli nedenler var
VS Code, varsayılan haliyle bile birçok kullanım için yeterince iyi
Zaten ctrl-p ile dosya arama, bölünmüş pencere, sözdizimi vurgulama ve popüler dillere destek sunuyor
neovim’in de en azından varsayılan olarak ctrl-p benzeri bir şey sunmasını ve güvenlik kaygılarıyla yapılandırma eşiğini düşüren, vim tarzı editörlerin Linux Mint’i gibi bir şeye dönüşmesini isterdim
SSH ile bağlandığın bir makinede tmux oturumunda eşli programlama yaparken ya da küçük bir terminal penceresinde bir sorunu düzeltirken, her gün kullandığın editör hissinin aynısını istemeni anlıyorum
SSH üzerinden screen/vim ile para kazanarak çok kod yazdım; Slack’in her an çalabildiği sürekli dikkat dağıtma düzeni ortaya çıkmadan önce bu gerçekten çok üretkendi
Visual Studio ya da Jetbrains IDE’lerindeki CLion, Rider gibi görsel hata ayıklayıcılar, hiçbir vim tabanlı editörde iyi bir alternatifini bulamadığım tek şeydi
cgdb gibi araçlardan daha erişilebilir bir güç sunuyorlar
Hız sadece açılış süresi meselesi değil ve neovim bu konuda iyi ama varsayılan neovim’den çıkış, vim’den gözle görülür biçimde daha yavaş
Çok uzun değil ama benim ortamımda yaklaşık 1 saniye sürüyor
vim modelini seviyorum. Modal düzenleme bunun sadece küçük bir kısmı; helix ya da sıradan IDE’lere kıyasla vim’de daha değerli bulduğum şey, adım adım öğrenilebilmesi
Önce tuş atamalarını ve seçenek ayarlarını anlıyorsun; sonra Windows’ta bir şey çalışmazsa yapılandırmaya koşullu ifadeler ekliyorsun; ardından autocmd ve fonksiyonlar yazıyor, daha önce öğrendiklerini küçük eklentilere kadar genişletiyorsun
Ama bu, vim ya da neovim’i içtenlikle sevdiğim anlamına gelmiyor
vim’de onlarca yıldır aynı tuhaf hatalar düzeltilmeden duruyor; neovim birçok hatayı düzeltmiş olsa da başka hataları da beraberinde getirdi
neovim’in en büyük günahı, neredeyse her güncellemede Lua API’sini bozması
Her çalıştırışımda kullanım dışı bırakma uyarıları görmekten ve yapmak istediğim işe başlamadan önce yapılandırmamı düzeltmek zorunda kalmaktan yoruldum
Yeni özelliklerin bir kısmı yalnızca Lua’ya özel olmasaydı yine daha katlanılır olurdu
Aksi halde sadece vimscript kullanmaya devam eder ve 20 yılı aşkın süredir korunan uyumluluktan memnun kalabilirdim