Czemu wybrałem Emacs

30/06/2017

Emacs to bardzo dobry system, brakuje mu tylko porządnego edytora.

Prawie każdy programista na świecie słyszał o Emacs. Mało kto jednak zgłębił się w niego na tyle dobrze aby się przekonać.

Według najnowszej ankiety na StackOverflow jedynie 4.2% programistów korzysta z Emacsa. Dla porównania jego “najwiekszy rywal” - Vim ma ponad 27% udziału. Piszę największy z przekąsem - moim zdaniem wojna Emacs vs Vim jest kompletnie bez sensu.

Czemu więc dałem temu środowisku szanse?

1. Wcale nie muszę rezygnować z vimowych przyzwyczajeń

Nie ukrywam - od ponad dwóch lat jestem wiernym użytkownikiem vima. A przynajmniej jego ideoologi.

  • W pracy używam Visual Studio - oczywiście z pluginem VsVim.
  • A jeśli nie potrzebuję IDE to korzystam z Visual Studio Code - również z pluginem VsCodeVim.
  • Android? Android Studio wraz z vimowym pluginem.
  • W domu? Neovim lub Vim8.

Moje przyzwyczajenia są na tyle silne, że bez podziału na Insert Mode / Normal Mode i poruszania się za pomocą słynnego HJKL - jestem bezsilny. Nie wspominając o tym ile razy zdażało mi się pisać :wq gdy instynktownie próbowałem zapisać zmiany i zamknąć program.

Emacs również posiada plugin - prawdopodobnie jeden z najlepszych jakie widziałem. Nazwane jest toto eVil Mode i jest bezbłędne.

2. Emacs Lisp

Jest to prawdopodobnie najważniejszy powód. Emacs to tak naprawdę maszyna lispowa ukierunkowana pod edycję tekstu. 95% całego Emacsa jest pisana właśnie w Lisp, a pozostałe 5% służy właśnie jako interpreter i API pośredniczące pomiędzy tym językiem a systemem.

A to oznacza jedną rzecz: Praktycznie każdą funkcjonalność Emacsa możesz przystosować pod swoje preferencje. Ba - pisanie własnych funkcjonalności i pluginów jest banalnie proste.

Sam Lisp - to język funkcyjny - czyli rzecz która od paru lat robi się modna. Pisanie w nim jest naprawdę ciekawe.

3. Baza pluginów

Pluginy do Emacsa potrafią praktycznie wszystko - od przeglądarki internetowej, po obsługę maili, live preview do markdown. Mamy lintery, kompilatory, skórki, powiadomienia. Wszystko to co potrzeba. W momencie gdy pare lat temu popularny stał się Sublime Text wraz z swoją minimapą - po paru dniach użytkownicy Emacsa mieli już własną wersję pod postacią pluginu.

Same pluginy konfiguruje się poprzez plik ~/.emacs.d/init.el - czyli kod lispowy. To oznacza że masz cały czas dostęp do wszytkich algorytmów i makr. Przykładowa konfiguracja pluginu może wyglądać tak:

(use-package yasnippet
  :defer 2
  :diminish yas-minor-mode
  :config
  (yas-global-mode t))

Ba - w Emacs 25.1 weszło eksperymentalne wsparcie dla obsługi WebKit. A to oznacza, że możliwe jest oglądanie YouTube w Emacsie

Pamietacie jak cytowałem na początku Emacs to dobry system? Coś w tym jest. A brak porządnego edytora nadrabia eVil Mode ;)

4. A skoro o pluginach mowa - Magit

Uwielbiam Magit. Jest to prawdopodobnie najlepszy plugin do obsługi systemu kontroli wersji jaki widziałem. Łączy sobie elegancję i prostotę konsoli (preferuję pisać samodzielnie komendy git status, git commit itd. niż czekać aż takie SourceTree w ogóle zareaguje) z wygodą programów GUI.

5. Org-Mode

Drugi najlepszy powód dla którego używam Emacs. Org-Mode to narzędzie do pisania dokumentów, zarządzania taskami, agend, kalendarzy, notatek. Wspiera eksport do LaTeX, Beamer, Worda, HTMLa. Umożliwia Literate Programming, ewaluację kodu i wrzucanie wyniku automatycznie do tabeli.

Używam go wszędzie, w pracy zamiast żółtych karteczek, w domu jako przypomnienia, na studiach do pisania pracy inżynierskiej i sprawozdań.

A jeśli czegoś Ci w nim brakuje? No problem! Zawsze możesz dopisać własną funkcjonalność ;)

Niektórzy idą krok dalej - całą konfigurację Emacsa trzymają jako jeden wielki dokument org.

Przykładem niech będzie Blog Sacha Chua. Polecam zapoznać się zarówno z jej konfiguracją jak i z cotygodniowymi notatkami co nowego w Emacsie.

6. Konfiguracja serwer - klient.

Niektórzy narzekają > Emacs długo się włącza, jest powolny. Zanim otworzy jeden plik konfiguracyjny to zdążyłbym w Vimie wyedytować go 5 razy. Fakt. Nie jest demonem szybkości choć moim zdaniem z wersji na wersję jest coraz lepiej. Jednakże - po co włączać go za każdym razem? Osobiście wolę włączyć go raz na początku przy uruchomieniu systemu:

emacs --daemon

A potem jedynie podłączać się do niego kiedy potrzebuję wyedytować jakiś plik:

emacsclient -c

Innymi słowy - wszystkie pluginy uruchamiane są tylko raz na początku. Oznacza to również, że w każdym momencie mogę zalogować się na mój komputer z innego komputera i edytować w Emacsie jak gdyby nigdy nic.

Architektura serwer - klient rządzi.

7. Jest samodokumentujący

Praktycznie na każde pytanie związane z Emacsem - sam Emacs jest w stanie odpowiedzieć. Wbudowana dokumentacja jest naprawdę potężna - nie ma potrzeby by zaglądać na StackOverflow czy StackExchange.

8. Działa na wszystkich platformach

Ponieważ pluginy są pisane w lisp - Emacs zadziała tak samo zarówno na Windows, Linux, Osx czy Cyngwin. Jedna konfiguracja by nimi rządzić ;-)

Ale nie jest idealny

Jest jednak parę rzeczy które mogłyby być lepsze.

  • Emacs jest stary - naprawdę stary. Projekt ten jest rozwijany od 1976 roku.
  • Oznacza to że są rozwiązania które nieco się przestarzały.
  • Przykładem może być to jak obsługiwane jest GUI
  • Albo brak równoległości (choć to się zmienia)
  • Sam Emacs Lisp nie jest idealny, choć silnik ma być zastąpiony przez Guile
  • Optymalizacja lispu nie jest najlepsza.