Wprowadzenie

Coldpeer

Poniższy artykuł traktuje o podstawach posługiwania się edytorem Emacs. Będę opisywał GNU Emacsa, aczkolwiek niemal wszystko powinno działać również pod XEmacsem.

          1 Terminologia
               1.1 Klawisze
                    1.1.1 Kombinacje klawiszy
               1.2 Pozostałe
          2 Korzystanie z Emacsa
               2.3 Przemieszczanie się po buforze
               2.4 Edycja
                    2.4.2 Wprowadzanie
                    2.4.3 Zaznaczanie
               2.5 Bufory i pliki
               2.6 Okna
               2.7 Programowanie w Emacsie
               2.8 Własny autostart
               2.9 Zakończenie

Terminologia

Na początek warto objaśnić terminologię używaną, gdy się mówi o Emacsie, bez której trudno znaleźć pomoc na listach czy IRCu.

Klawisze

Przyzwyczajonych do różnego nazywania klawiszy Emacs może zdziwić - mamy jeden standard nazywania klawiszy i ich kombinacji. *C to klawisz Control (ten w rogu klawiatury, jakby ktoś zapomniał, który to) *S to klawisz Shift. W nazywaniu kombinacji rzadko się go wymienia, nawet gdy się go używa - przecież każdy wie, że aby wcisnąć C-_ należy wykonać C-S-- *M to klawisz Meta, w nowszych klawiaturach zwany Altem. Takie nazewnictwo dziwi, jeżeli nie pamiętamy o tym, że Emacs jest starszy od wielu z nas i w tamtych czasach na klawiaturach nie było klawiszy Alt, a Meta (bardzo popularna wówczas klawiatura SpaceCadet, na której jak widzimy jest klawisz Meta) *s to klawisz super, na którym w nowszych klawiaturach jest dziwny znaczek. Znaczenia pozostałych klawiszy specjalnych, takich jak RET, SPC itd. łatwo się domyślić.
Kombinacje klawiszy
Kombinacje klawiszy są zapisywane dość prosto - łącznikami określami równoczesność klawiszy, spacjami określamy kolejność klawiszy. Przykład: *`C-x C-c` (`save-buffers-kill-emacs`, wyłącz Emacsa) - aby wykonać należy wcisnąć najpierw C-x, potem C-c, (czyli najpierw wciskamy Control, przytrzymujemy, wciskamy x, puszczamy x nie puszczając Controla (teoretycznie można puścić Control, ale w następnej części kombinacji i tak musielibyśmy go wcisnąć), wciskamy c i puszczamy c i Control). *`C-h k` (`describe-key`, opisz klawisz) - aby wykonać wciskamy C-x, puszczamy oba klawisze i wciskamy k. Ta funkcja jest bardzo przydatna dla początkujących (dla zaawansowanych zresztą też). *Niektóre kombinacje są domyślnie zablokowane, gdyż mogą wprowadzić niezłe zamieszanie u osób, które nie wiedzą, co robią. Na przykład `C-x n n` ogranicza aktualny bufor do zaznaczonego regionu, co może powodować pytania w stylu "gdzie się podziała reszta pliku?". Po ich wciśnięciu aktualna ramka się dzieli i dostajemy pomoc na temat zablokowanych funkcji. *I bardzo przydatna rzecz - `C-g` przerywa wprowadzanie kombinacji, jak również uruchamianie funkcji i parę innych rzeczy. *Bardzo, ale to bardzo przydaje się `M-x` - po wciśnięciu wpisujemy w minibuforze nazwę funkcji do uruchomienia.

Pozostałe

