.. -*- mode: rst -*- ================== Tutoriel GNU/Emacs ================== .. include:: .. include:: Software Freedom Day / Emacs Ninja Kung-Fu Dakar - 26 septembre 2009 Agence Universitaire de la Francophonie :Auteurs: Ousmane Wilane :Version: $Id: emacs.rst 20 2009-09-27 11:02:55Z wilane $ .. class:: left Introduction ============ - Emacs est le plus puissant éditeur de texte au monde, sérieux c'est pas de la pub. - Emacs veut dire Editor MACroS - Emacs veut dire Eight Megabytes And Constantly Swapping pour les cons - Emacs veut dire des fois ESCAPE META ALT CONTROL SHIFT ou ``keyboard kung fu`` - C est la touche Ctrl et M la touche Meta (Alt), C- signifie maintenir la touche C enfoncée. - C-h t lance le tutoriel en ligne C'est quoi ========== - Emacs est dit ``modeless`` opposé à ``vi``, on utilise des combinaisons de touche (touche pour aller vite), qui sont associées à des commandes (``next-line``, ``forward-word``). Cette association est stocké dans des ``keymaps``. - Avec Emacs vous pouvez: éditer du texte, programmer efficament, twitter, chatter en jabber, lire vos courriels et les newsgroups, surfer le web, - Emacs est écrit en C - Emacs contient un dialecte LISP (emacs lisp) pour l'étendre, la limite est l'imagination. Démarrage / Arrêt ================= Avec un argument:: emacs monfichier.py ou Sans argument:: emacs Pour sortir de emacs: C-x C-c (``save-buffers-kill-emacs``) Pour suspendre emacs: C-z (``suspend-emacs``) Opérations sur les fichiers (0) =============================== - C-x C-f (f pour find). Le curseur/pointeur (apellé plus correctement ``Point`` [*]_) ira dans la zone apellée ``minibuffer`` [*]_ - C-x b pour basculer entre plusieurs ``buffer`` (tampon) .. [*] Le terme ``Point`` vient du caractère ``.`` qui était la commande TECO (langage dans lequel la première implémentation d'Emacs a été écrite) pour accèder à cette valeur. .. [*] La zone s'apelle en fait ``echo area``, elle est utilisée pour afficher le ``minibuffer`` utilisé pour lire des arguments. Opérations sur les fichiers (1) =============================== - Vous entrer du texte tout simplement. - DEL est généralement associé à ``del-backward-char``, RET à ``newline`` et l'entrée d'un caractère à ``self-insert`` - C-EPACE permet de marquer le début d'une zone - M-w pour copier et C-w pour couper (placé dans le tampon ``kill ring``), C-y pour coller. C-k coupe le reste de la ligne à partir du curseur. - Les copie/couper gèrent un historique, M-y après un C-y permet de remonter dans l'historique Opérations sur les fichiers (2) =============================== - C-x 2 permet de scinder l'écran en deux (horizontal) - C-x 1 pour revenir à un seul ``frame`` - C-x 3 permet de scinder l'écran en deux (vertical) - C-s et C-r pour chercher dans un buffer (RET pour quitter le mode recherche) - C-s C-s permet de refaire la dernière recherche - C-s C-w pour rechercher le texte sous le curseur Opérations sur les fichiers (3) =============================== - Pour entrer un caractère non imprimable (e.g C-g) il faut le faire précéder de C-q ``quoted-insert``. - C-a (``beginning-of-line``) début de la ligne. - C-e (``end-of-line``) fin de la ligne - C-f (``forward-char``) caractère suivant - C-b (``backward-char``) caractère précédant - M-f (``forward-word``) mot suivant - M-b (``backward-word``) mot précédant Opérations sur les fichiers (4) =============================== - C-n (``next-line``) ligne suivante - C-p (``previous-line``) ligne précédante - M-< (``beginning-of-buffer``) Début du tampon - M-> (``end-of-buffer``) fin du tampon - M-x goto-char - M-x goto-line - C-x C-n utilise la colone courante comme cible ``semipermanent`` - C-u C-x C-n annule C-x C-n - C-o (``open-line``) ajouter une ligne vide après le point - C-x C-o (``delete-blank-lines``) supprimer toutes les lignes vides consécutives sauf une Opérations sur les fichiers (5) =============================== - C-d (``delete-backward-char``) - C-k (``delete-char``) - M-d (``kill-forward``) - M-DEL (``backward-kill-word``) - C-x C-s (``save-buffer``) - M-= (``count-lines-region``) - C-_ (``undo``) - C-x ESC ESC (``repeat-complex-command``) re-execute une commande récente - M-x list-command-history Affiche l'historique des commandes Aide ==== - C-h a regexp - C-h b affiche les associations de touche - C-h c key affiche la commande exécutée par ``key`` - C-h k key affiche le nom et la doc de la commande exécutée par ``key`` - C-h m affiche la doc du mode majeur actuel - C-h v var affiche la doc de la variable LISP ``var`` Recherche et remplacement ========================= - C-s (``isearch-forward``) recherche incrémentiel avant - C-r (``isearch-backward``) recherche incrémentiel arrière - Pour recherche une nouvelle ligne entrez C-j comme chaîne recherchée (pour les autres caractères non imprimables il faut utiliser C-q) - C-g permet de quitter (``quit``) - C-s RET C-w mots permet de recherher des mots ignorant les éléments de ponctuation. - C-r RET C-w Recherche et remplacement (regexp) ================================== - C-M-s (``isearch-forward-regexp``) et C-M-r (``isearch-backward-regexp``) - Si vous entrez ESPACE lors d'une recherche regexp, il est interprété comme une séquence quelconque de blancs (retour ligne compris) - Pour spécifier juste un espace, utilisez C-q - Notez que dans une recherche regexp incrémentiel, le cuseur peut remonter si un nouveau critère à une correspondance plus haut ``(foo\|bar)`` - Caractères spéciaux: ``'$' '^' '.' '*' '+' '?' '[' ']' '\'`` les autres doivent être précédés de ``'\'`` pour être spéciaux (e.g ``'\|' '\)' '\d'``) Recherche et remplacement (Remplacer) ===================================== - M-x replace-string - M-x replace-regexp - Après un remplacement vous pouvez retourner au point d'origine avec ``C-u C-ESPACE`` - Pour ``replace-regexp`` la chaine de remplacement peut ne pas être constante, ``'\&'`` correspond à la correpondance trouvée et ``'\d'`` correpondant à la d-ième correspondance dans les regroupements. - M-% (``query-replace``) et ``query-replace-regexp`` permettent des remplacements ciblés Commandes pour les langues humaines (0) ======================================= - M-a début d'une phrase (``backward-sentence``) - M-e find de phrase (``forward-sentence``) - M-k (``kill-sentence``) couper jusqu'à la fin de la phrase - C-x DEL (``backward-kill-sentence``) - M-{ (``backward-paragraph``) - M-} (``forward-paragraph``) Commandes pour les langues humaines (1) ======================================= - M-q (``fill-paragraph``) - C-x f (``set-fill-column``) - M-l (``downcase-word``) - M-u (``upcase-word``) - M-c (``capitalize-word``) - C-x C-l (``downcase-region``) et C-x C-u (``upcase-region``) Compilation et tests de programmes (0) ====================================== Emacs permet une série de traitements intéréssants pour les programmeurs: - Déplacer ou marquer des expressions délimitées (``def``, ``defunf``, ``function``, etc) - Montrer la correspondances des parenthèses - Insérer, aligner et ajuster des commentaires. - Suivre les règles d'indentation - Emacs dispose de mode majeur pour la plupart des langages (Lisp, Scheme, Awk, C, C++, Perl, Python, Fortran, Muddle, etc). Il dispose aussi d'un mode majeur pour les ``Makefile``. - Certains mode majeurs conviennent pour l'édition d'autres programmes. Compilation et tests de programmes (1) ====================================== - C-M-f (``forward-sexp``) - C-M-b (``backward-sexp``) - C-M-k (``kill-sexp``) - C-M-t (``transpose-sexp``) - C-M-a (``beginning-of-defun``) - C-M-e (``end-of-defun``) - C-M-h (``mark-defun``) - C-M-q (``indent-sexp``) - C-M-\ (``indent-region``) Dired éditeur de repèrtoire =========================== - C-x d (``dired``) - d marquer pour suppression - u supprimer la marque de suppression - x supprimer les fichier marqués - # marquer les fichier ``auto-save`` pour la suppression - % d regexp RET marquer tous les fichiers correspondant à la regexp pour suppression - f Visite le fichier Calendrier et agenda (0) ======================== - C-u M-x calendar - C-a Début de la semaine (``calendar-beginning-of-week``) - C-e fin de la maine (``calendar-end-of-week``) - M-a Début du mois (``calendar-beginning-of-month``) - M-e Début du mois (``calendar-end-of-month``) - M-< Début de l'année (``calendar-beginning-of-year``) - M-> Fin de l'année (``calendar-end-of-year``) Calendrier et agenda (1) ======================== - C-x < (``scroll-calendar-left``) - C-x > (``scroll-calendar-right``) - h (``calendar-cursor-holidays``) - M-x holidays - S couché etlevé du soleil (``calendar-sunrise-sunset``) - M (``calendar-phase-of-moon``) Calendrier et agenda (1) ======================== - Pour gérer l'agenda il suffit de créer le fichier ``~/.diary`` - d affiche l'entrée dans l'agenda pour la séléctionnée (``view-diary-entries``) - s affiche l'agenda (``show-all-diary-entries``) - m marquer toutes les dates visibles ayant une entrée dans l'agenda (``mark-diary-entries``) - u effacer les marques (``calendar-unmark``) - Il existe un nombre de commande pour gérer son agenda à partir du calendrier Exemple d'extensions ==================== - Définir ``.emacs`` et ``.emacs.d`` - Installer auto-install - Copier http://www.emacswiki.org/emacs/auto-install.el dans ``.emacs.d`` .emacs:: (add-to-list 'load-path (expand-file-name "~/.emacs.d")) (add-to-list 'load-path (expand-file-name "~/.emacs.d/auto-install")) (require 'auto-install) (auto-install-update-emacswiki-package-name t) (setq auto-install-directory "~/.emacs.d/auto-install/") Exemple d'extensions (2) ======================== - Testez l'installation d'un paquet: M-x auto-install-from-emacswiki RET, et entrez ``twit.el`` - Testez l'installation en batch: M-x auto-install-batch RET, et entrez ``icicles`` ou ``ido``. - C-c C-c pour installer - C-c C-d pour voir la différence si vous avez une ancienne version (ne fait rien sinon) - C-c C-q pour annuler Identica/Twitter ================ - http://www.emacswiki.org/emacs/TwIt - http://www.emacswiki.org/emacs/Identica-mode - Démo Wanderlust ========== - http://www.gohome.org/wl/ - http://www.emacswiki.org/emacs/WanderLust - Démo Ressources ========== - GNU Emacs Manual par Richard M. Stallman ISBN 1-882114-02-07 - Learning GNU Emacs, Third Edition ISBN-13: 978-0596006488 - Site de réfèrence: http://www.gnu.org/software/emacs/ - Table de touche: http://www.math.uh.edu/~bgb/emacs_keys.html - Emacs Wiki: http://www.emacswiki.org/emacs - Manuels: http://www.unix-manuals.com/refs/emacs/emacs.html