¿Qué paquetes están disponibles para la edición modal?

13

¿Qué paquetes están disponibles para la edición modal en Emacs? ¿Qué usas y por qué?

Intentemos publicar un paquete por respuesta. Propongo mencionar las ventajas y las deficiencias de cada paquete.


Aquí está mi definición de edición modal (no pude encontrar un artículo dedicado de Wikipeadia):

Edición modal : estilo de edición de texto cuando el usuario cambia periódicamente entre "modo normal" cuando las teclas no provocan la inserción de sus caracteres, sino que realizan varias operaciones en el texto y el "modo de inserción" cuando las teclas insertan los caracteres correspondientes. Puede haber más modos, por supuesto. La mayoría de los editores modernos no son modales. Un ejemplo de editor de texto modal es Vi (Vim).

Mark Karpov
fuente
¿Y qué es la "edición modal"?
Lindydancer
@Lindydancer, agregué mi intento de explicar el concepto a la pregunta.
Mark Karpov

Respuestas:

13

evil, el E xtensible VI L ayer para Emacs

Dejando a un lado el nombre cuestionable, eviles el estado actual del arte cuando se trata de vimemulación en Emacs (y posiblemente en cualquier otro lugar, para el caso). Admite muchas características que otros paquetes de emulación de Vim evitan, que incluyen:

  • vim objetos de texto
  • vim registros
  • vim macros de teclado
  • ex comandos

Ventajas

  • La compatibilidad clave con vimsignifica que no pierde su memoria muscular al cambiar a sistemas sin Emacs.
  • Muy maduro y ampliamente utilizado (muchos paquetes comunitarios, por ejemplo)
    • Muchos paquetes vimhan sido portados a evil.
  • vim la gramática de estilo es modular y se presta muy bien a la extensión del usuario
  • evil en sí mismo es muy extensible: ¡haga sus propios objetos de texto, operadores y movimientos!

Desventajas

  • Probablemente requerirá algo de violín para que funcione bien con otros paquetes
    • Afortunadamente, evilhace que los casos de uso más comunes sean ridículamente fáciles.
  • evilEs un sistema muy complejo. Hackear el núcleo maligno puede ser bastante complicado.
  • vimlas combinaciones de teclas no son necesariamente ergonómicamente óptimas. A veces, pueden sentirse un poco arbitrarios cuando se transfieren a un sistema diferente.
  • Alojado en BitBucket (mercurial) haga de esto lo que quiera.
PythonNut
fuente
Encontré el acrónimo malvado para la capa vi extensible para Emacs un poco de mal gusto.
Nombre
@Nombre no es mi idea, pero ¿cómo es eso?
PythonNut
de un diccionario: mal = Profundamente inmoral y malévolo, personificando o asociado con las fuerzas del diablo, dañino, extremadamente desagradable, ...
Nombre
55
@Name como alguien que se ha dado el nombre de "Nombre", creo que agradecería el uso del humor al nombrar las cosas. :-) En el caso de Evil, es una ironía (ver en.wikipedia.org/wiki/Irony#Definitions ). Por mi parte, creo que es uno de los mejores nombres dados a un paquete de Emacs, ¡y lo mencionaría como una ventaja!
tarsius
@PythonNut Creo que el uso de Bitbucket es un problema menor (en realidad no hay ningún problema) que el uso de Mercurial.
tarsius
11

Existe god-mode( https://github.com/chrisdone/god-mode ), que utiliza las combinaciones de teclas estándar de Emacs pero elimina la necesidad de mantener presionados los modificadores. Cuando el modo dios está habilitado, los C-...enlaces no requieren modificador y los M-...enlaces usan un prefijo en lugar de un modificador.

Como ejemplo de la página de github:

Antes: Cp Ck Cn M- ^) Cj Cy Mr Cx zz M-2 Mg Mg Cx Cs

Después: pkng ^) jygr. . 2 ggxs

Stefan
fuente
1
Expande tu respuesta para que no sea solo un enlace.
Mark Karpov
@Stefan - Me tomé la libertad de ampliar un poco tu respuesta. Siéntase libre de cambiar como quiera.
glucas
glucas: gracias! @ Mark: sin saber nada más sobre el modo dios, no pude ampliar fácilmente mi respuesta. Lo publiqué con la esperanza de que alguien como glucas completara los espacios en blanco.
Stefan
6

Añadiendo el mío, gracias @ Mark por su aliento.

Xah Fly Keys

