Emacs - podstawy

Krótko opisałem już edytor Vi (link). Przyszła też pora by napisać o moim ulubionym edytorze - Emacsie. Moim zdaniem jest to najlepszy edytor tekstu i jedna z najlepszych aplikacji jakie znam. Dlaczego? Bo w emacsie można zrobić (prawie) wszystko. Spójrz na xkcd.com/378:

 

XKCD on emacs - see xkcd.com/378

Opisuję to poniżej.

Spis treści

1 Dlaczego emacs?

Przy okazji pisania o edytorze Vi wspominałem, po co używać edytora tekstu. Jest wiele narzędzi do wyboru, ale edytorem, który mi najbardziej odpowiada jest emacs. Wśród wielu zalet posiada on między innymi następujące:

  1. ma doskonały i intuicyjny system skrótów klawiszowych,
  2. ma wiele trybów edycji, kolorowania składni itd., dla chyba każdego rozsądnego języka (w tym np. PowerShella, Pythona, Basha czy LaTeX)
  3. ma możliwość tworzenia makr do automatyzowania powtarzających się zadań,
  4. działa na wielu platformach,
  5. posiada bardzo wygodny system do organizacji czasu, w którym łatwo implementować metodologię GTD - org-mode1,
  6. jako edytor tekstu świetnie radzi sobie z dużymi plikami (np. ostatnio w pracy bez żadnych trudności pracowałem z ponad 200MiB plikiem csv, mającym ponad 700tys. linii. Na zwykłej stronie A4 mieści się ok 40 linii, więc z grubsza odpowiada to 17500 stronom),
  7. posiada bogate możliwości wyszukiwania/zastępowania, w tym z uwzględnieniem wyrażeń regularnych,
  8. da się w nim wygodnie pracować z wieloma plikami jednocześnie,
  9. w całości daje się obsługiwać bez pomocy myszy,
  10. i wiele, wiele innych.

2 Instalacja

Edytor emacs można pobrać i zainstalować na w zasadzie dowolnej platformie. Link http://ftpmirror.gnu.org/emacs/ powinien skierować Cię na stronę pobierania emacs-a; w katalogu windows znajdują się binaria (pliki emacs*bin*.zip). Po rozpakowaniu do wybranego folderu już możesz używać Emacsa (przez aplikację emacs.exe z katalogu bin)2.

3 Pierwsze kroki

Gdy już zainstalujesz emacsa i go uruchomisz otworzy się okienko wyglądające zapewne nieco archaicznie:) Posiada jednak rozwijalne menu, przyciski szybkiego dostępu… możesz więc rozpocząć pracę od razu i bez większego trudu poradzisz sobie z jego obsługą. A gdy już nieco oswoisz się z tym edytorem, będziesz mogła zacząć zgłębiać jego tajniki. Z czasem zapewne wyłączysz menu i przyciski, żeby mieć więcej miejsca na tekst i ,,emacsa'':)

Teraz, gdy masz już emacsa, mogę napisać czym różni się on od innych edytorów tekstu.

3.1 emacs ma fajne bufory

Tak, wiem, że to stwierdzenie brzmi dziwnie, ale jest bardzo prawdziwe. Korzystasz z zakładek w przeglądarkach internetowych? Brakuje Ci ich w pracy z dokumentami? Emacs posiada podobną (i bardziej rozbudowaną) funkcjonalność już pewnie od 20 lat. Na czym to polega?

Emacs umożliwia pracę z wieloma dokumentami jednocześnie. Każdy dokument otwierany jest w tak zwanym buforze. Gdy klikniesz sobie na menu buffers zobaczysz, jakie masz otwarte obecnie bufory. Nawet, jeśli nie otworzyłeś żadnego pliku, powinno być widocznych kilka, w tym scratchmessages.

Są więc bufory. Na czym polega ich atrakcyjność? Przecież są inne edytory posiadające zakładki. Otóż emacs umożliwia dzielenie okna na ramki i w każdej takiej ramce niezależnie wyświetla wybrany bufor. Co ważne, wyświetlanie jest odrębne od ,,otwarcia'' buforu - w buforach mogą być otwarte pliki, ale nie być wyświetlane w żadnej ramce. Żeby podzielić okienko kliknij sobie w jego wnętrzu i naciśnij kolejno:

Ctrl+x

a następnie klawisz:

2

Uwaga: W emacsie większość skrótów klawiszowych wykonuje się właśnie jako takie combo, dlatego by skrócić zapis przyjęło się zastępować Ctrl symbolem C, Alt symbolem M i składać sekwencję skrótów w jeden ciąg, np powyższy skrót będę zapisywać jak C-x 2 (tak opisywane są skróty także w dokumentacji).

