web-dev-qa-db-fra.com

Quels sont les avantages et les inconvénients de Vim et Emacs?

Comment compareriez-vous ces éditeurs? Quels sont les avantages et les inconvénients de chacun?

[note] Ce n'est pas destiné à être répondu par ceux qui "détestent l'un et aiment l'autre" ou ceux qui n'ont pas utilisé les deux.

388
John Berryman

J'utilise les deux, bien que si je devais en choisir un, je sais lequel je choisirais. Je vais quand même essayer de faire une comparaison objective sur quelques points.

  • Disponible partout? Si vous êtes un administrateur système professionnel qui travaille avec des systèmes Unix, ou un utilisateur expérimenté sur des appareils embarqués (routeurs, smartphones avec Busybox,… ), vous devez connaître vi (pas Vim), car il est disponible sur tous les systèmes Unix et la plupart des systèmes de type Unix, qu'ils soient de bureau, de serveur ou intégrés. Pour un utilisateur ordinaire, cet argument n'est pas pertinent: Emacs est facilement disponible pour chaque système d'exploitation de bureau/serveur, et puisqu'il prend en charge l'édition à distance, il suffit de l'avoir sur votre ordinateur de bureau de toute façon.

  • Ballonné? Emacs était une fois avec humour pour "Huit mégaoctets et échange constant". À l'heure actuelle, sur ma machine, Google Chrome a besoin d'environ autant RAM par onglet que Emacs pour 100 fichiers ouverts, et je ne mentionnerai même pas Firefox Au 21e siècle, le ballonnement Emacs n'est qu'un mythe.

    Feature le ballonnement n'est pas un problème non plus. Si vous ne l'utilisez pas, vous n'avez pas besoin de savoir qu'il est là. Les fonctionnalités d'Emacs restent à l'écart lorsque vous ne les utilisez pas et la documentation est très bien organisée.

  • Heure de démarrage : les partisans de Vi (m) se plaignent du temps de démarrage d'Emacs. Oui, Emacs est lent à démarrer, mais ce n'est pas grave: vous démarrez Emacs une fois par session, puis vous connectez au processus en cours avec emacsclient. Le démarrage lent d'Emacs est donc principalement un mythe.

    Il existe une exception, lorsque vous vous connectez à une machine distante et que vous souhaitez y modifier un fichier. Le démarrage d'un Emacs distant est (généralement) plus lent que le démarrage d'un Vim distant. Dans certaines situations, vous pouvez laisser un Emacs fonctionner dans Screen. Vous pouvez également modifier des fichiers distants depuis Emacs, mais cela interrompt le flux si vous êtes dans une session ssh dans un terminal. (Depuis XEmacs 21 ou GNU Emacs 23, vous pouvez ouvrir une fenêtre Emacs à partir d'une instance X en cours d'exécution à l'intérieur d'un terminal.)

    En tournant les tables, j'ai observé que Vim prenait beaucoup plus de temps à charger qu'Emacs (vim -u /dev/null contre. emacs -q). Certes, c'était sur une étrange plateforme (Cygwin).

  • Courbe d'apprentissage initiale: Cela varie d'une personne à l'autre. le graphique de Michael Mrozek m'a fait rire. Sérieusement, je conviens que la courbe d'apprentissage de Vim commence raide, plus raide que tout autre éditeur, bien que cela puisse être atténué en utilisant gvim.

    Depuis que j'ai dissipé quelques mythes Emacs, permettez-moi de dissiper un mythe vi: un éditeur modal n'est pas difficile ou pénible à utiliser. Cela prend un peu d'habitude, mais après un certain temps, cela semble très naturel. Si je devais repenser vi (m), je garderais certainement les modes.

  • Courbe d'apprentissage asymptotique: Vim et Emacs ont beaucoup de fonctionnalités, et vous en découvrirez de nouvelles après des années d'utilisation.

  • Productivité : C'est un sujet extrêmement difficile. Les partisans de vi (m) soutiennent que vous pouvez faire à peu près tout sans quitter le rang d'origine, ce qui vous rend plus efficace lorsque vous en avez le plus besoin. Les partisans d'Emacs rétorquent qu'Emacs a beaucoup de commandes qui ne sont pas fréquemment utilisées, donc ne garantissent pas une liaison de clé, mais sont sacrément pratiques lorsque vous en avez besoin ( référence xkcd obligatoire ).
    Mon opinion personnelle est qu'Emacs gagne finalement à moins que vous ayez un handicap de frappe (et même alors, vous pouvez configurer Emacs pour ne nécessiter que des séquences de touches et non des combinaisons comme Ctrl+ lettre). Les touches de la ligne de départ sont agréables, mais elles ne sont souvent pas vraiment gagnantes car vous devez changer de mode. Je ne pense pas que Vim puisse faire quoi que ce soit de manière significative plus efficacement qu'Emacs, alors que l'inverse est vrai.

  • Personnalisation : Les deux éditeurs sont programmables, et il existe un ensemble complet de packages disponibles pour les deux. Cependant, Vim est un éditeur avec un langage macro; Emacs est un éditeur écrit en LISP avec quelques primitives ad-hoc. Emacs gagne de façon spectaculaire lorsque vous essayez de faire quelque chose auquel les auteurs n'ont tout simplement pas pensé. Cela ne se produit pas tous les jours, mais cela s'accumule au fil des ans.

  • Plus qu'un éditeur : Vim est un éditeur. Emacs n'est pas seulement un éditeur: c'est aussi un IDE, un gestionnaire de fichiers, un émulateur de terminal, un navigateur Web, un client de messagerie, un client de news, ... Que ce soit une bonne ou une mauvaise chose est un sujet de débat. Mais vous pouvez utiliser Emacs comme un simple éditeur (voir ci-dessus "ballonnement des fonctionnalités").

  • En tant qu'IDE : Vim et Emacs prennent en charge de nombreux langages de programmation et autres formats de texte. Au-delà des bases telles que la coloration syntaxique et l'indentation automatique, les deux ont des fonctionnalités avancées IDE telles que les recherches de références croisées de code et de documentation, les insertions et refactorisations assistées, le contrôle de version intégré et la capacité compilation et passez à la première erreur.

    Un domaine où Emacs est nettement meilleur que Vim est l'interaction avec les sous-processus asynchronous. C'est à ce moment-là que vous démarrez une longue compilation et que vous voulez faire autre chose dans la même instance d'éditeur pendant que le compilateur tourne. Ou lorsque vous voulez interagir avec une boucle Read-eval-print - Emacs brille vraiment à cela, Vim n'a que des hacks maladroits à offrir. Néanmoins, une nouvelle fourchette de vim, Neovim s'est avérée avoir corrigé cela et implémenté d'autres corrections de bugs non implémentées dans stock vim.

