1 puan yazan GN⁺ 7 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • 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 .vimrc kopyalanıyor ama j tuş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, dap paragrafı 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

 
GN⁺ 7 시간 전
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

    • Benzer bir deneyim. Yıllarca vim ve emacs kullandım ve vim’i daha çok tercih ettim ama elisp epey iyi bir programlama diliyken vimscript’in o kadar iyi olmamasını hep kıskanmıştım
      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 yoktu
    Hatta bazıları yön tuşlarını bile devre dışı bırakmıştı
    Ondan önce terminal düzenleyici deneyimim üniversitede pico kullanmaktan ibaretti; normalde ise o dönemde popüler olan GUI düzenleyicileri kullanıyordum
    Neyse 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

    • Yazının ana fikri “Neovim’i neden seviyorum”, “neden kullanmalısınız” değil
      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
    • vi modu ve gezinme komutlarını neredeyse her yerde kullanıyorum ama vi, vim, neovim ve emacs’in viper’ını yalnızca ara sıra kullanıyorum
      Çü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