Po wykonaniu powyższej sekwencji okno powinno przedzielić się w poziomie na dwie tzw. ramki. W obydwu będzie wyświetlane to samo! Możesz teraz naciskając C-x o (czyli ctrl+x, a nastęnie o) przejść do drugiego okienka. Przyciskiem ,,otwórz plik'' możesz sobie wczytać do aktualnie wybranego okienka dowolny plik, możesz też wybrać już otwarty z menu buforów. Możliwość otwarcia tego samego pliku w dwóch ramkach jest nie do przecenienia - jeśli przyzwyczaisz się do emacsa, będziesz się w innych edytorach zastanawiać jak to zrobić. Czy zdażyło Ci się np. ,,skakać'' tam i z powrotem po dokumencie, programie czy innym tekście, żeby zajrzeć co było napisane w innym miejscu? W emascie możesz sobie otworzyć bufor w dwóch ramkach i w jednej przeglądać/poglądać tekst, a w drugiej go edytować.

Jeżeli wykonasz C-x 2 dwukrotnie, okienko zostanie podzielone na 3 ramki, a każde kolejne wykonanie spowoduje podzielenie bieżącej ramki na 2. Tym sposobem możesz mieć otwartych całkiem sporo dokumentów jednocześnie. Rozmiary ramek możesz zmienić przy pomocy myszy.

A co zrobić, by podzielić okienko w pionie? Do tego służy kombinacja C-x 3. Podziały w pionie i poziomie można w sobie zagnieżdzać, otwierając kolejne bufory.

Żeby pozbyć się podziału na ramki, wystarczy użyć kombinacji C-x 1 (co ukryje wszystkie ramki poza bieżącą) lub C-x 0, który ukryje bieżącą ramkę i przejdzie do kolejnej.

Dodatkowo, kombinacja C-x C-b wyświetli ramkę z listą otwartych buforów. C-x b umożliwia przejście do bufora, którego nazwę podajemy w dolnym wierszu (Tab dokończy nazwę bufora, jeśli początek nazwy jest unikalny lub wyświetli listę możliwych dopasowań).

3.2 komendy

Same bufory nie wystarczą, by emacs był dobrym edytorem. Ogromną zaletą emacsa jest to, że posiada on masę wbudowanych poleceń, można też definiować własne w języku Lisp. Aby wykonać polecenie emacsa należy użyć kombinacji M-x (czyli Alt+x). Wtedy kursor przeniesie się do ostatniego wiersza okna - tak zwanego minibufora. Tam możemy wpisac nazwę polecenia emacsa. A jakie są te polecenia? W moim emacsie, po wciśnięciu M-x Tab (czyli uzyskaniu podpowiedzi możliwych dopełnień) wyświetla się lista ok. 4000 poleceń. Jest więc w czym wybierać. Do najważniejszych należą:

komenda opis
apropos po wykonaniu tej komendy w minibuforze zostaniemy poproszeni o podanie wyrażenia. Po wciśnięciu enter otrzymamy listę tematów pomocy zawierających to wyrażenie
help wyświetli się lista tematów pomocy
calc poręczny, choć dosyć skomplikowany, kalkulator (pracujący w notacji odwrotnej)
calculator jednowierszowy, prosty kalkulator
calendar kalendarz
<costam>-mode uruchomienie trybu <costam> - np python-mode, bash-mode lub org-mode
fill-paragraph zawinięcie wierszy tak, żeby pasowały (do czego - zależy od trybu edycji)

Poleceń jest naprawdę wiele, niektóre odnoszą się do konretnych trybów pracy emacsa, a niektóre - działają wszędzie. Mam nadzieję, że kiedyś napiszę o tym więcej - a na razie zachęcam do poeksperymentowania.

3.3 skróty klawiszowe

Tak jak wspomniałem na początku, emacs ma wspaniały system skrótów klawiszowych. Ponieważ skrótów jest wiele, z reguły ich wykonanie wymaga naciśnięcia pewnej kombinacji klawiszy. Przykładem są wspomniane wcześniej C-x 1, C-x 2 itd. Podobnie, w mojej konfiguracji org-mode wciśnięcie C-c C-e b zapisuje bieżąco edytowany bufor, eksportuje jako html i otwiera w domyślnej przeglądarce www. C-a a wyświetla listę zadań do zrobienia w bieżącym tygodniu, C-a p p listę zadań, bez przypisanego priorytetu, C-c C-x C-a przenosi bierzącą gałąź do pliku archiwum… mam nadzieję, że rozumiesz już, o co chodzi.