*Window (okno) - część ramki (patrz niżej) powstała po podzieleniu. Domyślnie uruchomiony Emacs ma dwa okna, główne i minibuffer służący do wprowadzania komend i ich obsługi. *Frame (ramka) - występująca tylko w trybie graficznym funkcja pozwalająca na stworzeniu dodatkowych "okienek" (w rozumieniu nie emacsowym, a ogólnym, czyli okienek z przyciskami w rogu, naprawdę ciężko to wyjaśnić słowami) z Emacsem. *Buffer (bufor) - obiekt reprezentujący edytowany tekst lub inne funkcje. Na początku można sobie skojarzyć bufor z każdym odwiedzanym plikiem na dysku, potem okazuje się, że sporo buforów jest wirtualnych. *Region - obszar pomiędzy postawionym markiem a kursorem. Region odpowiada zaznaczonemu tekstu w nowszysch edytorach. *Mark (znacznik) - ustawiany przez użytkownika (lub niektóre funkcje) znacznik. Przydatny przy działaniach na regionie tekstu i przy przemieszczaniu się po dużych plikach.

Mniej ważne terminy będę wyjaśniał w tekście.

Korzystanie z Emacsa

Nareszcie najważniejsza część naszego opisu :)

Przemieszczanie się po buforze

W Emacsie do przemieszczania kursora (point) zostało zdefiniowanch kilka klawiszy: *`C-f` - znak do przodu *`C-b` - znak do tyłu *`C-n` - linia do przodu *`C-p` - linia do tyłu Zostały one zdefiniowane, gdyż na starszych klawiaturach nie było strzałek (odsyłam do obrazka). Na nowszych jednak strzałki są (w każdym razie u mnie) i ja ich używam, bo jest po prostu wygodniej.

Możemy też przechodzić po trochę większym obszarze:
*M-<, C-< home > - beginning-of-buffer - kursor na początek buforu, mark jest ustawiany w naszej wcześniejszej pozycji
*M->, C-< end > - end-of-buffer - jak wyżej, tylko na koniec.

Inne funkcje przydatne przy poruszaniu się:
*C-x C-x - exchange-point-and-mark - zamiana miejscami kursora i marka. Przydatne, jeżeli przenieśliśmy się np. na początek buforu i chcemy szybko wrócić tam, gdzie byliśmy.

Edycja

Wprowadzanie
Wciśnięty znak zostaje wrzucony do bufora, co jest raczej logiczne. Z przydatnych funkcji jest np.: *`C-/`, `C-_` - undo, czyli cofanie.
Zaznaczanie
Na sam początek warto włączyć sobie `transient-mark-mode` (`M-x transient-mark-mode`, pod koniec napiszę, jak zrobić, żeby uruchamiało się automatycznie), żebyśmy widzieli co zaznaczamy. Samo zaznaczanie jest łatwe, polega na postawieniu marka (`C-< SPC >`) i przesuwaniu się po buforze. Na zaznaczonym regionie można wykonywać różne operacje. Najczęstszą jest, nie wiedzieć czemu, kopiowanie, wycinanie i wklejanie. *`C-w` zabija tekst (w nowomowie wycina) i wrzuca go do kill-ring *`M-w` zapisuje tekst w kill-ring, ale nie zabija go (po nowemu kopiuje) *`C-y` yankuje (wkleja) ostatni tekst z kill-ring

Aby zaznaczyć cały bufor używamy kombinacji C-x h - przydaje się to np. gdy chcemy automatycznie powcinać jakiś kod źródłowy po swojemu.

Bufory i pliki

Otwieranie pliku rozpoczynamy kombinacją `C-x C-f`, po której wklepujemy ścieżkę do pliku (jeżeli nie istnieje, zostanie utworzony pusty buffor). Plik zapisujemy kombinacją `C-x C-s`. Do zmiany bufora wyświetlanego w aktualnym oknie służy kombinacja `C-x b`, należy wpisać nazwę bufora (lub jej fragment i dopełnić TABem, zresztą dopełnianie TABem działa niemal wszędzie) i wcisnąć enter. Aby uprzyjemnić sobie zadanie warto włączyć `iswitchb-mode` - różnica jest widoczna gołym okiem (w GNU Emacsie CVS jest jeszcze lepszy `ido-mode`, oczywiście można doinstalować go do Emacsa 21). Aby wyświetlić listę buforów można użyć kombinacji `C-x C-b`, otwiera ona nowe okno z listą buforów. Bufor zabijamy kombinacją `C-x k`

Okna

