1 puan yazan GN⁺ 4 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • 1997’de Linux’a giriş yaptıktan sonra Vim ile Emacs arasında gidip gelen deneyim, 2015’te VSCode ve IntelliJ’ye geçişle devam etti; ardından 2022’de Snowflake’in uzak Linux VM ortamında yeniden Doom Emacs’e dönüldü
  • VSCode; modern arayüzü, küçük ölçeği, JSON tabanlı yapılandırması ve Go ile Rust için LSP entegrasyonu sayesinde öğrenmeyi ve geliştirmeyi kolaylaştırdı; Java geliştirmede ise IntelliJ daha gerçekçi bir seçenekti
  • Snowflake’in eski Linux VM’lerinde odak noktası shell script ve Bazel build file yazımıydı; uzak grafik ortamlar yerine SSH tabanlı çalışma daha uygun olduğundan Emacs yeniden gerekli hale geldi
  • Doom Emacs; makul varsayılanları, dil entegrasyonu, Vim tarzı tuş atamaları, space tabanlı açılır menüler ve sade yapılandırma dosyası yapısı sayesinde Emacs’i bir IDE gibi hissettiriyor
  • MacBook, Linux laptop, Linux cloud workstation ve FreeBSD server fark etmeksizin yalnızca shell·tmux·Emacs ile aynı geliştirme ortamını koruyabilmek, Emacs kullanmayı sürdürmenin temel nedeni

DOS/Windows IDE’lerinden Linux editörlerine

  • Yaklaşık 1997’de Caldera OpenLinux 1.1 ile Linux’a giriş yaptı
  • Ondan önce Borland Turbo C++ ve Visual Basic’i yoğun kullanmıştı; bu yüzden dönemin tamamlanmış hissi veren IDE’lerine alışkındı
  • Linux’a giriş için okuduğu iki kitap sayesinde Vim ve Emacs ile tanıştı; iki editör de gelişmiş seçenekler olarak tanıtılıyordu
  • Daha önce kullandığı IDE’ler daha eksiksiz görünse de, Vim ve Emacs’in temel kullanımı ile eğitimlerini ayrı ayrı öğrendi
  • Yaklaşık 2015’e kadar Vim ve Emacs arasında dönüşümlü olarak çalıştı
    • Emacs uzun kodlama oturumlarına daha uygundu
    • Vim ise pkgsrc çalışmaları gibi birçok dosya arasında hızlıca gezip düzenleme yaparken güçlüydü

VSCode ve IntelliJ’ye geçişin nedeni

  • Vim ve Emacs yeterince iş görüyordu, ancak dil entegrasyonu zayıftı; bu da daha modern editörlere ilgiyi artırdı
  • macOS’a geçince Atom ve Brackets da denendi, ancak özellik ve ayar fazlalığı nedeniyle kırılgan ve yorucu hissettirdi
  • 2015’te çıkan VSCode, en başından beri tam oturan bir araç gibi hissettirdi
    • Modern görünüyordu ve nispeten küçüktü
    • O dönem ayar editörü, ayarlar paneli yerine JSON dosyası tabanlıydı; bu da kontrol etmeyi kolaylaştırıyordu
  • Go ve Rust öğrenilmeye başlandığında, VSCode’un her dil için sunduğu LSP entegrasyonu büyük fayda sağladı
    • Kod otomatik tamamlama
    • Gerçek zamanlı hata vurgulama
    • Daha hızlı öğrenme
  • Google’da Bazel kullanan bir Java projesiyle çalışırken IntelliJ doğal seçimdi
    • Emacs ile Java geliştirmeyi denediği de oldu, ancak IntelliJ o kadar iyiydi ki pratikte gerçekçi seçenek IntelliJ’ydi
  • Microsoft’ta C++ kod tabanı ve uzak Windows makineleriyle çalışırken de VSCode ve Vim eklentisini kullanmayı sürdürdü
    • Birçok kişi uzak makinede doğrudan RDP ile çalışıyordu
    • O ise yerel masaüstünde VSCode çalıştırıp SSH ile uzak makineye bağlanmayı tercih etti