Dzięki takiemu systemowi w emacsie jest skrót klawiszowy do (prawie?) wszystkiego. Chcesz przenieść bieżącą linię o 5 w dół? Proszę bardzo: C-u 5 C-x C-t. Napisałeś nei zamiast nie? Wystarczy póki jesteś tuż za literką i naciśnąć C-t i mamy transpozycję dwóch ostatnich liter. M-t (czyli alt-t) - zamieni miejscami słowa odpowiednio do położenia kursora (zajrzyj na świetny komiks http://xkcd.com/378/, by zobaczyć dobry przykład).

3.4 edycja tekstu i tryby pracy

Emacs może działać w tak zwanych trybach (ang. mode). Tryby te zwykle odpowiadają za edycję pewnego rodzaju tekstu, np php-mode, perl-mode, latex-mode czy zwykły text-mode. W trybach tych skróty klawiszowe mogą być specjalnie dopasowane (np. w org-mode tabularor działa różnie w zależności od kontekstu edycji), mogą też istnieć skróty specjalne dla danego trybu. Kombinacja C-h m włączy komendę describe-mode, gdzie powinny być opisane skróty dla danego trybu. Warto się z tym zapoznać, jeśli będziemy więcej używać danego trybu. Warto też przejrzeć menu kontekstowe danego trybu, choć tam zwykle jest tylko mały podzbiór komand dla danego trybu.

Zwykle emacs poprawnie rozpoznaje tryb na podstawie rozszerzenia pliku. Jeśli z jakiegoś powodu tak się nie stanie, możesz zawsze przełączyć tryb klawiszami M-x <nazwatrybu>, np. M-x html-mode.

4 Na pobudzenie apetytu

Emacs ma w tym roku 40 lat i jest przez te lata aktywnie rozwijany. Możesz sobie więc wyobrazić, jak dużo czasu było na jego dopracowanie. Myślę że już to, co przedstawiłem wcześniej może kogoś zachęcić do zapoznania się z nim, jeśli jednak ciekaw jesteś, co jeszcze może emacs, poniżej znajdziesz trochę przykładów.

4.1 tryby

  1. tryby dla języków programowania PHP, Python, Perl, Java, JavaScript, Fortran, C, C++, C#, Ruby, powłok - bash, ksh, cmd (!), powershell, języków znaczników jak html, xml, LaTeX, docbook i dzisiątki innych,
  2. narzędzie do zarządzania czasem org-mode (samo w sobie ogromne narzędzie). Listy todo są tylko małym pozbiorem funkcjonalności org-mode. Narzędzie to ma własny język znaczników, z którego można generować pliki html, PDF (przez Latex, w tym prezentacje beamer), dokumenty odt, docbooki, mapy do programu freemind,
  3. wbudowana przeglądarka www - w3 (nieco minimalistyczna, ale jednak),
  4. wbudowany, rozbudowany klient poczty i grup dyskusyjnych gnus,
  5. wbudowane gry (menu tools->games),
  6. współpraca z systemami wersjonowania git, svn, cvs,
  7. SkeletonMode - tryb, w którym korzystając z lispa można ,,oskryptować'' generowanie szkieletów kodu, tekstu itd.
  8. tryb dla bibtexa,
  9. tryby dla gnuplota, epubów…

4.2 ciekawe funkcje

  1. nagrywanie sekwencji klawiszy (keyboard-macro), dzięki któremu można zautomatyzować powtarzalne czynności,
  2. wyświetlanie wybranego tekstu - outline mode, org mode - umożliwiają wyświetlanie tekstu spełniającego zadane kryteria,
  3. współpraca z opartym o GPG szyfrowaniem dokumentów, a w trybie org-mode - fragmentów dokumentu tekstowego (org-crypt),
  4. sprawdzanie pisowni w locie (flyspell),
  5. obsługa różnych kodowań i ich konwersja, obsługa znaków nowej linii w stylu DOS/UNIX,
  6. obsługa indentacji, zawijania tekstu, paragrafów, domykania nawiasów, zamykania funkcji i praca z regionami tekstu (wyrazy, zdania, paragrafy) itd.,
  7. undo i redo bez ograniczenia historii (w obrębie jednego uruchomienia emacs-a),
  8. schowek ma formę stosu, można na niego wrzucić dużo elementów a potem wklejać te, które potrzebujemy,
  9. jeśli potrafisz programować w lispie, możesz dowolnie oprogramować emacsa,
  10. wbudowane narzędzia do porównywania tekstów (diff/ediff mode)…

4.3 jeszcze więcej…

Jeszcze więcej znajdziesz na stronach:

Oprócz tego emacs ma wspaniałą społeczność, od której dowiesz się wszystkiego.

Życzę udanej współpracy z Emacsem!

Footnotes:

1 o org-mode napiszę osobny post

2 brak instalatora może wydawać się niewygodny, ale dzięki temu nie potrzebujemy uprawnień administratora, żeby na (prawie) dowolnym komputerze móc używać emacsa. Jeśli chcesz ,,skojarzyć'' wybrane pliki z emacsem, wystarczy kliknąć na nich prawym klawiszem, wybrać otwórz za pomocą i znaleźć emacsa wśród ,,innych programów''. Poźniej będzie się już pojawiał w menu kontekstowym eksporatora windows