Hâlâ Emacs kullanan var mı?
(jmmv.dev)- 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.eliç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ı belirlerinit.el: etkinleştirilecek Doom’a özgü modülleri seçerpackages.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
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
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
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
$THINGyapmak isterken bunaltıcı olabiliyor. Bu yüzden yönlendirmeli bir öğrenme yolu olarak Mastering Emacs aldımVarsayı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.
hjklher klavyede aynı yerde amaCtrlgibi tuşlar öyle değilevil 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
En iyisi kendi kurulumunuzu yapmak ama bu çok iş; Doom gibi projeler ise yeni kullanıcı girişini gerçekten kolaylaştırıyor
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
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 (:
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 tutuyorumBu 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
M-x high-fiveBenim 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
headkomutunu bile bilmiyorlarYıllardır X/GUI ile kullanıyordum, az önce
-nw'ye geçtimPgtk sürümünü yalnızca sunum yaparken kullanıyorum