z
(cuando pliegas un papel, este tiene forma de la letra z).zfj
. Vim plegará las dos líneas en una sola. Deberías ver algo similar a esto:zf
es el operador del operador del plegado.j
es el indicador de movimiento para el operador del plegado.zo
. Para cerrarlo utiliza zc
.verbo + sustantivo
). Puedes pasarle al operador de plegado un movimiento o un objeto de texto. Para plegar el párrafo en el que se encuentra el cursor, ejecuta zfip
. Para plegar desde la posición actual hasta el final del archivo, ejecuta zfG
. Para plegar los textos entre {
y }
, ejecuta zfa{
.v
, V
o Ctrl-v
), y después ejecuta zf
.:fold
. Para plegar la línea actual y la línea posterior, ejecuta:,+1
es el rango. Si no le pasas parámetros al rango, el comando de manera predeterminada lo aplica a la línea actual. +1
es el indicador de rango para la línea siguiente. Para plegar las líneas de la 5 a la 10, ejecuta :5,10fold
. Para plegar desde la posición actual hasta el final de la línea, ejecuta :,$fold
.zR
para abrir todos los plegados.zM
para cerrar todos los plegados.za
para alternar el estado en el que se encuentra un plegado.zR
y zM
estando en cualquier línea, pero za
solo funciona cuando estás en una línea que pertenece a un plegado de texto. Para aprender más sobre los comandos de los plegados de texto, echa un vistazo a :h fold-commands
.:set foldmethod?
. De manera predeterminada, Vim utiliza el método manual
.'foldmethod'
a indent. Ejecuta::set foldmethod=indent
, verás algo así:'shiftwidth'
para determinar cómo lo puede plegar. 'shiftwidth'
devuelve el número de espacios requeridos para cada paso del sangrado de línea. Si ejecutas:'shiftwidth'
es 2. En el texto del ejemplo anterior, hay dos espacios al comienzo de la línea y los textos "Dos" y "Dos de nuevo". Cuando Vim comprueba el número de espacios al inicio de la línea y el valor 2 de 'shiftwidth'
, Vim considera que las líneas tienen que ser plegadas en un primer nivel.:set foldmethod=indent
, Vim no plegará el texto sangrado debido a que no tiene el margen indicado en cada línea. Un solo espacio no es considerado dentro de sangrado de margen. Sin embargo, si cambias el valor de la variable 'shiftwidth'
a 1:shiftwidth
a 2 y los espacios de las líneas de nuevo a dos. Y además añade otras dos líneas de texto, como en el ejemplo:zM
), y verás:zR
), y después sitúa el cursor sobre la palabra "Tres" y alterna el estado del plegado del texto (za
):'foldexpr'
. Esta es la variable que tienes que configurar para devolver el valor adecuado. Si 'foldexpr'
devuelve un valor 0, entonces la línea no puede meterse en un plegado. Si devuelve un valor 1, entonces esa línea tiene un nivel de plegado de 1. Si devuelve un 2, entonces esa línea tiene un nivel de plegado de 2. Hay más valores que números, pero no voy a repasarlos todos. Si tienes curiosidad, echa un vistazo a :h fold-expr
.foldexpr
para capturar todas las expresiones que comiencen con "c"::set foldexpr
establece la opción 'foldexpr'
para que acepte expresiones personalizadas.getline()
es una función de Vimscript que devuelve el contenido de cualquier línea dada. Si ejecutas :echo getline(5)
, esto devolverá el contenido de la línea 5.v:lnum
es una variable especial de Vim para la expresión 'foldexpr'
. Vim busca cada línea y en cada momento almacena cada número de línea en la variable v:lnum
. En la línea 5, v:lnum
tiene el valor 5. En la línea 10, v:lnum
tiene el valor 10.[0]
en el contexto de getline(v:lnum)[0]
es el primer carácter de cada línea. Cuando Vim rastrea una línea, getline(v:lnum)
devuelve el contenido de cada línea. getline(v:lnum)[0]
devuelve el primer carácter de cada línea. En la primera línea de nuestra lista, "donut", getline(v:lnum)[0]
devuelve "d". En la segunda línea de nuestra lista, "churros", getline(v:lnum)[0]
devuelve "c".==\\"c\\"
es la segunda mitad de la expresión de igualdad. Esta comprueba si la expresión que acaba de evaluar es igual a "c". Si esto es cierto, esto devuelve 1. Si esto es falso, esto devuelve 0. En Vim, 1 es verdadero y 0 es falso. Así que las líneas que comiencen con "c" devuelven un 1. Recuerda que si 'foldexpr'
tiene un valor de 1, entonces tiene un nivel de plegado de 1.syntax/
), puedes añadir un atributo fold
para hacer que puede ser plegado. A continuación tienes una porción de código del archivo de sintaxis de vim-polyglot para JavaScript. Ten en cuenta la palabra clave fold
al final de la línea.syntax
. Si tienes más curiosidad por esto, echa un vistazo a la ayuda de Vim :h syntax.txt
.archivo1.txt
:archivo2.txt
:vimdiff archivo1.txt archivo2.txt
:vimdiff
, Vim automáticamente utiliza foldmethod=diff
. Si ejecutas ahora :set foldmethod?
, verás que devuelve diff
como método de plegado utilizado.zM
, verás:{{{
y }}}
como indicadores de plegado y pliega el texto que hay entre ellos. Con el plegado por marcador, Vim busca los marcadores especiales, definidos por la opción 'foldmarker'
, para marcar las áreas de plegado. Para ver qué marcadores utiliza Vim, ejecuta:{{{
y }}}
como indicadores. Si quieres cambiar el indicador a otros textos como "coffee1" y "coffee2":coffee1
y coffee2
como los nuevos marcadores de plegado de texto. Como nota complementaria, un indicador debe ser una cadena literal y no puede ser una expresión regular.cuenta.txt
::3,$fold
):cuenta.txt
, el plegado de texto ¡ha desaparecido!cuenta.txt
, ejecuta:mkview
y loadview
de manera manual. Estoy seguro que un día u otro olvidarás ejecutar mkview
antes de cerrar el archivo y perderás todos esos plegados de texto. ¿Cómo podemos automatizar este proceso?mkview
cuando cierras un archivo de tipo .txt
y ejecutar loadview
cuando abras un archivo .txt
, añade esto en tu archivo de configuración vimrc:autocmd
es utilizado para ejecutar un comando ante la aparición de un evento. Los dos eventos aquí son:BufWinLeave
para cuando eliminas un buffer de una ventana.BufWinEnter
para cuando cargas un buffer en una ventana..txt
y salgas de Vim, la próxima vez que abras un archivo, la próxima vez que abras ese archivo la información de los plegados que hayas creado se restaurará automáticamente.mkview
dentro de ~/.vim/view
en sistemas operativos basados en Unix. Para más información, echa un vistazo a :h 'viewdir'
.