Snowflake’te Doom Emacs’e dönüşü tetikleyen şey

  • 2022’de Snowflake’e geçtikten sonra geliştirme, eski bir Linux VM içinde yapılıyordu ve günlük işlerin çoğu shell script ile Bazel build file yazmaktı
  • Bu ortamda VSCode ya da IntelliJ belirgin bir avantaj sağlamıyordu; ayrıca uzak grafik ortamların kısıtları da iticiydi, bu yüzden SSH ile yerel VM’e bağlanma modeline geri dönüldü
  • Uzun çalışma oturumları için bir editöre yeniden ihtiyaç doğdu ve seçenek Emacs oldu
  • Eskiden kullanılan init.el içinde yıllar boyunca birikmiş yüzlerce satır ayar vardı; ancak bunlar yeterince anlaşılmadığından her şeyi bırakıp sıfırdan başlamak istendi
  • Bu noktada Doom Emacs ile karşılaşıldı
    • Doom Emacs, Emacs’in baştan yapılandırılmış bir “dağıtımı”
    • Makul varsayılanlar sunuyor
    • Önceden tanımlı dil entegrasyonları sağlıyor
    • Eski Vim kullanıcılarına tanıdık bir deneyim veriyor
    • Kendini bir IDE olarak tanımlamasa da, pratikte kullanım hissi bir IDE’ye benziyor

Doom Emacs’in kullanım deneyimini nasıl değiştirdiği

  • Doom Emacs kurulduktan sonra Emacs, 2015’teki VSCode gibi yeniden “tam oturan araç” hissi vermeye başladı
  • Birçok Emacs özelliği, space tabanlı kısayolların arkasındaki etkileşimli açılır menülerle görünür hale geldiği için keşfetmesi kolaylaştı
  • Vim tarzı tuş atamalarıyla birlikte çalışırken bilekleri daha az yoran bir kısayol akışı sunuyor
  • Yapılandırma üç basit dosyaya ayrılıyor
    • config.el: theme, font gibi genel ayarları belirler
    • init.el: etkinleştirilecek Doom’a özgü modülleri seçer
    • packages.el: Doom ile birlikte gelmeyen paketleri kurar
  • Varsayılanlar makul ve ince ayar yapılabilecek noktalar için yeterince açıklama yorumu bulunuyor
  • LSP’nin gelişmesi ve tree-sitter gibi modern özellikler sayesinde Emacs artık bir IDE gibi hissettiriyor
    • Çalışılması gereken dillerin çoğunda düzgün dil entegrasyonu sağlanıyor

Her yerde aynı geliştirme ortamını kullanmanın değeri

  • En güçlü özellik, hangi makinede çalışılırsa çalışılsın aynı geliştirme ortamının elde edilebilmesi
  • Buna MacBook, Linux laptop, Linux cloud workstation ve kişisel FreeBSD server da dahil
  • Gereken tek şey shell, tmux ve Emacs
  • Farklı makinelerde çalışırken aynı ortam ve kas hafızası, üretkenlik açısından doğrudan değer sağlıyor
  • Bu ihtiyaç nedeniyle Emacs, geçmişe kıyasla daha da önemli bir araç haline geldi

Doom Emacs fazla mı şey yapıyor?

  • Doom Emacs hakkında “fazla çok şey yapıyor” eleştirileri var, ancak tam da bu yüzden kullanışlı
  • Bir gün Emacs’in kendisini daha iyi öğrenmek için yapılandırmayı sadeleştirmenin mantıklı olup olmadığı sorgulanıyor
  • Çeşitli modern üçüncü taraf modüllerin temel Emacs paketlerine girmesi de bu sorgulamayı güçlendiriyor
  • Son zamanlarda Bedrock ya da Emacs Solo gibi dağıtımları deneme isteği de var
  • Ancak geçiş için gereken aktivasyon enerjisi yüksek; üstelik bu yola girilse bile sonunda neden “raw” Emacs’e kadar gidilmediği sorusu yeniden ortaya çıkıyor

