{{tag>Xenial programmation éditeur_de_texte IDE}} ---- {{ https://ftp.igh.cnrs.fr/pub/nongnu/emacs/icons/emacs5.png?100}} ====== Emacs : le couteau Suisse du développeur ====== **Emacs**, ou Editor MACroS, créé par Richard Stallman est un [[éditeur de texte]] très puissant, extensible et personnalisable. Une de ses particularités est qu'il est programmable entièrement dans son langage d'extension, Emacs Lisp, et que cela se fait à la volée, signifiant qu'on n'a jamais besoin de redémarrer l'éditeur pour voir les changements. Bien que d'apparence austère, avec un peu de prise en main, Emacs peut servir d'environnement de développement pour beaucoup de langages (LaTeX avec l'extension auctex, python, javascript, html...), de navigateur internet, de client mail, de client IRC, de psychanalyste... {{ :spacemacs-magit.png?450 | édition d'un fichier HTML et inspection des logs de git }} ===== Installation ===== Selon vos besoins, deux possibilités pour installer emacs sont détaillées ci-dessous. ====Version stable ==== [[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **[[apt>emacs|emacs]]** ( vous pouvez installer plusieurs versions ).\\ Pour avoir une interface graphique (GTK+ : [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **emacs**\\ Mais si vous ne voulez pas d'interface graphique : [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **emacs-nox**. Avec **emacs-nox**, on a les couleurs du profil de **nano** (avec, en plus, la coloration syntaxique). ==== Version ''snapshot'' depuis un dépôt non-officiel === [[https://launchpad.net/~ubuntu-elisp|L'Ubuntu Emacs Lisp team]] fournit un dépôt [[ppa|PPA]] contenant un snapshot beaucoup plus récent que celui des dépôts d'Ubuntu et régulièrement mis à jour. Il est important de noter que cette version n'est pas prise en charge par la communauté Ubuntu. En cas de problème, reportez-le directement à l'auteur du paquet. * [[:PPA|Ajouter le PPA]] **ppa:ubuntu-elisp/ppa**((https://launchpad.net/~ubuntu-elisp/+archive/ubuntu/ppa)) dans vos sources de logiciels; * [[:tutoriel:comment_modifier_sources_maj#recharger_la_liste_des_paquets|recharger la liste des paquets]]; * Puis, [[:tutoriel:comment_installer_un_paquet|installez les paquets]] **[[apt>emacs-snapshot]]** et **[[apt>emacs-snapshot-el]]**. Vous pouvez maintenant lancer Emacs à partir du menu des applications (choisir la version GTK) ou du terminal en tapant simplement ''emacs''. En appuyant sur Shift puis en cliquant dans la fenêtre d'Emacs, vous avez la possibilité de grossir la taille de la police. ===== Utilisation ===== Le :[[http://www.linux-france.org/article/appli/emacs/manuel/html/index.html|manuel en français]] Cette section n'a pour but que de vous familiariser avec les fonctions de base. Il est possible d'en apprendre plus grâce aux liens se trouvant en bas de la page. ==== Principes fondamentaux ==== Il est toujours possible d'écrire du texte dans le ou les fichiers ouverts (contrairement à Vim). À la différence du sens pris pour les interfaces graphiques, une fenêtre correspond uniquement au cadre. === Les modes === L'édition de texte s'appuie sur les modes majeurs et mineurs : * Les modes majeurs permettent de définir comment un type de fichier va être édité. Cela comprend la coloration syntaxique, la définition de commandes clavier, l'ajout de fonctionnalités spécifiques ... Il existe un mode majeur pour presque chaque langage de programmation. * Les modes mineurs permettent de modifier le comportement des modes majeurs. === Les commandes === Emacs se contrôle principalement via des raccourcis / commandes clavier. C-: correspond à **Ctrl+** M-: correspond à **Alt+** ''M'' correspond à la touche **META** qui est généralement associée à la touche **ALT** ==== Premier contact ==== Emacs propose un tutoriel pour apprendre à utiliser les commandes de base. Pour cela, une fois Emacs lancé tapez : C-h t ==== Commandes de bases ==== === Se déplacer === Pour se déplacer dans le texte, vous pouvez soit utiliser les touches fléchées ou utiliser les commandes suivantes : ^ commande ^ action ^ | C-v | Avance d'un écran | | M-v | Recule d'un écran | | C-n | Avance d'une ligne | | C-p | Recule d'une ligne | | C-f | Avance d'un caractère | | C-b | Recule d'un caractère | | M-f | Avance d'un mot | | M-b | Recule d'un mot | | C-a | Va au début de la ligne | | C-e | Va à la fin de la ligne | | M-a | Va au début de la phrase | | M-e | Va à la fin de la phrase | | C+M-f | Ctr+Alt enfoncé + f : (va a la fermeture de parenthèse correspondante**)_** | | C+M-b | Ctr+Alt enfoncé + b : **_(**va a l'ouverture de parenthèse correspondante) | | C-s-w | Lance la recherche du mot devant le curseur, suivi de C-s [C-r] permet de se déplacer au même mot suivant [précédent] | | C-s-w-w | Lance la recherche du mot en deux parties devant le curseur, suivit de C-s [C-r]...| === Éditer du texte === ^ commande ^ action ^ | | Efface le caractère précédent | | C-d | Efface le caractère suivant | | M- | Supprime le mot précédent | | M-d | Supprime le mot suivant | | C-k | Supprime du curseur à la fin de la ligne | | M-k | Supprime jusqu'à la fin de la phrase courante | | C-x u ou C-_ | Annuler la modification | | C-x C-x | Échange la position du curseur avec l'autre côté de la sélection | | C-espace | Définit le début de la région (la fin de la région est la position du curseur)| | C-w | Coupe la région sélectionnée | | M-w | Copie la région sélectionnée | | C-y [ou bien Shift+Insert] | Colle la copie précédente. Peut être suivi de M-y pour coller les anciennes sélections | === ouvrir, sauver, quitter=== ^ commande ^ action ^ | C-x C-f | Trouve un fichier. | | C-x C-s | Sauvegarde un fichier. | | C-x C-b | Liste des tampons. | | C-x C-c | Quitte Emacs. | === Que faire avec META-x (Alt-x)=== En appuyant sur Alt et x on fait apparaître le curseur tout en bas de la fenêtre. On peut alors exécuter toutes les fonctions interactives d'Emacs. Pour voir la liste de ses fonctions, on peut taper sur Tabulation. D'une manière générale, Tabulation complète la fonction que l'on cherche à effectuer. La flèche du haut permet de reprendre les fonctions effectuées récemment. Par exemple, tapez : M-x got //Tabulation// li //Tabulation// //Entrée// 22 //Entrée// Et vous arrivez à la ligne 22 en moins d'une seconde si vous y êtes habitué. ^ commande ^ action ^ |M-x ffap| ouvre le fichier dont le nom est sur le curseur (FindFileAtPoint)| |M-x goto-line 2| va a la ligne souhaitée | |M-x comment-region| commente la zone sélectionnée => rajoute ''#'' ou ''REM'' ou '';'' selon| |M-x un-comment-region| dé-commente la région => enlève ''#'' ou ''REM'' ou '';'' selon| |M-x ediff-buffers| lance la comparaison entre deux buffers (appuyer ensuite pipe [Alt Gr-touche 6] => vertical)| |M-x replace-regexp [tT]ata toto| remplace Tata ou tata par toto. Comme sed 's/[tT]ata/toto/'| **M-x flush-lines ^$** enlève les lignes vides (attention tapez deux fois sur le chapeau ^^ ). _________________________________________________________________________________________ Exemple de succession typique : on veut déplacer une ligne dans une autre fonction dont le nom est écrit à côté. **C-a-k** //;=> on coupe la ligne, puis on déplace le curseur devant le nom de la fonction// **C-s-w** [C-s] //;=> on lance la recherche, puis on tape autant de fois **C-s** que nécessaire pour aller à l'endroit que l'on cherche.// **C-y** //; => copie le texte coupé précédemment à l'endroit souhaité // Remarque générale : la séquence ' **C-a-k** //faire quelque chose (ie:cd..)// **C-y** ' marche aussi dans n'importe quel shell. ===== Installer des extensions ===== Comme tout éditeur qui se respecte, Emacs propose un système d'extensions (ou bien de paquets, "package" en anglais). C'est comme apt-get ou synaptic pour Ubuntu. Cela permet d'obtenir de nouvelles fonctionnalités et de personnaliser son usage très facilement. Avant ce système d'extensions, on devait copier-coller les codes des extensions dans sa configuration… imaginez le bazar. Maintenant, même de petites fonctionnalités sont disponibles dans un paquet. Le système d'extensions officiel est ''package.el''. En fait, avant son apparition on pouvait utiliser ''el-get''. Il fonctionne toujours et est complémentaire à ''package.el'', mais nous allons nous intéresser à ce dernier. ''package.el'' est inclus de base dans Emacs (depuis la version 24). On a plusieurs commandes à disposition : * lister les extensions disponibles : ''M-x package-list-packages'' * installer une extension : ''M-x package-install ENTREE un-paquet ENTREE'' * initialiser (comme "apt-get update") : ''M-x package-initialize''. En fait, comme toujours, utilisez TAB pour voir la liste des commandes possibles. Liens : * package.el : https://wikemacs.org/wiki/Package.el ==== Configurer les sources d'extensions ==== Comme Ubuntu et apt-get, package.el doit connaître des sources d'extensions. Il en a une par défaut, GNU Elpa (emacs lisp package archive). Cependant, ce dépôt ne contient pas les derniers paquets et les plus intéressants. On va donc ajouter MELPA avec ces quelques lignes dans votre configuration (votre init file, ''~/.emacs.d/init.el''): '' (add-to-list 'package-archives '("melpa" . "https://stable.melpa.org/packages/") t)'' Pour prendre en compte ces quelques lignes, redémarrez Emacs, ou placez-vous après la dernière parenthèse fermante et exécutez ''C-x C-e'' (soit ''M-x eval-last-sexp''), qui permet d'évaluer dans l'environnement d'Emacs la dernière expression. Maintenant vous verrez plus de paquets disponibles avec ''M-x package-list-packages'' et on va pouvoir en installer des biens ! Liens : * MELPA : https://wikemacs.org/wiki/MELPA * GNU ELPA : https://wikemacs.org/wiki/ELPA ==== Quelques extensions très pratiques ==== Et maintenant, voici une petite sélection personnelle: * [[https://wikemacs.org/wiki/Smex | smex]] permet de lancer les commandes avec ''M-x'' plus rapidement, de manière interactive. Lorsqu'on commence à taper une commande on voit la liste des commandes qui correspondent. On voit celles qu'on utilise le plus souvent en premières. * [[ https://github.com/bbatsov/projectile | projectile]] est une librairie de gestion de projets. Il permet beaucoup de choses, mais notamment de chercher récursivement des fichiers dans un projet (et toujours interactivement). * ''ido'' veut dire "Interactively do things" et il porte bien son nom. Il offre un mini-prompt interactif pour presque toutes les commandes qui en ont besoin, ce qui permet de moins taper et d'aller plus vite (pour ouvrir des fichiers, pour répondre à des confirmations oui/non, etc). * [[http://wikemacs.org/wiki/Magit | magit ]] pour utiliser git (le gestionnaire de versions) de manière visuelle, interactive et efficace, * [[https://wikemacs.org/wiki/Evil | evil-mode]] est une émulation de vim par dessus Emacs. Eh oui, car certains trouvent l'édition modale plus pratique ! (En effet, dans vim on peut supprimer une ligne entière avec ''dd'' lorsqu'avec Emacs de base c'est ''C-a C-k C-k''). * [[ http://melpa.org/#/move-text | move-text ]] pour déplacer la ligne ou la région sélectionnée avec ''M-up'' et ''M-down'', * ''elscreen'' pour avoir des onglets (mais pas un unique par fenêtre, cela ne vaut pas le coup lorsqu'on a des dizaines de buffers ouverts), ou [[https://github.com/ema2159/centaur-tabs/ | centaur-tabs]] pour des onglets plus jolis et plus configurables, * Helm pour une interface interactive à tout (c'est un puits sans fond), dans lequel on trouve helm-swoop qui est une sorte de ''grep'' sur le buffer courant mais interactif (on voit la sélection modifée selon notre frappe), * ''mpg123'' ou emms pour un lecteur de musique et vidéo, * [[https://www.djcbsoftware.nl/code/mu/mu4e.html | mu4e ]] pour lire ses mails, * [[https://melpa.org/#/flycheck-grammalecte|flycheck-grammalecte]] ajoute le correcteur grammatical dédié à la langue française Grammalecte, * [[https://github.com/joaotavora/eglot | eglot]], un client pour LSP, le Language Server Protocol (inclus par défaut à partir de Emacs 29), * des extensions pour org-mode, pour le navigateur de fichiers Dired, pour des moteurs de blogs, pour skype, des jeux, etc. On peut tout programmer en emacs-lisp ! ===== Commencer avec une configuration complète ===== On admettra que, de base, Emacs peut sembler rêche, et que cela demande un peu de travail pour installer les extensions dont on a besoin pour travailler. Alors si vous débutez, vous devriez au moins essayer une configuration complète que d'autres ont faite pour vous (on dit des [[https://wikemacs.org/wiki/Starter_Kits | "starter kits"]]). Une configuration très populaire est [[https://github.com/doomemacs/doomemacs | Doom Emacs]]. Elle est construite par modules (pour tel language de programmation par exemple) qu'on peut activer et désactiver facilement. Si vous souhaitez construire vous même votre init file, vous pouvez vous en inspirer. ===== Org-mode: gérer sa vie dans un fichier texte ===== Org-mode est un mode majeur d'Emacs extrêmement populaire. C'est souvent une des raisons qui fait basculer des gens vers Emacs. Avant de compléter cette documentation, je vous invite à regarder le site: http://orgmode.org Il est possible de faire une myriade de choses, mais en fait son utilisation est très simple. Il suffit de créer un fichier avec l'extension ''.org'' (''C-x C-f un-test.org'') et de regarder le menu pour voir comment bouger le contenu, se déplacer, exporter le document en latex, html, txt, markdown ou autre, etc ===== Écrire en LaTeX avec Emacs : exemple de configuration ===== Emacs est 100% configurable. Pour l'adapter à vos besoins, vous devrez créer un répertoire ".emacs.d" dans votre home si cela n'est pas déjà fait, et créer un fichier init.el dans ce répertoire : mkdir ~/.emacs.d gedit ~/.emacs.d/init.el Notez que le fichier init.el sert de fichier de configuration qui s'ouvre à chaque démarrage d'emacs. Pour plus de détails sur le sujet, référez-vous à [[https://www.emacswiki.org/emacs/InitFile|cette page]]. Dans le but de faciliter la configuration d'Emacs pour ceux qui souhaitent l'utiliser pour la première fois, nous donnerons ici un exemple de fichier de configuration pour Emacs, utilisé en particulier pour écrire avec LaTeX l'aide du plugin AucTeX (installez le via [[:synaptic]]). Dans un but de clarté, nous diviserons ici notre fichier init.el en plusieurs parties, pour commenter les parties qui nous semblent pertinentes. Voici ici notre partie pour AucTeX : ==AucTex-mode :== Le mode AucTeX est documenté en anglais principalement (voir le [[http://www.xemacs.org/Documentation/packages/html/auctex_4.html | quickstart-guide]] ). Ce mode permet bien sûr l'édition de fichiers Latex, avec des raccourcis, des listes de commandes connues, par exemple, ainsi qu'en facilitant l'accès à la documentation des paquets. Mais c'est aussi un environnement complet pour développer des codes Latex : il permet de compiler, de naviguer dans la sortie LaTeX, de déboguer son code ou même LaTeX. Les menus permettent de configurer les commandes basiques : indentation, source de noms de commandes connues, etc. Bien entendu, dans la même philosophie qu'Emacs, Auctex est totalement configurable (pour ceux qui ont le temps), et le système de menus permet de personnaliser de nombreux aspects. Tout d'abord, la documentation d'un paquet est rendue accessible grâce à la commande ** C-c ? **. Comme toutes les commandes auctex qui offrent un choix (ici le nom du paquet), on pourra écrire le début du nom recherché et compléter avec **Tabulation**. Ainsi, ** C-c ? Tabulation** affiche la liste de tous les paquets connus d'AucTeX. Au niveau de l'édition, **C-c C-s** permet d'introduire une (sous)-section, un paragraphe, etc. **C-c Ret Tabulation** renvoie toutes les commandes connues d'AucTex (une fois le mode installé). **C-c C-e** ouvre un environnement - comme itemize, tabular, etc. - dont il faut donner le nom (compléter à l'aide de tab). On peut alors créer des lignes "\item" avec ** M-Ret**. L'interface de compilation sous AucTeX permet de compiler et gérer les fichiers de sortie, les messages, etc. La compilation peut se faire de différentes manières : document intégral, partie du document, etc. Une fois une commande de compilation lancée (**C-c C-c** pour tout le document, **C-c C-r** pour la région sélectionnée, etc.), on peut choisir de compiler avec Latex, BibTeX, ... ou encore View (pour visualiser), Clean (pour nettoyer les fichiers intermédiaires), Clean All (pour tout nettoyer, y compris les documents produits). La sortie de compilation est affichée avec **C-c C-l**, et on va à la prochaine erreur avec ** C-c C-`**. On pourra définir ce qui sera considéré comme erreur (notamment parmi les bad-boxes et warnings). Rédaction en cours ==== Avoir des thèmes pour Emacs ==== Vous pouvez changer le thème d'Emacs, c'est-à-dire toutes les couleurs qui sont affichées. [[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **emacs-goodies-el** Pour Ubuntu « Gutsy Gibbon » 7.10 il suffit de [[apt://emacs-goodies-el|cliquer ici]]. Relancez Emacs s'il était déjà lancé. Sous Emacs, tapez la commande ''M-x color-theme-select'' (M-x signifie sur un PC de laisser la touche ALT appuyée et d'appuyer sur la touche x. Tapez ensuite la commande color-theme-select, vous pouvez utiliser la touche de tabulation TAB pour compléter comme dans un terminal). Vous avez alors toute la liste des thèmes. Pour voir ce que chacun donne, placez le curseur clignotant sur une des lignes et tapez ENTRÉE. Attention à ne pas cliquer sur une adresse email car cela vous ouvrirait l'éditeur d'email intégré à Emacs (C-x k ENTRÉE pour quitter au cas où ça serait déjà fait :-)). Une fois que vous avez choisi votre thème Emacs préféré, ajoutez les lignes suivantes à la fin de votre fichier ''~/.emacs'' en remplaçant ''color-theme-gnome2'' par le thème que vous avez choisi. Le nom du thème à taper ici est affiché sur la deuxième ligne de la page qui s'affiche quand vous tapez 'd' à la place de taper ENTRÉE sur le thème. (require 'color-theme) (color-theme-gnome2) Si vous rencontrez une erreur avec emacs22-gtk au lancement, le fichier ''~/.emacs'' doit être configuré comme ceci : (require 'color-theme) (setq color-theme-is-global t) (color-theme-gnome2) ou comme ceci : (require 'color-theme) (color-theme-initialize) (color-theme-gnome2) ===== Problèmes ===== Copier/Coller ne marche pas bien sous Ubuntu **entre** Emacs et les autres logiciels (Firefox etc..) (Copier/coller du type : surligner le texte=copier / bouton du milieu de la souris =coller. ) Il semblerait que Metacity (serveur graphique par défaut d'Ubuntu) n'implémente pas la 'Primary Selection' (~clipboard) ou bien que le middle click soit utilisé pour autre chose. Une solution est d'installer //parcellite//. (à débattre) ==== Utilisation à 100% du CPU ==== Si vous utilisez la version '''snapshot''' d'Emacs et que votre CPU est utilisé à 100%, voici une solution : [[:tutoriel:comment_editer_un_fichier|Éditez le fichier]] /usr/share/emacs/site-lisp/semantic/semantic-idle.el\\ et commentez (ajouter **;;** devant la ligne) ces deux lignes: ligne 290 GJW(semantic-idle-scheduler-kill-timer) ligne 294 GJW(semantic-idle-scheduler-setup-timer) ))) :!: gardez bien les 3 parenthèses :!: ensuite lancez Emacs en tant que root et tapez dans le mini-buffer M-x byte-compile-file puis /usr/share/emacs/site-lisp/semantic/semantic-idle.el pour compiler le fichier lisp. Maintenant, il faut copier le fichier compilé dans le bon dossier pour qu'Emacs l'utilise : sudo cp -v /usr/share/emacs/site-lisp/semantic/semantic-idle.elc //usr/share/emacs-snapshot/site-lisp/semantic/ sources (anglais): [[https://www.togaware.com/linux/survivor/Emacs_Using.html]] ===== Voir aussi ===== * [[https://fr.wikibooks.org/wiki/Emacs|Le wikilivre sur emacs]], un projet de manuel collaboratif en Français sur Emacs. * [[https://www.tuteurs.ens.fr/unix/editeurs/emacs.html|Tutoriel Emacs sur le site des informaticiens de l'ENS]] * [[http://www.traduc.org/docs/HOWTO/vf/Emacs-Beginner-HOWTO.html|Débuter sous Emacs]] * [[http://www.gnu.org/software/emacs/|(en) Le site officiel]] * [[http://www.emacswiki.org/cgi-bin/emacs-en|Le vieux wiki (multilingue)]] * [[https://wikemacs.org/index.php/Main_Page | Le nouveau wiki (en anglais)]] * [[https://peadrop.com/blog/2007/01/06/pretty-emacs/|(en) Procédure d'installation]] * [[http://www.math.jussieu.fr/~han/emacs/.emacs|Exemple de .emacs ou init.el sur le site de jussieu]] * [[http://groups.google.fr/group/fr.comp.text.tex/browse_thread/thread/c3ad96f561ab0957/9fd0c3bb812fde2e?lnk=gst&q=emacs+template#9fd0c3bb812fde2e|Discussion utile sur google group à propos d'une utilisation d'Emacs et de LaTeX]] * [[https://www.emacswiki.org/emacs/AUCTeX|Sur AucTeX]] * **(fr)** [[https://computerz.solutions/emacs-org-mode/|Installation & utilisation simple d'Emacs]] - Plusieurs tutoriels sont disponibles en fin de page. * la chaîne [[https://www.youtube.com/channel/UCkRmQ_G_NbdbCQMpALg6UPg | Emacs Rocks]] sur Youtube ----