Emacs, editorul programabil

May 10th, 2008 Alex

De ceva timp am început să fac tranziția de la Vim la Emacs. Știu, știu, cum aș putea? :)

Se poate pune întrebarea, de ce-mi creez atâtea probleme? Adică nu este de ajuns Notepad, sau orice editor de texte?

Într-adevăr, dacă programatorii ar gândi mai mult și ar scrie mai puțin cod, probabil lumea ar fi mai bună :) Dar pentru a putea gândi mai mult, trebuie să înlăturăm complexitatea accidentală (despre complexitate accidentală vezi No Silver Bullet). Programarea, pe lângă creativitate, mai presupune și muncă brută, și la fel ca marii atleți, programarea efectivă (i.e. procesul de comunicare cu calculatorul) trebuie să devină o activitate pe care o faci din reflex (fără să te gândești, la fel ca mersul pe bicicletă).

Use a Single Editor Well
The editor should be an extension of your hand; make sure your editor is configurable, extensible, and programmable.

Pragmatic Programmer

Majoritatea timpului programarea se reduce la editarea de texte (cod, specs, email-uri între membrii echipei, merge de branch-uri, etc…), ai un avantaj destul de mare dacă ai un editor de texte puternic și adaptabil la orice nevoi. Și deși Eclipse este un IDE respectabil cu extrem de multe plugin-uri, chiar nu se compară la flexibilitate și eficiență, ca să nu mai vorbesc de resursele imense folosite. Vim este un prieten vechi, și din punct de vedere al editării de texte, este cel mai eficient editor. Nu cred că voi renunța însă niciodată la vim, mai ales că prezența unui editor compatibil vi este cerință în standardul Posix, iar Vim este prezent pe orice server cu care am interacționat vreodată.

Dar Emacs este cu totul altceva, și sincer să fiu, este greu de explicat de ce Emacs este ceea ce este. Deși este vechi de vreo 25 de ani, pot pune pariu că este singurul mediu de dezvoltare ce încă va fi relevant și peste 100 de ani de acum încolo.

Nu totul este perfect, și pentru un exemplu concret, în Emacs este destul de greu să definești un mod de editare pentru un limbaj de programare nou, fără să ai experiență serioasă cu Emacs Lisp, și există destul de puține limbaje de programare pentru care există suport pentru intellisense și pentru refactoring (până acum știu de Lisp, Java, Python, și în curând Javascript). Comparativ cu Textmate, unde editarea unui bundle este extrem de ușoară datorită unei abstractizări metalingvistice destul de reușite (deși pentru Textmate nu știu deocamdată de nici un limbaj cu suport de intellisense și de refactoring).

Tranziția la Emacs chiar nu este ușoară, și nici nu știu sigur dacă va reuși, dar o iau foarte în serios, și oricum, drept consolare a unei eventuale nereușite cel puțin Emacs Lisp este al naibii de cool ;) Și deja am început să mă gândesc la lucruri ce-mi lipsesc și să le implementez de unul singur. De exemplu îmi lipsește din Eclipse fereastra de Open Resource, ce-ți permite să cauți după wildcards nume de fișiere din proiect, și mi-am implementat o funcționalitate aproape echivalentă în emacs.

Pluginul l-am făcut public … open-resource.el

Este foarte simpluț, dar plănuiesc să-i adaug funcționalități ulterioare … cum ar fi o listă de sugestii în timp ce tastezi, sau să facă cautare și prin CTags de exemplu.

Posted in emacs, technology, unix | 8 Comments »