Elisp, Org mode ve Magit ile aradaki mesafe

  • Emacs’in Elisp tabanlı olmasının insanların iş akışlarını nasıl bu kadar büyük ölçüde değiştirdiği hâlâ tam olarak anlaşılmış değil
  • Emacs içinde daha fazla mantık ve iş akışı kurulabilir, ancak zaten shell script ile neredeyse her şey kolayca yapılabiliyor
  • Script yaklaşımı, “Unix is my IDE” bakış açısından daha Unix usulü hissettiriyor
  • Org mode ve Magit gibi araçların bağımsız uygulamalar değil de Emacs’in arkasına bağlı olması pek hoş gelmiyor
  • Farklı uzak makinelerde çalışmaya devam etme ihtiyacı sürdüğü sürece, Emacs önemli bir araç olmaya devam edecek

1 yorum

 
GN⁺ 4 시간 전
Lobste.rs görüşleri
  • Bu yazıyı, konu fazla komik olduğu için yazdım
    Belirli bir soru yüzünden değil; şirkette üst düzey kişilerin CLI tabanlı kodlama ajanları kullanırken komut satırı araçlarını “keşfetmesini” ve bu yeni keşfin ne kadar faydalı olduğunu göstermeye çalışmalarını izlediğim için
    Şimdiye kadar tmux bunun en tipik örneği oldu; sırada Vim ve Emacs’ın da var olduğunu fark etmelerini bekliyorum
    Bu araçlar uzun zamandır ortalıkta ve şirketin “ileri seviye 10x geliştiricilerine” sorarsanız muhtemelen kullandıklarını söyleyeceklerdir
    Buna rağmen sık sık “haha, o antika bir şey. Web’e geçelim!!11” muamelesi gördüler. Belki de o geliştiricilerin bu araçları kullanmayı sürdürmesinin bir nedeni vardı ;P

    • “Düşük kaliteli üretim balonu”nun iyi yanlarından biri, düz metnin yeniden geçerli ve önemli bir ortam haline gelmesi
      Buna CLI’ın daha yaygın hale gelmesi ve sözlü aktarılan bilginin büyük kısmının belgelenmesi de dahil. Tabii bunun için bilginin insan yapımı olması önkoşulu var
      Şu anki sıkıntılı dönem geçse de bu iyi tarafların kalmasını isterim
    • Emacs kullanıcılarının çoğu muhtemelen GUI ile kullanıyordur
      Elimde sayı yok ama ezici çoğunluk olduğunu düşünüyorum
  • Ben de daha yeni öğrenmeye başlayanlardanım
    Birkaç yıl önce Doom Emacs denemiştim ama gecikme rahatsız edecek kadar yavaştı, o yüzden vazgeçtim. Native compilation sayesinde bunun artık geçmişte kalıp kalmadığını bilmiyorum; henüz ayarsız, düz Emacs kullandığım için hissetmek zor. Nixpkgs’in 30.2 sürümünü kullanıyorum ve native compilation varsayılan olarak açık gibi görünüyor
    Emacs içinde e-posta yazmak gibi özellikler pek ilgimi çekmiyor; benim istediğim, istediğim gibi şekillendirebileceğim bir editör. İleride Lisp öğrenmek istersem onun için de kullanabilsem iyi olur; muhtemelen Janet olur. Helix’te hâlâ eklenti olmadığı için Lisp tarafında seçenek neredeyse yok. “Her şey metindir” felsefesi de hoşuma gidiyor ama pratikte bana uyup uymayacağını göreceğiz
    2026’da öğrenmek için göz korkutucu yanları da var. Onlarca yılda birikmiş örtük bilgi yüzünden bir şeyler okurken paket adları, komut adları havada uçuşuyor ve siz sadece $THING yapmak isterken bunaltıcı olabiliyor. Bu yüzden yönlendirmeli bir öğrenme yolu olarak Mastering Emacs aldım
    Varsayılan tuş atamaları da epey tuhaf. Hepsinin yeniden atanabildiğini biliyorum ama bu da ekstra iş. Üstelik ayrık ergonomik klavyemi kendim yaptım ve Vim/Helix tarzı, değiştirici tuşları ana akışta kullanmayan çalışma biçimine göre firmware’ini de ayarladım
    MacBook Pro, PC ve özel yapım klavye arasında gidip geldiğim için beynimi eritmeyecek tutarlı bir tuş düzeni bulmam gerekiyor. hjkl her klavyede aynı yerde ama Ctrl gibi tuşlar öyle değil

    • Tuş atamaları zorsa ve Vim tarafına daha alışkınsanız evil’e bakmaya değer
      evil kullandığınız için size, bunun “Emacs’ın gerçek incilini” öğrenmek istemeyen Vim mültecileri için olduğu yönünde nutuk çekilebilir ama Emacs’ın gerçek incili®, size en uygun şekilde kullanmaktır
      Emacs’ı 1998’den beri kullanıyorum ve hiç Vim hayranı olmadım. 2011 civarında bileklerimde biraz tekrarlayan zorlanma problemi çıkınca bunu azaltacak paketleri denedim; birkaç yıl god mode’u yoğun kullandım ama yine de tuhaf geliyordu
      Sonra, “olmayacağını kanıtlamak için”, hayatımda hiç Vim kullanmamışken evil’ı denedim; bir hafta içinde god mode kadar rahat kullanır hale geldim, bir ay sonra da resmi Emacs tuş atamalarını kullandığımdan daha hızlıydım
      Bu, varsayılan tuş atamalarının yanlış olduğu anlamına gelmiyor. Benim bileklerim sorunlu, dolayısıyla deneyiminiz farklı olabilir. boon ya da meow da size iyi gelebilir
      Ama evil size uyuyorsa hiç suçluluk hissetmenize gerek yok. Emacs bazen kullanıcıyı değiştirir ama çok daha büyük ölçüde Emacs, kullanıcı için değişir
    • Doom, nasıl yapılandırdığınıza göre gerçekten çok değişiyor. O taraf da zamanla sürekli iyileşiyor
      En iyisi kendi kurulumunuzu yapmak ama bu çok iş; Doom gibi projeler ise yeni kullanıcı girişini gerçekten kolaylaştırıyor
    • Varsayılan tuş atamalarının tuhaf olması, aslında Doom Emacs’ta hoşuma giden şeydi
      Eskiden varsayılan Emacs tuş atamalarını epey biliyordum ama hiçbir zaman doğal gelmedi; özellikle de keşfedilebilirliği düşüktü
      Doom Emacs neredeyse her iş için SPC önek tuşunu kullanıyor ve kısa bir duraklamada olası tamamlamaları açıklayan geçici bir menü açılıyor; bu oldukça iyi. Bilmediğiniz işlevleri bulabiliyor ve Vim’in modlu yapısıyla da çakışmıyor
      O yüzden metin düzenlemeyi Vim modunda, Emacs işlerini de SPC kombinasyonlarıyla yapmak iyi bir denge gibi geliyor
      Emacs’ın varsayılan tuş atamalarının avantajları da var. Temel metin işleme tuşlarının çoğu readline ile, hatta macOS ile ortak. macOS’taki Emacs tarzı metin yönetim tuşları VSCode’a da geçmiş ve standart pano kısayollarıyla çakışmıyor; bu yüzden macOS’ta VSCode oldukça iyiydi
      Windows ve Linux’a geçtikten sonra ise Vim eklentisi olmayan VSCode’a dayanmak neredeyse imkânsız oldu
    • Helix’ten geliyorsanız meow’a da bakabilirsiniz
      Duyduğuma göre Kakoune ve Helix benzeri özellikleri kutudan çıktığı gibi sunuyor ve daha az müdahaleci bir yaklaşımı var. İkisini de bizzat kullanmadım; bu yüzden duyduklarıma dayanarak söylüyorum
      Tavsiye edilen evil paketinde ise, tuş atamalarını fazla ele geçirmesi ve harici paketlerle iyi geçinmemesi yüzünden çok sayıda “adaptör” paketine ihtiyaç duyulması gibi bir sorun olduğunu düşünüyorum
      meow ise bir kez ayarladıktan sonra oldukça az bakım isteyen bir seçenekti
  • 33 yıldır kullanıyorum; bir editörün ya da IDE’nin yapmasını istediğim her şeyi yapıyor

  • Doom ile (n)vim arasında gidip geldikten sonra, son dönemde çoğunlukla Neovim'de karar kıldım
    Emacs kullanırken yaşadığım temel sorun, ironik biçimde bakımının acı verici olmasıydı. Doom'u yükselttiğimde paket senkronizasyonu bozuluyor ve geriye sık sık her şeyi baştan kurmak gibi nükleer bir seçenek kalıyordu
    Elbette bunu daha “acemi olmayan” bir şekilde düzeltebilirdim ama bir noktadan sonra insan sadece aracın çalışmasını istiyor. Yapacak iş varken ayarların bozulması ve editöre aşırı bağımlı bir durumda olmak katlanması zor bir şey
    Yine de org-mode'u ve Emacs'in genel gezinme tarzını özlüyorum
    VSCode, CLion gibi “modern” çözümleri her denediğimde aynı sorunları daha fazla yaşıyorum. Düzgün erişilebilirlik özellikleri yok, bu yüzden tamamen klavyeyle gezinmek yerine garip biçimde tıklamak gerekiyor ve “Vim” davranışı da gerçeğine kıyasla eksik kalıyor
    Bugünlerde Neovim kullanma nedenim, basitçe iyi çalışması. Aslında bir kodlama ajanına ayarlarımı düzeltmesini 2 dakika söyleseydim, şu anki Emacs için de aynısını söyleyebilirdim muhtemelen (:

    • Doom'un update özelliğini birkaç kez denedim ama her seferinde sorun çıktı
      Artık yükseltmek istediğimde ya da Emacs yükseltmesi yüzünden gerektiğinde rm -rf ~/.emacs.d/ ile silip Doom'u sıfırdan kuruyorum. ~/.doom.d/ dizinini sürüm kontrolünde tutuyorum
      Bu akışta sorun yaşamadım
  • Geliştirme, yazı yazma ve e-postayı bile Emacs ile yapan tuhaf biriyim; bunu yaklaşık 15 yıldır yapıyorum ama elisp öğrenmeye zaman ya da fırsat hiç bulamadım
    Ayar dosyalarını kurcalarken bile aslında ne yaptığımı pek bilmiyorum. Buna rağmen hâlâ en üretken ortamım olması, bu editörün ne kadar olağanüstü olduğunu gösteriyor :-)
    Mastering Emacs'i gerçekten okumak, itiraf etmesi utanç verici derecede uzun süredir yapılacaklar listemde duruyor

    • Ben de neredeyse aynı durumdayım. Ayarları düzeltip düzenlerken ozmozla biraz elisp öğrendim ama gerçekten bildiğim miktar o kadar az ki biraz mahcup hissediyorum
    • M-x high-five
      Benim durumumda da çok az paket kullanıyorum ve varsayılan tuş atamalarını kullanıyorum. Aslında high-five diye bir fonksiyon yok ama belki bu vesileyle sonunda elisp'e gerçekten dalarım
  • Vim'in render görüntüsünü sevmediğim ve Electron/VSCode türü şeylerden bıktığım için yaklaşık 2 yıl önce Emacs'e geçtim
    avy ve birkaç atlama eklentisine hayran kaldım ama beni elde tutan ve bugün hâlâ kod değişikliklerinde birincil araç olarak kullanmamı sağlayan şey magit oldu

  • İşte muhatap olduğum müşteri şirketlerde tüm iş modeli çok büyük CSV dosyalarını kullanmaya dayanıyor ama orada 1GB dosya içindeki veriyi nasıl açacağını ya da inceleyeceğini bilen kimse yok gibi görünüyor
    CSV başlıklarını istemek için kullanabilecekleri head komutunu bile bilmiyorlar

  • Yıllardır X/GUI ile kullanıyordum, az önce -nw'ye geçtim
    Pgtk sürümünü yalnızca sunum yaparken kullanıyorum