Zamonaviy muharrirlar bozori ikkita chetma-chetlikka boʻlinib ketdi: bir tomonda Electron asosidagi, resurs sarf qiluvchi leviatanlar (VS Code), ikkinchisida esa Lua, Vimscript yoki Elisp ekosistemalari bilan janglash kerak boʻlgan, konfiguratsiyasi murakkab terminal vositalari (Neovim, Helix, Emacs). Bu polarizatsiya orasiga e kirdi — Chez Scheme dasturlash tilida yozilgan, o'z-o'zini boshqaruvchi, Emacs ruhida lekin klon emas, minimalist konsol muharriri.
Nima uchun e — bu faqat bir muharrir emas
e ning asosiysi — u muharrir emas, balki Scheme tizimi. U R6RS kutubxonalari standartidan foydalangan holda qurilgan: minimallar yadro (core) va undan mustaqil, yuklanadigan kengaytirish modulllari. Eng muhim farq — chegaralar "disiplina" yoki konventsiya bilan emas, tilning o'z moduli tizimi bilan himoyalangan. Ichki funksiyalar koʻrinmas, eksport qilinganlar esa qayta tayinlanmas. Bu "plugin hell" (plagin jahannami) muammosini arxitektura darajasida hal qiladi: bir modul boshqa birining ichki holatini buzolmaydi, chunki til bunaqa kirishni cheklaydi.
git clone https://github.com/paveluv/e ~/.e
~/.e/e file.txt # add ~/.e to PATH for plain `e`
M-x: Buyruq paletasi emas, yashil REPL
Emacsda M-x buyruqlar menyusidir. e da M-x — bu muharrirning yashil Scheme REPL (Read-Eval-Print Loop)iga kirish nuqtasi. Siz shunchaki buyruq nomi kiritmaysiz, siz kod yozasiz. Avtomatik tamamlash (completion), parametr koʻrsatmalari, tarix va natijalar uchun alohida "transcript" buferi — bular hammasi standart REPL xususiyatlari, lekin ular muharrir interfeysiga toʻgʻridan-toʻgʻri uzatilgan. Bu o'zgartiradi: siz muharrirni konfiguratsiya qilasiz, siz unda dasturlaysiz. e o'zini o'zida rivojlantiradi: siz modul manbasini muharrir ichida saqlaysiz, u darhol yangilanib, ishlagan sessiyaga kiradi. Tashqi o'zgarishlar uchun reload-module! funksiyasi bor. Roʻyxatdan o'tishlar yangilanadi, bogʻli modulalar qayta kompilyatsiya qilinadi, lekin buferlar o'z joyida qoladi.
git clone https://github.com/paveluv/e ~/git/your_project/.e
rm -rf ~/git/your_project/.e/.git # make it ordinary files of your repo
~/git/your_project/.e/e file.txt
Nol bogʻliqlik, nol build, loyihaga moslashuvchanlik
e ning faqat ikki talabi bor: Chez Scheme va Unix-simulyatsiya terminali. Build yoʻq, oʻrnatish yoʻq. Klon qilib, ishga tushiring. Birinchi ishga tushirishda kutubxonalar kompilyatsiya qilinadi (bir necha soniya), keyinligilari ~100 ms ichida tayyor. Oʻrnatish ikki yoʻl bilan amalga oshiriladi:
(bind-key! "C-c s" save!!)
(unbind-key! "C-v")
- Global:
git clone https://github.com/paveluv/e ~/.e va ~/.e ni PATH ga qo'shing.
- Loyiha ichida (vendored): Loyiha papkasiga
.e sifatida klon qiling. Bu har bir klon qilgan odamga tayyor, loyihaga xos muharrir (masalan, loyiha uchun maxsus Scheme modulari bilan) beradi. Har bir nusxa o'z lib/ va eo/ (kompilyatsiya natijalari) papkalariga ega — toza izolyatsiya.
Emacsga o'xshash UX, lekin shaffof undo va aqlli qidiruv
Klaviatura boshqaruvi Emacsga yaqin: C-x C-s (saqlash), C-x b (buferlar), C-x 2/3 (oyna bo'lish), C-k/C-y (kesish/yapistirish), C-_ (undo). Lekin e da undo tizimi aytgancha: Undo insert "hello" yoki Undo (replace-all! "xx" "yy"). Harakatlar guruhlanadi: yozilgan harflar bir blok, paste — bitta qadam, M-x buyrug'i — nomlangan bitta qadam. Bu o'zgarishlar tarixini tushunishni osonlashtiradi.
(very-long-function-name param1 param2
param3)
(very-long-function-name param1 param2
param3)
Qidiruv (C-s) Emacsning "aqil" registrsiz qidiruv (case-folding) logikasini nusxalaydi: agar izlanayotgan so'z (needle) faqat kichik harflardan iborat bo'lsa, registr e'tiborsiz qidiradi; bitta katta harf kiritilsa — aniq moslikka o'tadi. Mosliklar oynada real vaqtda ranglanadi. M-% (query-replace) va boshqalar doim aniq moslikda ishlaydi.
M-x (buffer-name (current-buffer))
eval: (buffer-name (current-buffer)) => "sa.txt"
Konfiguratsiya: config.e — bu Scheme fayli
JSON, TOML, Lua yoki Elisp yo'q. Konfiguratsiya — bu config.e faylida yozilgan Scheme kodi. Tugmalarni qayta belgilash: (bind-key! "C-c s" save!!), olib tashlash: (unbind-key! "C-v"). Foydalanuvchi sozlamalari built-in va modul standartlariga ustunlik beradi. C-h k tugma haqida ma'lumot beradi: qayerda e'lon qilingan, konteksti nima. Bu — "configuration as code" printsipining eng toza namunasidir.
M-x (replace-all! "xx" "yy") ; current buffer
M-x (replace-all! "xx" "yy" buffer-file) ; every file buffer
M-x (count-matches "xx" "notes.md") ; count, don't edit
Chez Scheme tanlovi: tezlik va R6RS standarti
Nima uchun Chez Scheme? U — eng tez Scheme kompilyatorlaridan biri, R6RS standartiga to'liq muvofiq, va professional darajada optimallashtiruvchi kompilyatori bor. e ning yuklanish tezligi (100 ms) va runtime samaradorligi shu yerdan kelib chiqadi. Lekin bu ham cheklov: Chez Scheme har qayerda o'rnatilmagan (masalan, standart Ubuntu repositoriyalarida eski versiyalar bo'lishi mumkin). FreeBSD da scheme-script o'rniga chez-scheme --script ishlatilishi kerak. Bu — nishona auditoriya uchun (Scheme dasturchilari, til tuzuvchilari) qabul qilinmas cheklov, lekin umumiy foydalanuvchi uchun kirish bar'eri.
M-x (describe eq-hashtable-ref)
Kimga va nima uchun kerak?
e — bu hamma uchun muharrir emas. U VS Code o'rni emas (LSP, debugger, extension marketplace yo'q). U Emacs o'rni emas (org-mode, magit, email client, brauzer yo'q). e — bu dasturchi uchun fikrlash vositasi. Agar siz Scheme da o'ylaysiz, agar siz muharrirni o'z ish jarayoniga moslashtirmoqchi bo'lsangiz (masalan, maxsus AST manipulatsiya buyruqlari, avtomatik kod generatsiya makrolari yozib), e sizga til darajasida cheksiz imkoniyat beradi, lekin minimalizm va tezlikni saqlab.
「define (twice x)
⟨let ([y (* x 2)])
⦅if (odd? y) y ⟦begin x⟧⦆⟩」
Ushbu yondashuv — "frameworksiz framework" — zamonaviy dasturlashda kam uchraydigan, lekin juda kuchli paradigmasidir. e bu paradigmani terminal muharriri shaklida hayotga olib keldi. Agar siz Chez Scheme bilasiz yoki o'rganmoqchisiz, e — bu eng tabiiy va kuchli muhit bo'ladi. Aks holda, u qiziq arxitektura namunasidan tashqari, kundalik ish uchun qulay emas.
Asl manba: github.com