Je vais publier ce que je pense être les principaux avantages de chacun:


Emacs a considérablement plus d'extensions pour vous permettre de faire des tâches qui ne sont que vaguement liées à l'éditeur de texte, comme parcourir le système de fichiers ou jouer avec le contrôle de version, et des extensions qui ne sont en aucun cas liées à l'éditeur de texte, comme lire des flux RSS. Si vous voulez un environnement au lieu d'un simple éditeur de texte, Emacs sera meilleur que Vim. Je pense aussi qu'Emacs est beaucoup plus facile à apprendre, malgré ce que certains voudraient vous faire croire:

Editor learning curve comic

En particulier, je pense qu'un utilisateur Emacs novice sera plus rapide qu'un utilisateur Vim novice


En revanche, Vim est indéniablement plus rapide. Il semble que ce soit un élément central de l'argument, mais à mon avis, il n'y a aucun concours du tout; Je me considère comme un utilisateur courant d'Emacs, et je ne suis pas à la hauteur des deux personnes que je connais qui ont une connaissance égale de Vim. Le problème est que le nombre de personnes qui maîtrisent suffisamment Vim pour être aussi rapide est incroyablement petit (sur les 30 personnes à qui je parle régulièrement et qui utilisent Vim, je pense qu'une seule est exceptionnellement douée). Il y a un grand écart entre le gain de vitesse possible et le gain de vitesse réel que vous atteignez; Les utilisateurs d'Emacs seront presque aussi rapides que 99% des utilisateurs de Vim, et (comme je l'ai dit dans la section Emacs), les utilisateurs débutants d'Emacs seront probablement plus rapides que les utilisateurs débutants de Vim.

272
Michael Mrozek

Il existe un vi disponible sur tous les systèmes Unix (ou presque), mais vous ne pouvez pas le dire à propos d'un autre éditeur. C'est la raison n ° 1, imo, d'apprendre et de vous familiariser avec vi (veuillez noter 'vi' et non 'vim'). Je n'ai jamais vu Emacs disponible dans une installation par défaut.