Wiele funkcji (jak na przykład większość funkcji pomocy czy wspomniane `C-x C-b`) otwiera dodatkowe okna w Emacsie. Po wykorzystaniu ich zwykle nachodzi ochota na zamknięcie ich. Nic prostszego, wystarczy zrobić `C-x 1` - kombinacja ta zamyka wszystkie okna prócz aktualnego. Oczywiście, zawsze możemy się do nich potem przełączyć np. za pomocą `C-x b` - zamknięcie okna nie zabija bufora. Możemy też tworzyć własne okna, służą do tego funkcje `C-x 2` i `C-x 3` - sugeruje samodzielnie sprawdzić, jak one działają. Do przemieszczania się między oknami służy `C-x o`

Programowanie w Emacsie

Po wyjaśnieniu podstaw w końcu przechodzimy do tego, co misie lubią najbardziej - programowanie. Obsługa danego języka programowania odbywa się za pomocą załadowania odpowiedniego mode (zwykle odbywa się to automatycznie, możemy to też wymusić np. za pomocą `M-x nazwa-mode`). I tak na przykład do C jest c-mode. do C++ jest c++-mode, do HTMLa jest html-mode, a do PHP jest... zonk, bo w Emacsie nie ma domyślnie mode do PHP. Oczywiście można sobie doinstalować, ale o tym w następnej części. Aby włączyć kolorowanie składni należy zrobić `M-x global-font-lock-mode`, zwykle jest to dodawane do autostartu. Od tej pory Emacs powinien kolorować składnię, samodzielnie wcinać itd., różne mode mają różne funkcje, aby odkryć wszystkie należy poczytać pomoc do nich. Najbardziej przydatnymi są `C-M-\`, czyli wcinanie regionu zgodnie ze składnią języka, czy zwykły TAB wcinający daną linię. `M-x compile` uruchamia kompilator, pyta nas tylko o komendę do wykonania (domyślnie `make -k`). Otwiera nowe okno i tam wyświetla komunikaty kompilacji. Za pomocą `M-x next-error` i `M-x previous-error` możemy przenosić się między poszczególnymi błędami kompilacji. `M-x gdb` otwiera frontend do debuggera.

Własny autostart

Przy uruchamianiu Emacs wczytuje plik ~/.emacs i uruchamia kod w nim zawarty. Jest to świetne miejsce na wstawienie rzeczy, które mają się uruchamiać same.

Przykładowy plik .emacs może wyglądać tak:

(require 'paren) ;;załączamy bibliotekę paren

;;mode
(menu-bar-mode -1) ;;wyłączenie menu
(tool-bar-mode -1) ;;i paska narzędzi - i tak nikt tego nie używa

(transient-mark-mode t)

(iswitchb-mode t) ;;w Emacsie CVS można zmienić na ido-mode

(show-paren-mode 1) ;;wyświetlamy, który nawias do którego pasuje

;;klawisze
(global-set-key (kbd "<f9>") 'compile) ;;kompilacja pod f9
(global-set-key (kbd "<f8>") 'gdb)

(global-set-key (kbd "<f5>") 'next-error)
(global-set-key (kbd "<f6>") 'previous-error)

(global-unset-key (kbd "C-t")) ;;wyłączamy kombinację C-t. transpose-chars? za blisko C-y, męczące przy pomyłkach

;;rozne
(set-language-environment "UTF-8") ;;domyślnie niech będzie utf-8

Zakończenie

To chyba wystarczy, jak na wprowadzenie, bardziej zaawansowane funkcje będę opisywał w następnych częściach, warto też samemu eksplorować możliwości Emacsa.
autor: Adam "Dodek" Michalik

2 komentarzy

Niestety ale musiałem utworzyć nowy - inaczej nie dało się wyprowadzić tego atykułu z głównej kategorii Emacs do oddzielnego arta. Zaznaczyłem autora, jeszcze raz sorry.

dziwne, czy na 4p nie ma przenoszenia z zachowaniem informacji o oryginalnym autorze? bo w ten sposób fakt, że to ja napisałem ten artykuł, poszedł w zapomnienie...