Z pogranicza » Emacs

Wprowadzenie

  • 2007-08-22 14:13
  • 2 komentarze
  • 2357 odsłon
  • Oceń ten tekst jako pierwszy
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.

Spis treści

               1 Terminologia
                    1.1 Klawisze
                         1.1.1 Kombinacje klawiszy
                    1.2 Pozostałe
               2 Korzystanie z Emacsa
                    2.1 Przemieszczanie się po buforze
                    2.2 Edycja
                         2.2.1 Wprowadzanie
                         2.2.2 Zaznaczanie
                    2.3 Bufory i pliki
                    2.4 Okna
                    2.5 Programowanie w Emacsie
                    2.6 Własny autostart
                    2.7 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 komentarze

Coldpeer 2007-08-22 13:27

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.

dodekam 2007-08-22 13:21

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...