Je ne dis pas de ne pas utiliser Emacs ou c'est la seule raison d'utiliser Vim, mais quand vous voulez pouvoir utiliser des systèmes Unix qui ne sont pas les vôtres ... vi fait partie de l'universel Langue.

83
xenoterracide

Je pense qu'ils sont tous les deux géniaux. Je pense que l'un ou l'autre peut faire à peu près tout ce que vous pouvez imaginer, et ils sont tous les deux si personnalisables qu'au moment où vous avez fini de les personnaliser, ils sont tous les deux exactement ce que vous voulez qu'ils soient, ni plus ni moins.

Emacs se démarque de moi en étant un peu plus proche (bien qu'il ne réponde toujours pas) aux normes ISO/CEI d'utilisation et de cohérence des interfaces utilisateur, et ne joue donc pas autant de tours avec vos "instincts" à propos de ce vim. La durée de vie des instincts que vous avez développés en travaillant avec d'autres programmes ne fonctionnera pas contre vous.

Vim est un modèle complètement différent, et à bien des égards, il est supérieur en lui-même dans la mesure où il repose beaucoup moins sur les séquences Cntrl/Alt, et à la place uniquement sur ses modes, vous permettant de garder vos durs sur la ligne d'accueil et de taper plus rapide. Mais vim est pratiquement unique, et à moins que vous n'installiez un logiciel d'accompagnement très inhabituel (par exemple, Vimperator, Jumanji/Zathura, etc.), les instincts que vous développez en travaillant avec vim ne passeront pas à d'autres programmes et vice-versa. Cela dit, je me suis installé sur vim moi-même. Vous devez vous y installer tôt ou tard, pour le meilleur ou pour le pire, car il est difficile de maîtriser les deux.

24
frabjous

J'utilise les deux régulièrement. Je considère Emacs comme un éditeur "live in", alors que j'utilise Vim pour des tâches rapides et ponctuelles. Superficiellement, Emacs est beaucoup plus gonflé que Vim, et il n'est donc vraiment pas aussi pratique de "déclencher" que Vim, mais je trouve également que les philosophies de l'interface utilisateur de l'un à l'autre soutiennent ce paradigme. Emacs est beaucoup plus conçu pour vous garder à l'intérieur, ce qui rend les choses agréables et confortables pour que vous n'ayez pas à partir, tandis que vim est beaucoup plus "Unixy" et se considère comme faisant partie d'une plus grande ceinture porte-outils.

Beaucoup de gens fuient Emacs en raison de sa forte dépendance à bucky bits , mais c'est une raison assez stupide pour moi. Le véritable pouvoir d'Emacs sur Vim est la personnalisation, et avec la puissance de Viper, etc., ce n'est vraiment pas un problème. Vim-Script fournit certainement son propre niveau de personnalisation, et si, par exemple, votre langage de programmation préféré n'a pas été fourni avec un surligneur de syntaxe approprié, vous pouvez certainement en préparer un, mais Emacs est finalement une machine LISP auto-hébergée, et dans à la fin, vous pouvez en faire beaucoup, beaucoup plus en jouant. Il n'y a tout simplement pas d'outils tels que gnus ou org-mode dans Vim, pour n'en nommer que quelques-uns. En un mot, Emacs n'est pas seulement un éditeur, c'est pratiquement un putain de système d'exploitation.

Pour manipuler du texte, je dirais qu'ils sont exactement au même niveau.

21
Eli Frey

Je mettrai ma valeur de 0,02 $, car j'ai passé plusieurs années à utiliser emacs et XEmacs, puis à vim. Pour être honnête, j'avais utilisé vi un peu autour de 1990-1992, donc je connaissais son interface utilisateur.

Emacs

  • Emacs a été décrit comme un système LISP qui vient d'être utilisé pour écrire un éditeur, et il y a un grain de vérité là-dedans. Vous pouvez implémenter à peu près tout ce que vous voulez dans elisp si vous voulez prendre votre temps pour comprendre l'environnement. Je ne peux pas dire que je l'ai jamais aussi bien connu, mais j'ai fait des trucs de frig à l'occasion. Emacs et Xemacs ne sont pas totalement compatibles à ce niveau, donc les scripts tiers peuvent s'exécuter sur l'un mais pas sur l'autre.

  • Il a été observé que RMS et certains autres hackers Emacs importants ont dû se retirer de la programmation en raison de problèmes avec OOS, où Bill Joy, Bram Moolenaar et divers autres luminaires vi sont toujours là. Emacs est dur sur vos petits doigts.

  • Emacs est un système beaucoup plus catholique que vi, et est considéré comme un exemple canonique de enveloppe logicielle . Avec Netscape, c'est l'une des contributions de jwz pour prouver cette loi.

Une fois, j'ai fait une chose unique avec xemacs: le faire fonctionner sur une machine et ouvrir une session x sur un xterminal (en fait un vieux Sun 3/60 réutilisé) dans une pièce différente contre le même tampon sur la même instance en cours d'exécution.

Avantages: Extensible, plus puissant que tout autre éditeur connu de l'homme, intégration mature avec à peu près tous les principaux outils de programmation de logiciels libres.

Inconvénients: Ergonomie douteuse, elisp n'est pas facile à apprendre.

Vim

Disclamer - Je suis passé d'emacs à vim il y a environ 10 ans et j'utilise habituellement vim sur les systèmes Windows et Unix/Linux.

  • Vi et ses descendants ont une très bonne fonction de macro clavier pour automatiser les tâches d'édition. La fonction de script dans vim n'est pas aussi sophistiquée qu'elisp, mais vous pouvez la construire avec le support de Python, Tcl, Perl et peut-être d'autres systèmes. Je n'ai écrit qu'occasionnellement des scripts (en dehors des fichiers .vimrc) pour vim.

  • Vim a une empreinte plus petite qu'emacs, mais ce n'est pas très grave de nos jours.

  • La documentation et l'aide en ligne de Vim sont assez bonnes. Emacs a une assez bonne documentation en ligne, mais je ne pense pas qu'elle soit aussi complète que celle de vim.

  • Vim hérite de l'interface utilisateur modale excentrique de vi, mais a la capacité de se comporter un peu comme un éditeur sans mod, car vous pouvez naviguer en mode insertion. Sous Windows, il peut se comporter de manière assez similaire à une application Windows.

Avantages: Bonne facilité de macro de clavier, extensibilité et script passablement bons, mais pas aussi bons qu'emacs. Les éditeurs dérivés de Vim ou vi sont standard sur la plupart sinon toutes les distributions Unix ou Linux à usage général. Sans doute une meilleure ergonomie.

Inconvénients: L'interface utilisateur modale semble étrange aux personnes habituées aux interfaces utilisateur Windows. Moins de problème avec vim ces jours-ci.

J'utilise normalement Vim, mais ce sont tous deux d'excellents éditeurs.

Apprendre à utiliser vi était méchant, mais j'ai réussi et j'ai appris à l'aimer. Mes moments les plus frustrants ont été lorsque la touche de verrouillage des majuscules était activée. Vous pouvez essayer avec gVim, mais l'un des plus grands avantages de vi et Emacs est la possibilité de faire des trucs soignés tout en gardant les mains sur le clavier, et gVim est susceptible de vous garder à l'aide de la souris. (Apprendre à jouer à des jeux roguelike en même temps m'a permis de m'entraîner avec les touches de déplacement du curseur, mais m'a parfois fait essayer de me déplacer en diagonale dans les documents.)

