Quelle est la différence entre les différentes implémentations de vim?

25

Je connais plusieurs implémentations vim différentes dans Emacs. Il y a le mode diabolique, viper, vimpulse et vim-mode. Y en a-t-il d'autres? Comment se comparent-ils?

Je note qu'il existe de nombreux evil-*packages sur MELPA, suggérant qu'aucun d'entre eux n'est complet à 100%. Quelles fonctionnalités vim proposent-elles et quelles sont les fonctionnalités vim manquantes?

(Je ne suis pas intéressé par l'inverse où " un ensemble de macros vi qui [sont] une implémentation Emacs assez complète "!)

Wilfred Hughes
la source
1
Peut-être que les "émulations" seraient plus correctes et moins déroutantes puisque le but des modes listés est de vous donner le comportement que vous désirez, et non d'implémenter un éditeur entier au dessus d'Emacs.
wasamasa

Réponses:

35

vi, vipEt viper(triés par date de création) viennent intégré avec Emacs, tous ceux Emuler VI. vim-modeest un effort autonome plus récent pour réellement émuler Vim, vimpulseest un ensemble d'extras en plus de viperdonner l'une des fonctionnalités Vim les plus utiles. evila été créé en remplacement de vim-mode.

evilest le projet le plus récent et le seul qui soit activement développé. Son objectif est d'émuler fidèlement le modèle d'édition de Vim, en tirant parti des fonctionnalités Emacs existantes partout où cela est possible. Personnellement, je dirais qu'il est terminé à environ 90%, car quelques commandes nouvelles (telles que gn) sont manquantes, certaines fonctionnalités liées à l'affichage sont assez difficiles à recréer (comme l'affichage des tildes après la fin d'un fichier) et ne l'implémentant pas un interpréteur Vimscript ou quoi que ce soit au-delà des bases du mode Ex. Cependant, il est plus facile à étendre et à introspecter que l'original, les evil-*extensions sont les équivalents Emacs aux plugins Vim dans presque tous les cas ( evil-leaderpar exemple, ce serait une exception car il n'est pas nécessaire de proposer la prise en charge de la carte de touches Emacs).

Considérant que evilVim surpasse certains points (voir :set son aperçu visuel ou le peu d'effort que pose la création d'un nouveau mode utile ), je le recommande sans réserve à tous ceux qui s'intéressent à l'édition modale pour Emacs.

wasamasa
la source
Vous avez mentionné g/être un nouveau commandement à Vim. Je ne l'ai jamais vu et je ne trouve aucune documentation à ce sujet. Que fait-il à Vim?
ivan
Je suis désolé, je voulais dire gn. Il transforme les résultats de la recherche en objet texte. En outre, il a été mis en œuvre maintenant.
wasamasa
Ah, je vois. Je suis content d'apprendre qu'il a été implémenté car j'utilise celui-ci un peu dans Vim.
ivan
9

Étant donné que evilc'est le seul mode d'émulation vim développé activement à ma connaissance, je vais rendre ma réponse spécifique au mal. evilest très utilisable et très proche d'une expérience de type vim, mais il existe certaines fonctionnalités de vim qui ne seront probablement pas implémentées (par conception) et d'autres qui sont incomplètes mais pourraient être ajoutées éventuellement. Quelques exemples de choses qui ne seront probablement pas ajoutées:

  1. Il n'y a pas d'interprète Vimscript et, à ma connaissance, il n'est pas prévu d'en mettre en place un.
  2. L'incrémentation et la décrémentation des nombres ( C-aet C-x) ne seront pas ajoutées car C-xc'est trop important pour une liaison de touches Emacs.
  3. Il n'y a pas de concept intégré de clé de leader; au lieu de cela, \est lié evil-execute-in-emacs-statepar défaut.
  4. C-un'est pas obligé de faire défiler vers le haut par défaut, car il est trop important en tant que liaison de clés Emacs (bien que vous puissiez l'écraser avec evil-want-C-u-scroll).

Pour trouver une liste des fonctionnalités de vim qui ne sont pas encore implémentées (au moment de la rédaction de cette réponse), le meilleur endroit pour chercher est le tracker de problème . Un échantillon aléatoire des choses qui sont sur la liste:

  1. L'ajout d'un fichier avec exn'est pas implémenté .
  2. Certaines commandes de mouvement ne se comportent pas comme vim .
  3. :maken'est pas mappé àM-x compile .
  4. C-oen insertmode ne se comporte pas tout à fait comme dans vim .
  5. L'échange de tampons de fenêtre n'est pas implémenté .

Il y en a beaucoup plus, y compris des commandes qui ne sont pas dans la liste des problèmes ouverts (particulièrement les excommandes compliquées ), mais comme vous pouvez le voir dans la liste, elles ont tendance à être des fonctionnalités de vim assez mineures ou obscures (vim est une cible assez large avec laquelle atteindre 100% de parité).

shosti
la source
car emacs utilise lisp. rien n'est impossible. par exemple, bien que la clé leader ne soit pas intégrée, vous pouvez installer un plugin evil-leader.
chen bin
@chenbin bien sûr, je faisais juste référence aux choses qui sont intégrées et activées par défaut avec le mal.
shosti
3

Le but du Mal est d'émuler Vim, alors que le but de Viper est d'émuler Vi. Vim-mode et Vimpulse sont les prédécesseurs de Evil et à ma connaissance ne sont plus développés. Le projet Evil a été lancé pour combler les lacunes de ces projets.

tmalsburg
la source