¿Cuál es la diferencia entre las diferentes implementaciones de vim?

25

Soy consciente de varias implementaciones de vim diferentes en Emacs. Hay modo malvado, víbora, vimpulse y modo vim. ¿Hay otros? ¿Cómo se comparan?

Observo que hay muchos evil-*paquetes en MELPA, lo que sugiere que ninguno de ellos tiene el 100% de funciones completas. ¿Qué características de vim proporcionan y qué características de vim faltan?

(¡No estoy interesado en el reverso donde " un conjunto de macros vi que [son] una implementación bastante completa de Emacs "!)

Wilfred Hughes
fuente
1
Quizás las "emulaciones" serían más correctas y menos confusas ya que el objetivo de los modos enumerados es darle el comportamiento que desea, no implementar un editor completo sobre Emacs.
wasamasa

Respuestas:

35

vi, vipy viper(ordenado por fecha de creación) vienen integrados con Emacs, todos esos emulan VI. vim-modees un esfuerzo más nuevo e independiente para emular realmente a Vim, vimpulsees un conjunto de extras además de viperdarle una de las características más útiles de Vim. evilfue creado como reemplazo de vim-mode.

eviles el proyecto más reciente y el único que se desarrolla activamente. Su objetivo es emular fielmente el modelo de edición de Vim, aprovechando la funcionalidad Emacs existente siempre que sea posible. Personalmente, diría que está completado en un 90%, porque gnfaltan algunos comandos nuevos (como ), algunas funciones relacionadas con la visualización son bastante difíciles de recrear (como la visualización de tildes después del final de un archivo) y no se implementa un intérprete de Vimscript o cualquier cosa más allá de los conceptos básicos del modo Ex. Sin embargo, es más fácil de ampliar e introspectar que el original, las evil-*extensiones son el equivalente de Emacs a los complementos de Vim en casi todos los casos ( evil-leaderpor ejemplo, sería una excepción porque no es necesario ofrecer considerando la compatibilidad con el mapa de teclas de Emacs).

Teniendo en cuenta que evilestá superando a Vim en ciertos puntos (ver :sy su vista previa visual o el poco esfuerzo que supone crear un nuevo modo útil ), lo recomiendo de todo corazón a todos los interesados ​​en la edición modal para Emacs.

wasamasa
fuente
Usted mencionó g/ser un comando nuevo en Vim. Nunca lo he visto, y no puedo encontrar ninguna documentación al respecto. ¿Qué hace en Vim?
Ivan
Lo siento, quise decir gn. Convierte los resultados de búsqueda en un objeto de texto. Además, ya se ha implementado.
wasamasa
Ah, ya veo. Me alegra saber que se ha implementado ya que lo uso bastante en Vim.
Ivan
9

Dado que eviles el único modo de emulación vim desarrollado activamente, que yo sepa, haré que mi respuesta sea específica del mal. eviles altamente utilizable y muy cercano a una experiencia similar a vim, pero hay algunas características de vim que probablemente no se implementarán (por diseño) y algunas que están incompletas pero que podrían agregarse eventualmente. Algunos ejemplos de cosas que probablemente no se agregarán:

  1. No hay un intérprete vimscript, y que yo sepa, no hay planes para implementar uno.
  2. El aumento y la disminución de los números ( C-ay C-x) no se agregarán porque C-xes demasiado importante para una combinación de teclas de Emacs.
  3. No existe un concepto incorporado de clave de líder; en cambio, \está obligado evil-execute-in-emacs-statepor defecto.
  4. C-uno está obligado a desplazarse hacia arriba de forma predeterminada porque es demasiado importante como una combinación de teclas de Emacs (aunque puede sobrescribir esto con evil-want-C-u-scroll).

Para encontrar una lista de características de vim que aún no están implementadas (al momento de escribir esta respuesta), el mejor lugar para buscar es el rastreador de problemas . Una muestra aleatoria de cosas que están en la lista:

  1. Agregar un archivo con exno está implementado .
  2. Algunos comandos de movimiento no se comportan como vim .
  3. :makeNo se asigna aM-x compile .
  4. C-oen insertmodo no se comporta como lo hace en vim .
  5. No se implementan los buffers de la ventana de intercambio .

Hay muchos más, incluidos los comandos que no están en la lista de problemas abiertos (especialmente los excomandos complicados ), pero como puede ver en la lista, tienden a ser características vim bastante menores u oscuras (vim es un objetivo bastante grande con el cual lograr el 100% de paridad de características).

shosti
fuente
ya que emacs usa lisp. nada es imposible. por ejemplo, aunque la clave de líder no está integrada, puede instalar un plugin evil-leader.
Chen bin
@chenbin, por supuesto, solo me refería a las cosas que vienen incorporadas y habilitadas por defecto con el mal.
shosti
3

El objetivo de Evil es emular a Vim, mientras que el objetivo de Viper es emular a Vi. Vim-mode y Vimpulse son los predecesores de Evil y, que yo sepa, ya no se desarrollan. El proyecto Evil se inició para abordar las deficiencias de estos proyectos.

Tmalsburg
fuente