Diseñado desde cero para emacs, con el objetivo de ser el sistema MÁS eficiente, de años de experiencia con el modo ergoemacs. Las opciones clave se basan tanto en la ciencia como sea posible, en base a estadísticas de frecuencia clave y puntaje clave fácil de presionar. Los comandos más utilizados se asignan a las teclas más fáciles de presionar. Otros problemas, como la agrupación y la combinación de teclas bigram, también se consideran a partir de 3 años de experimento semanal.

Puntos interesantes

  • Todos los comandos Cx se realizan por secuencia de 2 a 3 teclas individuales. En xah-fly-keys, Cx nunca es necesario. M- nunca es necesario tampoco.
  • No entra en conflicto con ninguna clave de GNU emacs, porque no se une a Ctrl o Meta (excepto C-7, C-8, pero no es esencial). Puede tener las teclas xah-fly-keys activadas en modo de inserción, y usar GNU Emacs de la forma en que lo hace normalmente.
  • También se consideró qué conjunto de comandos da como resultado la máxima eficiencia de edición. Entonces, el paquete usa ~ 80 comandos de edición personalizados. (por ejemplo, copiar copiará la línea actual si no hay una selección. Un solo comando para alternar mayúsculas y minúsculas, en lugar de las ~ 6 variaciones de GNU Emacs de superior / inferior / región / no-región).
  • La implementación es lo más simple posible. Sin macro, sin consejos, sin reasignación compleja de claves, solo se utilizan un par de ganchos. (¡¿bueno o malo?!)

Desventajas

  • Al igual que aprender vi por primera vez, necesitará un mes para adoptar.
  • No bien sabido. Recién lanzado para uso público este mes.
  • Actualmente solo es compatible con el diseño Dvorak.
  • No hay un diagrama clave conveniente para el aprendizaje (todavía).
  • Para los modos principales, aún necesita usar Cc. (por lo tanto, puede usar otros paquetes como god-mode o hydra para resolver este problema).

Soy el autor, así que ten en cuenta que puedo ser parcial. Siéntase libre de comentar o corregir.

Xah Lee
fuente
¿Hay alguna posibilidad de que admitas otras distribuciones de teclado? Sé que ErgoEmacs sí. Podría intentarlo, pero la barra para cambiar a Dvorak es demasiado alta para un experimento casual.
PythonNut
@PythonNut sí, máxima prioridad. Espero en una semana Lo principal es saber cómo quiero implementarlo.
Xah Lee
Ah Muy genial. Le daré un giro cuando salga.
PythonNut
6

Modalka debe ser el chico más nuevo en el bloque de edición modal. El proyecto Github parece tener 10 días de antigüedad. No tengo suficiente tiempo de uso para comentar o evaluar, pero así es como se describe:

Este es un kit de construcción para ayudar a cambiar a la edición modal en Emacs. El objetivo principal del paquete es hacer que la edición modal en Emacs sea lo más natural y nativa posible. No hay hack, no hay casos de esquina, no hay emulación, solo comienza a editar modalmente de la manera que quieras.

La documentación también compara y contrasta Modalka con otras soluciones modales comunes, como evil, god-mode, boon, etc.

Usuario de Emacs
fuente
4

Bendición

Boon es uno de los paquetes menos conocidos para la edición modal. No emula Vi (o Vim) pero proporciona un diseño original optimizado para el diseño del teclado Colemak.

Ventajas y principios de diseño

  • Asignación espacial primero, mnemotecnia segundo: la asignación de teclas a comandos se basa en prioridad en la ubicación de las teclas en el teclado. Lo que esté impreso en la tapa del teclado es una preocupación secundaria.

  • Rollos fáciles con los dedos: la combinación común debe ser alternar entre la mano izquierda / derecha o los rollos fáciles con una sola mano.

  • Uso de la fila de inicio y dedos fuertes para los comandos más utilizados

  • Navegación fácil: muchos comandos están vinculados a la navegación. Esto facilita el movimiento. Dado que los movimientos se duplican como definiciones de región, hace que los comandos de manipulación (operadores) sean más potentes.

Desventajas

  • Debe volver a aprender cómo interactuar con el editor, ya que la colección de primitivas de edición y su ubicación en el teclado son bastante únicas.
Mark Karpov
fuente
1
Parece un poco extraño que Boon realmente no se preocupe por lo que hay en la llave, pero hace cumplir que las llaves sean Colemak. Parece que debería ser independiente del diseño.
PythonNut
@PythonNut, creo que la gente necesita referirse a las claves de alguna manera :-) Creo que es completamente posible hacer que funcione con otros diseños.
Mark Karpov
Boon tiene soporte QWERTY y QWERTZ ahora, consulte github.com/jyp/boon#installation . Actualicé la respuesta para reflejar eso.
raju-bitter
3

