Aquí está mi caso de uso:
Tengo un montón de código que, debido a la aplicación de estilo, escribimos nuevas líneas después y antes de cada llave de apertura y cierre (respectivamente).
Ejemplo:
function func(args) {
statement 1;
statement 2;
if (condition) {
statement 3;
}
}
Si bien esto es agradable y fácil de leer, considero que es un desperdicio de espacio digno de improperio, pero mis compañeros de equipo no están de acuerdo conmigo. Básicamente así es como estamos registrando nuestro código y eso es todo.
Estaba pensando que tal vez pueda usar las funciones de Vim para ayudarme a guardar el espacio real de la pantalla, al tiempo que me permite escribir el código de forma detallada. No me importa escribirlo, solo quiero un uso más eficiente del espacio. Pensé que quizás podría hacer que Vim colapsara automáticamente las líneas vacías gratuitas.
Me resulta un tanto difícil configurar esto usando reglas de sintaxis porque lo que escribo parece entrar en conflicto con las reglas de sintaxis existentes, pero lo que decidí hacer como primer intento fue escribir estas reglas que no colisionarían:
syntax match aaaaaaaaa "\vabcd" conceal cchar=A
syntax match bbbbbbbbb "\vef\ngh" conceal cchar=B
La segunda regla aquí está cerca de lo que quiero, que para el caso de paréntesis abierto es algo así como /\v\{(\n\s*){2,}
: hacer coincidir un paréntesis abierto con cualquier número mayor o igual a 2 de una nueva línea seguido de solo espacios en blanco.
Sin embargo, lo que sucede dentro de vim es lo siguiente:
Si escribo
abcd
una línea, se ocultaA
como se esperaba.Si escribo
ef
en una línea ygh
en la siguiente, AMBAS líneas quedan ocultasB
.
Realmente esperaba que las dos líneas ef\ngh
se hubieran ocultado en una sola línea para poder ahorrar algo de espacio de búfer vertical de esta manera.
Pero ahora veo que probablemente sea un problema de detalles de implementación de Vim. El colapso de líneas es un problema que debe resolver el plegado de código, probablemente fuera de alcance en lo que respecta a la ocultación.
Así que me pregunto si todavía hay alguna forma de hacer lo que quiero hacer. ¿Tal vez usando marcadores de plegado de alguna manera? El problema es que solo necesito plegar el espacio en blanco vacío.
:h fold-expr
y:h 'fdm'
git
, incluso podría usar ganchos para hacer que los cambios se apliquen de forma transparente.