Emacs est probablement plus accessible. Il est sans modèle et vous n'allez pas vous gâcher en appuyant sur la touche de verrouillage des majuscules. L'idée de contrôler l'éditeur en tapant des lettres avec la touche de contrôle vers le bas ne devrait pas être trop étrangère aux utilisateurs avancés, bien que les touches réelles pour faire les choses sembleront sauvages et arbitraires pour l'utilisateur Windows/Mac OS X typique. Encore une fois, les versions qui vous permettent d'utiliser la souris ne vous rendent pas service à long terme.

Les deux nécessitent un certain niveau d'expertise pour être utilisés efficacement. Contrairement, par exemple, au Bloc-notes, vous ne pouvez pas simplement vous asseoir et modifier.

Les deux sont configurables, bien que pour mon argent, l'écriture d'extensions dans le même LISP dans lequel l'éditeur est écrit rend l'expérience plus fluide. (Emacs, tel qu'il est normalement distribué, n'est pas vraiment un éditeur. C'est un environnement LISP conçu pour le traitement de texte, avec beaucoup de logiciels pré-écrits, y compris un éditeur. D'où la blague "Emacs fait un Shell décent, mais il pourrait utiliser un meilleur éditeur. ")

J'utilise normalement Vim car, après une formation approfondie, c'est plus facile. Cela peut être dû aux avantages du système de modes, où un grand nombre de commandes sont disponibles en utilisant un seul doigt près des lignes de départ, ou "syndrome du bébé canard", qui s'applique beaucoup aux éditeurs: une fois que vous en avez appris une bonne, vous vous en tenez généralement à elle.

