Was ist der Unterschied zwischen den verschiedenen VIM-Implementierungen?

25

Ich kenne verschiedene vim-Implementierungen in Emacs. Es gibt Böse-Modus, Viper, Vimpulse und Vim-Modus. Gibt es noch andere Wie vergleichen sie?

Ich evil-*stelle fest, dass es auf MELPA viele Pakete gibt, was darauf hindeutet, dass keines zu 100% vollständig ist. Welche vim-Funktionen bieten sie und welche vim-Funktionen fehlen?

(Ich bin nicht an der Umkehrung interessiert, wo " eine Reihe von vi-Makros, die eine ziemlich vollständige Emacs-Implementierung sind "!)

Wilfred Hughes
quelle
1
Vielleicht wären "Emulationen" korrekter und weniger verwirrend, da das Ziel der aufgelisteten Modi darin besteht, das gewünschte Verhalten zu erzielen und nicht einen gesamten Editor auf Emacs zu implementieren.
Wasamasa

Antworten:

35

vi, vipund viper(geordnet nach Erstellungsdatum) sind in Emacs integriert, alle diese emulieren VI. vim-modeist ein neuer, eigenständiger Versuch, Vim tatsächlich zu emulieren. Er vimpulsebesteht aus einer Reihe von Extras viper, um die nützlichsten Vim-Funktionen bereitzustellen. evilwurde als Ersatz für erstellt vim-mode.

evilist das neueste Projekt und das einzige, das aktiv entwickelt wird. Ziel ist es, das Bearbeitungsmodell von Vim originalgetreu zu emulieren und die vorhandenen Emacs-Funktionen zu nutzen, wo immer dies möglich ist. Persönlich würde ich sagen, dass es zu 90% vollständig ist, da ein paar neue Befehle (wie gn) fehlen, einige anzeigebezogene Funktionen nur schwer wiederherstellbar sind (wie die Anzeige von Tilden nach dem Ende einer Datei) und nicht implementiert werden einen Vimscript-Interpreter oder etwas anderes als die Grundlagen des Ex-Modus. Es ist jedoch einfacher zu erweitern und nachzuvollziehen als das Original. Die evil-*Erweiterungen entsprechen in fast allen Fällen den Emacs-Plugins von Vim (dies evil-leaderwäre beispielsweise eine Ausnahme, da es nicht erforderlich ist, die Unterstützung von Emacs-Keymaps in Betracht zu ziehen).

In Anbetracht dessen evil, dass Vim an Punkten übertroffen wird (siehe :sund seine visuelle Vorschau oder wie wenig Aufwand das Erstellen eines nützlichen neuen Modus aufwirft ), empfehle ich es von ganzem Herzen allen, die sich für die modale Bearbeitung für Emacs interessieren.

Wasamasa
quelle
Sie haben erwähnt g/, ein neuer Befehl in Vim zu sein. Ich habe es noch nie gesehen und kann keine Dokumentation dazu finden. Was macht es in Vim?
Iwan
Es tut mir leid, ich meinte gn. Es verwandelt Suchergebnisse in ein Textobjekt. Außerdem wurde es inzwischen implementiert.
Wasamasa
Ah ich sehe. Ich bin froh zu hören, dass es implementiert wurde, da ich es in Vim ziemlich oft verwende.
Iwan
9

Da eviles meines Wissens nach der einzige aktiv entwickelte Vim-Emulationsmodus ist, werde ich meine Antwort für das Böse spezifisch machen. evilist in hohem Maße benutzerfreundlich und kommt einer vim-ähnlichen Erfahrung sehr nahe, aber es gibt einige vim-Funktionen, die höchstwahrscheinlich nicht (beabsichtigt) implementiert werden, und einige, die unvollständig sind, aber möglicherweise irgendwann hinzugefügt werden. Einige Beispiele für Dinge, die höchstwahrscheinlich nicht hinzugefügt werden:

  1. Es gibt keinen Vimscript-Interpreter und meines Wissens keine Pläne, einen zu implementieren.
  2. Inkrementieren und Dekrementieren von Zahlen ( C-aund C-x) wird nicht hinzugefügt, da dies C-xfür eine Emacs-Tastenkombination zu wichtig ist.
  3. Es gibt kein integriertes Konzept für einen Führungsschlüssel. Stattdessen \ist evil-execute-in-emacs-statestandardmäßig gebunden .
  4. C-uist standardmäßig nicht an einen Bildlauf nach oben gebunden, da dies als Emacs-Tastenkombination zu wichtig ist (obwohl Sie dies mit überschreiben können evil-want-C-u-scroll).

Um eine Liste der vim-Funktionen zu finden, die (zum Zeitpunkt der Beantwortung dieser Frage ) noch nicht implementiert sind , sollten Sie sich am besten den Issue-Tracker ansehen . Eine zufällige Auswahl von Dingen, die auf der Liste stehen:

  1. Das Anhängen einer Datei mit exist nicht implementiert .
  2. Einige Bewegungsbefehle verhalten sich nicht wie vim .
  3. :makeist nicht zugeordnetM-x compile .
  4. C-oin insertmode verhält sich nicht so wie in vim .
  5. Swap Window Buffer ist nicht implementiert .

Es gibt noch viel mehr, einschließlich Befehlen, die nicht in der Liste der offenen Probleme enthalten sind (besonders komplizierte exBefehle), aber wie Sie aus der Liste ersehen können, sind sie eher geringfügige oder undurchsichtige vim-Funktionen (vim ist ein ziemlich großes Ziel, mit dem Sie arbeiten müssen) 100% Feature-Parität erreichen).

Shosti
quelle
da verwendet emacs lisp. nichts ist unmöglich. Obwohl der Anführerschlüssel nicht integriert ist, können Sie beispielsweise ein Plug-in für böse Anführer installieren.
Chen Bin
@chenbin natürlich, ich bezog mich nur auf Dinge, die standardmäßig mit dem Bösen eingebaut und aktiviert werden.
Shosti
3

Das Ziel des Bösen ist es, Vim zu emulieren, während es das Ziel der Viper ist, Vi zu emulieren. Vim-Mode und Vimpulse sind die Vorgänger des Bösen und werden meines Wissens nicht mehr weiterentwickelt. Das Evil-Projekt wurde gestartet, um die Mängel dieser Projekte zu beheben.

Tmalsburg
quelle