¿Cómo puedo replicar el plegado de código de Vim?

28

Código plegable en Emacs

A veces quiero doblar un bloque de texto. En Vim tienes un plegado fácil sin pelusa. Sin agregar caracteres especiales como "marcadores" o expresiones regulares específicas {{{. Me gustaría seleccionar una región y doblarla, sin alterar la estructura.

Al mirar alrededor, parece que ya había preguntas sobre el plegado de código en Emacs. Alguien dijo que "no había una solución perfecta". Por ejemplo, creé un clip de codefolding simple en Vim:

Vim liso plegable

ingrese la descripción de la imagen aquí

+ Bastante simple, seleccione una región y dóblela.
+ Es persistente. Cuando matas el búfer / cierras Vim. Y vuelva a abrir el archivo, los pliegues siguen ahí.
+ Obtiene una barra de resaltado, para ver fácilmente lo que está doblado.

Hay muchas otras configuraciones de plegado para Vim. Estoy feliz con Emacs, pero esto es algo que extraño. Otras alternativas que probé, por ejemplo HideShow:

Ocultar mostrar

ingrese la descripción de la imagen aquí

La alternativa del mal con hide-show minor mode. Lo encontré inutilizable:

- No puedo seleccionar una región y plegarla. Se pliega en bloques de código.

- No hay barra de altura o algo así, para atenderlo está doblado. Podrías perderte fácilmente.

- No es persistente. Si vuelve a abrir el archivo, los pliegues desaparecen.

Hay otro paquete, doble esto :

Doblar esto

ingrese la descripción de la imagen aquí

- Es una linda alternativa. Sin embargo, se mete con la sangría, porque el texto debajo del pliegue se coloca al lado del pliegue ... (?).

- Es capaz de seleccionar visualmente la región y doblarla. Pero rompe la indendación, por lo que la visión general se complica. No muy a mano.

- No hay barra de altura o algo así, para atenderlo está plegado. Podrías perderte fácilmente.

¿Cual es el problema?

Me gustaría replicar cómo Vim se dobla. Pero cuando busqué, parece que es muy difícil hacerlo en Emacs. Entonces, me pregunto si hay algo en emacs o su arquitectura que hace que sea difícil replicar esto. Cuales son los limites?

ReneFroger
fuente
2
Sentí que la pregunta era demasiado amplia, así que voté para cerrar sobre esa base. Recomendaría que el póster original elija un par de bibliotecas que brinden algunas de las características buscadas, y luego las combine / modifique como desee. Si el OP tiene problemas para implementar / modificar una característica en particular , publique una pregunta específica limitada a ese problema. El OP probablemente puede lograr los efectos visuales deseados, pero debe estar preparado para convertirlo en un proyecto continuo para trabajar con el tiempo.
leyes
3
¿Podría explicar qué características de plegado desea? Como regla general, no puede esperar que las personas en este sitio sepan cómo funciona el plegado de código Vim, y de todos modos debe decirnos qué características desea específicamente. La única información que proporciona sobre lo que desea es una animación que solo muestra un ejemplo, y de todos modos no tengo idea de lo que ilustra: no muestran qué comandos utilizó, por qué movió el cursor a este o aquel lugar, etc. Además, en un navegador típico, se reproducen en bucle y es imposible saber cuándo comienza una repetición.
Gilles 'SO- deja de ser malvado'
3
la retención debe eliminarse de esta pregunta. tal como está actualmente, es razonablemente específico. no tener una respuesta a la pregunta no es una buena razón para cerrarla.
Ista
2
ar-hide-region-atpt, ar-show-region-atpt de 'thing-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utils - desbloquee para que Podría ser una respuesta regular.
Andreas Röhler
1
La pregunta, según tengo entendido, es básicamente: " Alguien: escriba una biblioteca completa para Emacs que proporcione las características exactas de plegado de código que se encuentran en Vim " . Veo en algunos de los comentarios y votos positivos que hay suficientes personas a las que les gustaría ver que esto se haga realidad. Sin embargo, no veo cómo esto podría encajar razonablemente en la respuesta: la nueva biblioteca propuesta deberá mantenerse, con problemas y correcciones de errores. A mí tampoco me importaría que alguien escribiera una biblioteca completa con nuevas características geniales para el plegado de código.
leyes

Respuestas:

16

Probar vimish-fold.

Caracteristicas

  • baterías incluidas: active el modo menor, conecte un par de comandos y todo funcionará;

  • funciona en las regiones que seleccione;

  • es persistente: cuando cierra el archivo, sus pliegues no desaparecen;

  • además de ser persistente, se escala bien, puede trabajar en cientos de archivos con muchos pliegues sin efectos adversos;

  • es obvio qué partes del texto están dobladas;

  • no rompe la sangría o algo así;

  • puede replegar solo pliegues desplegados (oh, mi);

  • Para los fanáticos del avypaquete: ¡puede usar avypara doblar texto con un número mínimo de pulsaciones de teclas!

Uso

Cree enlaces para algunas / todas estas funciones:

  • vimish-fold - plegado básico de la región seleccionada;

  • vimish-fold-unfold- realmente no necesita vincular esto, solo use C-gcuando el punto se coloca en el encabezado que representa el texto doblado;

  • vimish-fold-unfold-all - sin embargo, esto puede ser útil;

  • vimish-fold-refold - Sí, puedes doblarlo;

  • vimish-fold-avy- ¡usa avypara doblar tu texto!

Puede activar vimish-fold-modeselectivamente los modos en los que desea tener un plegado persistente, o simplemente activarlo en todas partes:

(vimish-fold-global-mode 1)
Mark Karpov
fuente
¿Tiene alguna combinación de teclas sugerida? ¿Qué enlaces usas cuando estás en modo C ++? Modo C? Modo Python? Modo Lisp? ELisp mode? Modo JavaScript?
Reb.Cabin
1
@ Reb.Cabin, este no es un paquete específico de modo, por lo que las asociaciones de teclas globales son la mejor opción. Estoy usando combinaciones de teclas que no involucran acordes de teclas y la mayoría de las personas las considerarían un poco extrañas, actualmente tengo: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. La mayoría de mis combinaciones de teclas son así, esta es mi configuración .
Mark Karpov
¿Se integra esto con movimientos malvados y objetos de texto?
PythonNut
1
Hm ... comenzaré a trabajar en un PR.
PythonNut
1
Yo, por mi parte, encuentro vimish-fold completamente inutilizable. Tal vez sea intuitivo para aquellos que ya están familiarizados con el plegado de código en vim ... No lo sé. Además, no entiendo por qué el plegado en modo org funciona tan bien, pero Emacs todavía no tiene un buen plegado de código ...
kjo