emacs kezdőknek v1.0.1 ---------------------- 0) Az emacs indítása & alapfogalmak ----------------------------------- 0.1) Az emacs indítása ====================== Igazán egyszerű. Megpróbálkozhatsz például az "emacs &" paranccsal. Adhatsz hozzá színt is, ha akarsz, pl. "emacs -fg Black -bg Wheat &", ami szerintem egész szép. Ha egy távoli gépről akarod futtatni, akkor ezt írd: "emacs -fg Black -bg Wheat -d :0.0 &", és ne felejtsd el hozzáadni a távoli gépet az access control listhez az "xhost +" paranccsal. Ez az összes, amit tudnod kell róla. Talán érdemes lenne egy aliast csinálnod rá a ~/.profile fájlodban. 0.2) Alapfogalmak ================= A 'meta' billentyű általában az 'Alt' vagy 'Start Menu' billentyűt jelenti. C- : control + M- : meta + SPC : space DEL : delete vagy backspace ESC : escape; ESC ugyanaz, mint M- buffer : Minden, amit használsz, szerkesztesz vagy olvasol emacsban. Ez lehet egy kinyitott fájl, egy fordítás eredménye, a postád és még jópár dolog, pl. egy shell ablak. mark : A mark egy bufferpozíció, amely egy speciális verembe mentődik a bufferben való nagyobb ugrásokkor stb., illetve manuálisan is el lehet tenni. mode : Minden buffernek van mode-ja. Egy mode-nak lehetnek speciális függvényei, színezése, bekezdései stb. minibuffer : Az alul levő sor, ahova a M-x megnyomása után tudsz parancsokat beírni. Ezen parancsok nagy részét *egy csomó* billentyű megnyomásával is meghívhatod, de ne ijedj meg... mostantól bemutatok egy-kettőt a függvények közül, kerek zárójelek közé rakva a parancs nevét. point : az aktuális kurzorpozíció 1) Egyszerű függvények ---------------------- 1.1) Fájlok, bufferek és ablakok kezelése ========================================= C-x C-f (find-file) : kinyit egy fájlt C-x 4 C-f (find-file-other-window) : kinyit egy fájlt a következő ablakban C-x k (kill-buffer) : becsukja az aktuális buffert C-x C-c (save-buffers-kill-emacs) : megkérdezi, mentse-e a fájljaidat és kilép C-x C-s (save-buffer) : elmenti az aktuális buffert C-x C-w (write-file) : megadott fájlnnévvel ment C-x C-b (list-buffers) : listázza és kezeli a nyitott buffereket, ?-re segítséget ad C-x b (switch-to-buffer) : megváltoztatja az aktuális buffert C-x 4 b (switch-to-buffer-other-window) : megváltoztatja a következő ablak bufferét C-x 2 (split-window-vertically) : az aktuális ablakot függőlegesen két részre osztja C-x 3 (split-window-horizontally): az aktuális ablakot vízszintesen két részre osztja C-x 1 (delete-other-windows) : becsuk az aktuálison kívül minden ablakot C-x 0 (delete-window) : becsukja az aktuális ablakot C-x o (other-window) : átvált a következő ablakra 1.2) Egyszerű szerkesztés ========================= C-SPC (set-mark-command) : a point-ra állítja a mark-ot C-w (kill-region) : kivágja a mark-tól a point-ig terjedő területet a vágólapra M-w (kill-ring-save) : a mark-tól a point-ig terjedô területet a vágólapra másolja C-y (yank) : beilleszt a vágólapról C-a (beginning-of-line) : a kurzort a sor elejére állítja C-e (end-of-line) : a kurzort a sor végére állítja C-t (transpose-chars) : felcseréli az utolsó két karaktert M-t (transpose-words) : felcseréli az utolsó két szót C-x C-t (transpose-lines) : felcseréli az utolsó két sort C-s (isearch-forward) : előrefele keres C-r (isearch-backward) : hátrafele keres M-% (query-replace) : egy szöveget minden előfordulásakor egy másikra cserél; minden alkalommal engedélyt kér (replace-string) : egy szöveget minden előfordulásakor egy másikra cserél 1.3) Egyéb hasznos dolgok ========================= (set-variable) : beállítja egy változó értékét C-h v (describe-variable) : kiírja egy változó pillanatnyi értékét és jelentését C-h m (describe-mode) : jellemzi az aktuális módot és felsorolja a hozzá tartozó parancsokat és billentyűkombinációkat C-h f (describe-function) : leírja, mit csinál egy parancs C-g (keyboard-quit) : kilép a minibufferből C-h ? (help-for-help) : segítséget ad a help parancsok használatához C-_ (undo) : visszacsinálja az utolsó változtatást (man) : kinyitja a manualt a következő ablakban 2) A ~/.emacs fájl ------------------- Az ide írt parancsok az emacs indításakor le fognak futni. Ajánlom a következő sort: "(global-font-lock-mode t)" Ez bekapcsolja a színezést. Ha akarsz plusz library-kat használni, pl. a "~/games/malyon.el"-t, akkor egy ilyen sort kell írnod: "(load-library (expand-file-name "~/games/malyon.el"))". Ha csak akkor akarod betölteni, amikor futtatod, akkor ezt írd: "(autoload 'malyon "~/games/malyon.el" "z-code interpreter" t)". Ennek a szerkezete: "(autoload 'parancs "library.el" "leiras" t)". Ha sok .el fájlod van, kényelmes ezeket mind egy könyvtárba rakni, és ezt a könyvtárat berakni a load path-ba: "(setq load-path (append load-path '(nil "~/emacs-lisp-files")))". A szerkezet: "(setq valtozo ertek)". A gyakran használt parancsokhoz billentyűkombináció rendelhetô: "(global-set-key billentyu 'parancs)", pl. a kovetkezoket ajanlom: (global-set-key "\C-cr" 'revert-buffer) ; C-c r-re visszatölti lemezről a fájlt (global-set-key [f12] 'compile) (global-set-key [f10] 'shell) (global-set-key [end] 'end-of-buffer) ; csak az új emacshoz kell (global-set-key [home] 'beginning-of-buffer) ; csak az új emacshoz kell 3) Haladó függvények -------------------- 3.1) Mode-ok ============ Mode-függő bekezdések: TAB (indent-relative) : behúzza az aktuális sort C-M-\ (indent-region) : behúzza a kiválasztott régiót Az emacs a mode-okba automatikusan lép be, pl. amikor egy ismert kiterjesztésű fájlt nyitsz meg. A módváltást parancsokkal is elérheted: (latex-mode) : belép LaTeX mode-ba (c++-mode) : belép C++ mode-ba (ada-mode) : belép Ada mode-ba (irchat) : belép IRC mode-ba (IRChat 2.4+ kell) (rmail) : belép a levelezés módba (gnus) : belép a news-olvasó módba (tcl-mode) : belép TCL módba Az IRChat-et érdemes új frame-ben, azaz az ablakkezelő rendszer új ablakában futtatni: (new-frame) : új ablakot nyit (csak X/Windows alatt) 3.1.1) LaTeX mode ~~~~~~~~~~~~~~~~~ 3.1.2) C++ mode ~~~~~~~~~~~~~~~ M-; (indent-for-comment) : új megjegyzést kezd a jobb oldalon C-c C-c (comment-region) : a régiót megjegyzésbe rakja C-u C-c C-c : kiveszi a sorkezdő megjegyzéseket (compile) : lefordítja a programot C-x ` (next-error) : a kurzort a következő hibára állítja 3.1.3) Ada mode ~~~~~~~~~~~~~~~ M-; (indent-for-comment) : új megjegyzést kezd a jobb oldalon C-c ; (comment-region) : a régiót megjegyzésbe rakja C-c : (ada-uncomment-region) : kiveszi a sorkezdő megjegyzéseket C-c C-c (compile) : lefordítja a programot C-x ` (next-error) : a kurzort a következő hibára állítja 3.1.4) IRC mode ~~~~~~~~~~~~~~~ Néhány változót nem árt beállítani: irchat-server : az irc szerver, pl. irc.extra.hu irchat-name : az 'igazi' neved irchat-nickname : a nicked irchat-channel-buffer-mode : állítsd t-re, hogy lásd a szerver üzeneteit irchat-startup-channel : kinyit egy csatornát rögtön csatlakozás után C-c r (irchat-Command-reconfigure-windows) : visszaállítja az ablakok helyzetét C-c / (irchat-Command-generic) : futtat egy IRC parancsot C-c n (irchat-Command-nickname) : megváltoztatja a nicked C-c s (irchat-Command-servers) : megváltoztatja a szervert C-c p (irchat-Command-send-private) : küld egy privát üzenetet C-c (irchat-Command-jump-channel) : a . csatornára vált C-c q (irchat-Command-quit) : kilép az IRChat-ből C-c t (irchat-Command-topic) : megváltoztatja a csatorna topicját C-c i (irchat-Command-invite) : meghív valakit a csatornára C-c f (irchat-Command-finger) : letapogat valakit C-c j (irchat-Command-join) : belép egy csatornára 3.1.5 Rmail mode ~~~~~~~~~~~~~~~~ 3.1.6 Gnus mode ~~~~~~~~~~~~~~~ 3.1.7 TCL mode ~~~~~~~~~~~~~~ C-c ESC a (tcl-send-buffer) : lefuttatja a buffert TCL-ben C-c ESC e (tcl-send-current-line) : lefuttatja az aktuális sort TCL-ben C-c ESC q (tcl-kill-process) : kilép a futó TCL programból C-c ESC u (tcl-restart-with-whole-file): kilép a futó TCL programból és lefuttatja az aktuális fájlt 3.2) Külső programok ==================== (shell) : egy terminalt indít az ablakban (ediff) : összehasonlít két fájlt és megcsinálja a változtatásokat (gdb) : futtatja a GNU Debuggert 3.3) Egyszerű szerkesztés (2) ============================= M-PgUp (scroll-other-window-down) : felgörgeti a következő ablakot M-PgDn (scroll-other-window) : legörgeti a következő ablakot C-x C-SPC (pop-global-mark) : kiveszi a veremből a felső mark-ot, és a kurzort oda helyezi C-x C-x (exchange-point-and-mark) : felcseréli a mark-ot a kurzor helyével C-x r SPC (point-to-register) : elmenti az aktuális buffer & kurzor pozíciót egy regiszterbe C-x r j (jump-to-register) : egy korábban eltett bufferpozícióra ugrik M-D (kill-word) : töröl a point-tól a következő whitespace-karakterig M-DEL (backward-kill-word) : töröl az előző whitespace-karaktertől a point-ig C-k (kill-line) : töröl a point-tól a sor végéig C-x r k (kill-rectangle) : kivágja a mark, mint bal felső, és a point, mint jobb alsó sarok által határolt téglalapot a vágólapra C-x r y (yank-rectangle) : beilleszt egy téglalapot M-c (capitalize-word) : a kurzor alatt levő szó 1. betűjét nagyra, a többit kicsire változtatja M-l (downcase-word) : a kurzor alatt levő szót kisbetűsíti M-u (upcase-word) : a kurzor alatt levő szót nagybetűsíti M-/ (dabbrev-expand) : megpróbálja kiegészíteni a szót, amit írsz, egy szóval, ami valamelyik bufferben szerepel; ismételt nyomásra más kiegészítést próbál (iso-accents-mode) : be/ki kapcsolja a repülő ékezeteket (',~,^) C-M-% (query-replace-regexp) : egy regexpet minden előfordulásakor egy szövegre cserél; minden alkalommal engedélyt kér (replace-regexp) : egy regexpet minden előfordulásakor egy szövegre cserél 4) Szórakozás ------------- (gomoku) : emacs amőbázik veled (blackbox) : egy kedves logikai játék (dunnet) : egy fergeteges interactive fiction (malyon) : egy z-code játszó; IF játékok tömkelegét, valamint ezt a library-t innen töltheted le: http://www.ifarchive.org/ (calendar) : egy naptár, ami mindent elmond, amit tudni akarsz bármely napról és naplót is vezethetsz vele - nyomj ?-et, hogy megnézd a parancsokat 5) Tudtad? ---------- 5.1) A minibuffer parancsokat TAB-bal kiegészítheted. Ha kétszer nyomod meg, a kiegészítések megjelennek a következő ablakban. 5.2) A legtöbb 'információ' buffert (mint info, man, completions, help stb.) a q billentyű megnyomásával eltüntetheted. 5.3) Ha entert nyomsz egy alkönyvtárra, mikor címet írsz a minibufferbe, akkor egy mc-szerű felület jelenik meg. Szun Vu-kung szunvukung@freemail.hu