Me gustaría poder ocultar ciertas líneas en mi búfer para que no aparezcan (y poder alternar verlas). Encontré preguntas similares , pero no resuelven mi problema. No quiero usar pliegues para esto.
¿Qué es lo que quiero exactamente?
Cuando abro un documento, quiero que Vim no lea en líneas comentadas. Debería comportarse como si estas líneas no existieran en absoluto en el documento, con una sola excepción: necesito un indicador visual (por ejemplo, en una columna adicional al costado) que me dice que aquí hay un comentario que no se muestra.
Al presionar una determinada combinación de teclas, quiero que aparezcan todos los comentarios (es decir, el comportamiento normal de Vim).
Quiero poder modificar el documento con comentarios no mostrados. Al guardar, todo el documento se guarda con comentarios (siempre se guardan 1 línea por encima del texto que estaba debajo de ellos al principio).
¿Por qué quiero esto?
Se distrae menos y se ve visualmente más agradable. Tomemos .vimrc
por ejemplo: puede tener todas las configuraciones muy bien una debajo de la otra. Si desea cambiar algo, o no está seguro de por qué lo configuró de esta manera, solo alterne sus comentarios.
Respuestas:
No sé cómo lograr exactamente lo que quieres, solo una parte.
Desea ocultar algo de texto dentro
~/.vimrc
(por ejemplo).Primero necesitamos saber qué grupo resaltado maneja el texto que desea ocultar. Agregue esta asignación a su
~/.vimrc
:Lo he tomado desde aquí .
Luego, coloque el cursor sobre el texto que desea ocultar, por ejemplo, un comentario. Entonces golpear
F10
.El nombre del grupo resaltado debe aparecer en la línea de comando.
En mi sistema, la salida es:
Creo que significa que el grupo destacado para comentarios vim es
vimLineComment
y que está vinculadoComment
. Por lo tanto, queremos ocultar el texto que maneja el grupo resaltadovimLineComment
(oComment
).Para lograr esto, podríamos usar la función de ocultación agregada en vim 7.3 (
:help conceal
).Esta línea le dice a vim que busque texto cuyo grupo resaltado sea
vimLineComment
y que coincida con la expresión regular^\".*
(un comienzo de una línea (^
) seguido de una comilla doble (\"
) seguida de cualquier texto (.*
)), y que lo oculte y reemplace en todas partes donde se encuentre (containedin=ALL
) con el personaje>
(cchar=>
).El
conceal
atributo de sintaxis ocultará el texto que queramos, a menos que el cursor esté sobre él.A continuación, le decimos a vim que oculte completamente el texto a menos que tenga un carácter de reemplazo personalizado definido:
Hay 4 valores posibles para esta opción con 4 efectos diferentes (ver
:help conceallevel
).Como no queremos escribir esos comandos cada vez, agregamos un comando automático en nuestro
~/.vimrc
:Finalmente, agregamos una asignación para alternar el valor de la
conceallevel
opción (entre 2 y 0; 2 = oculto, 0 = mostrado):El resultado es que el texto debe mostrarse / ocultarse cuando presionamos
<leader>h
.También puede cambiar el color del personaje de reemplazo:
Y puede elegir en qué modo se mostrará un comentario. Por ejemplo, si desea que se muestre solo cuando esté en su línea en modo de inserción:
Sin embargo, no sé cómo contraer todas esas líneas ocultas como lo hace la función de plegado, lo siento.
Editar : otra posible solución.
Mantiene la configuración de plegado para contraer las líneas que no desea ver y oculta los títulos de los pliegues para que no lo distraigan.
En este código personalizamos el título de los pliegues dando el valor
FoldingTitle()
a lafoldtext
opción. Significa que podemos cambiar la apariencia de un pliegue a través de esta función.FoldingTitle()
solo devuelve un símbolo para que sepa que hay un pliegue (>
precedido por algunos espacios repetidos o|
dependiendo del nivel de pliegue).Luego definimos el carácter de espacio como el carácter a utilizar para llenar el espacio vacío en las líneas:
No olvide el espacio después de la barra invertida.
Finalmente definimos una columna (cuyo ancho es 3) que se mostrará al costado de la ventana y que indicará pliegues abiertos y cerrados. También personalizamos el color de la columna de pliegue, así como el color de los títulos de los pliegues. Cada una de estas 3 líneas es opcional.
fuente
Folded
elementos para mis pliegues normales necesitan color, por lo que la única opción es llenar el texto del pliegue de las líneas que quiero ocultar con espacios. Sin embargo, aún veré la parte subrayada, así como el fondo diferente para losFolded
objetos, y no puedo cambiar eso, ya que los necesito para que funcionen mis pliegues normales.cualquier solución posible es usar una barra de plegado minimalista que utilicé porque no encuentro la misma solución, a continuación pongo una lista de comandos para hacer una barra de plegado minimalista que puedes usar para comentarios ocultos, en cada comando escribo qué hago :
establecer foldtext = '+' "para que aparezca un + en la referencia de texto para fold
hola ctermbg plegado = NINGUNO "cambiar la barra de plegado de color por nada
: set fillchars = vert: \ |, fold: \ "(poner un espacio) no poner un ----- en la barra de plegado
uso opcional para desaparecer comentarios
:¡Hola! enlace Comentario Ignorar
uso de devolución
:¡Hola! enlace Comentario Comentario
fuente