Vous ne vous tromperez pas non plus.

15
David Thornley

Je pense que le commentaire "vim est modal" ci-dessus est incorrect. Vim a des commandes. Vous pouvez faire "11aNow is the time for all good men .." et vous retrouver avec 11 nouvelles lignes de texte identiques dans votre fichier. C'est une commande, pas un mode. Mais il y a en fait une différence très basique entre les commandes Vim et les commandes Emacs. Je ne suis pas tout à fait sûr de pouvoir le décrire, mais Eric Fischer a incorporé l'édition de ligne de style Emacs dans un pilote TTY il y a 10 ans et a fait publier un article à ce sujet:

http://www.usenix.org/event/usenix99/full_papers/fischer/fischer.pdf

Il a constaté que l'édition de lignes de style Emacs était fondamentalement différente de celle de style vi.

Emacs a donc l'avantage que beaucoup d'autres choses (bash, gnuplot, zsh, ksh certaines autres auxquelles je ne peux pas penser du haut de ma tête) finissent toutes par implémenter l'édition de ligne de style Emacs.

Je dois noter que j'utilise personnellement Vim tout le temps. Je ne suis qu'un utilisateur Emacs très occasionnel.

9
Bruce Ediger

Comme cela n'a pas été explicitement indiqué, j'ajouterai qu'il n'y a pas de meilleur environnement de programmation (LISP dans une boîte, SLIME, etc.) qu'une distribution Emacs légèrement modifiée. Tous mes besoins en programmation (99%) sont pris en charge depuis Vim, mais pour toutes les bibliothèques et routines LISP que j'écris, je dois lancer Emacs pour que tout soit productif.

9
Shamster

La principale raison pour laquelle je n'utilise pas vi/vim est que c'est modal. La principale raison pour laquelle j'utilise vi est qu'il est disponible presque partout.

J'utilise Vim/gVim.

J'avais l'habitude d'utiliser Emacs, mais j'ai trouvé que gVim fonctionnait généralement plus vite sur des machines plus lentes, de plus, en raison de son exigence POSIX, vi est disponible presque partout.

Lorsque j'utilise Vim ou gVim, j'utilise beaucoup la souris, le support est génial, je pense.

J'ai commencé à utiliser Emacs, car il était plus facile à utiliser pour un utilisateur novice. J'ai trouvé que l'utilisation de nano était assez sujette aux erreurs pour une raison quelconque, et à un moment donné, j'ai réalisé que j'étais beaucoup plus à l'aise avec vi.

En ce moment, c'est un mélange. J'utilise aussi souvent Eclipse et gedit. Vim, cependant, est toujours mon éditeur préféré et le plus utilisé.

8
polemon

J'utilise à la fois gVim et Emacs pour être productif, bien que je ne sois expert dans aucun des deux. Une chose que je peux dire avec certitude, c'est que Vim et gVim fonctionnent plus rapidement sur mon ordinateur portable Windows 7 (que je dois utiliser au travail). Emacs, sur la boîte Windows, a une étrange habitude de "faire une pause" jusqu'à une minute et de ne plus répondre, même en continuant à accepter la saisie au clavier, avant de cracher tout ce qui s'est accumulé dans la mémoire tampon du clavier dans un Rush. Cela ne se produit pas sous Mac OS ou Linux. Néanmoins, je me retrouve à utiliser Vim ou gVim la plupart du temps sur toutes les plates-formes pour ne pas avoir à m'arrêter et à penser à l'éditeur que j'utilise et à ajuster. Cela dit, dans un environnement purement * nix, je resterais probablement avec Emacs car je trouve l'édition sans modalité un peu plus naturelle.

Conclusion: à mon avis, les deux éditeurs sont assez puissants pour gérer tous les besoins d'édition de texte. Le choix doit être basé sur des considérations pratiques (comme les détails de mise en œuvre de la plate-forme) et le style de travail.

7
Wing Flanagan

La principale différence entre Emacs et Vim est ergonomique. Il y a le syndrome du canal carpien, CTS, comme vous le savez. Emacs est très "dangereux" si vous avez CTS et provoque CTS. Vim - non, vous pouvez lire cette différence dans de nombreux endroits. Par exemple, dans Vim, vous ne pouvez modifier le texte qu'avec un seul doigt. Dans Emacs - vous ne pouvez pas :)

3
Paul