Ergoemacs también admite la edición modal. No emula vi, pero usa la tecla Alt para los comandos más utilizados. Por ejemplo, el cursor en movimiento es Alt más T. invertida a la derecha (en QWERTY es Alt+ jpara left, Alt+ lpara la derecha, Alt+ ipara upy Alt+ kpara down). Eliminar char o word es Altcon las teclas de la fila de inicio de la izquierda. Las opciones de teclas se basan en la frecuencia del comando y la posición de la tecla para facilitar la presión.

  • Para comenzar la edición modal, el usuario puede presionar f6.
    • Una vez que f6se presionó, las teclas utilizadas con más frecuencia ya no requieren una combinación de teclas alt.
    • Por lo tanto, en QWERTY, jes left, jes right, ies upy kestá abajo).
  • Se sale del modo de comando modal presionando return, f6o escape.

Además del paradigma modal tradicional, existe un paradigma cuasimodal que permite alcanzar cualquier combinación de teclas C-xo C-csin utilizar modificadores (como el modo dios).

  • El cuasimodal se inicia con QWERTY apps fpara C-ccon la tecla de control presionada y QWERTY apps dpara C-x.
  • Al completar esta secuencia de teclas, la appstecla cambiará el tipo de modificadores que se supone que se presionan.
  • Una vez que se ha llamado al comando, ergoemacs reanuda el modo de edición.
  • Durante cualquier secuencia de teclas, también puede cambiar los tipos de teclas que se mantienen presionadas. Esto es simplemente presionando la appstecla nuevamente.

Además de cambiar las teclas de comando, ergoemacs-mode le permite cambiar cosas sobre la secuencia de teclas mientras la escribe:

  • Puede editar el argumento de prefijo durante la mitad de una secuencia de teclas presionando f2.
  • Al presionar backspacese recupera la última tecla presionada.
  • Apps le permite cambiar las teclas presionadas durante cualquier secuencia de teclas.

ergoemacs-mode también intenta respetar todo lo que el modo hace a las teclas fundamentales. Por ejemplo, si org-mode define una clave especial para next-line, ergoemacs usa este comando para Alt+ kcuando está en org-mode.

Ventajas:

  • Parte de GNU Emacs, en ELPA.
  • Admite claves "universales" de Windows / Linux listas para usar. Por ejemplo, Abrir ( C-o), Cerrar ( C-w), Seleccionar todo ( C-a), Copiar ( C-c), Cortar ( C-x), Pegar ( C-v), etc.
  • Bastante popular
  • Admite muchos diseños, incluidos Qwerty, dvorak, colemak, bepo y muchos otros diseños internacionales que ajustan las claves para asegurarse de que estén en la fila de inicio (Mi en QWERTY sería Mu en colemak).
  • Muestra una imagen de la distribución del teclado en emacs al describir el tema.
  • Las teclas se pueden personalizar mediante un sistema de extensión, creando un tema.
  • Puede configurar cualquier mapa de teclas modal arbitrario (aún no documentado).

Desventajas

  • Estable es lento al inicio.
    • En el maestro inestable, el primer inicio es lento (~ 5 segundos para una configuración mínima), (~ 20 segundos para mi inicio)
    • El segundo segundo inicio es mucho más rápido (para mi configuración compleja es ~ 4 segundos).
    • Esto se debe a que el modo ergoemacs está cambiando y almacenando en caché cada mapa de teclas activo en emacs. En el segundo inicio, estas configuraciones se guardan.
  • Código complejo

Ver https://github.com/ergoemacs/ergoemacs-mode

Matthew Fidler
fuente
2

Otra opción semi-modal es Hydra:

https://github.com/abo-abo/hydra

De acuerdo con el sitio web

Imagine que ha vinculado Cc j y Cc k en su configuración. Desea llamar a Cc j y Cc k en alguna secuencia (arbitraria). Hydra te permite:

  • Vincula tus funciones de forma que presionar Cc jjkk3j5k sea equivalente a presionar Cc j Cc j Cc k Cc k M-3 Cc j M-5 Cc k. Cualquier tecla que no sea j o k sale de este estado.

  • Asigne una pista personalizada a este grupo de funciones, para que sepa inmediatamente después de presionar Cc que puede seguir con j o k.

No lo he usado pero parece interesante.

Matthew Fidler
fuente