¿Cómo habilitar y usar el plegado de código en Vim?

49

¿Cómo puedo habilitar y hacer el plegado de código en Vim?

¿Tengo que cambiar algo ~/.vimrc?

Escribo z+ ay z+ cy z+ oy no pasa nada.

Aquí hay un artículo sobre plegado: Código plegado en Vim .

Mohammad Reza Rezwani
fuente

Respuestas:

40

No, no tiene que poner el comando desde la página que el vínculo en el ~/.vimrc, solo tendrá que teclear ellos después de la emisión :de vimobtener pronta el comando.

Sin embargo, si pones las líneas:

set foldmethod=indent   
set foldnestmax=10
set nofoldenable
set foldlevel=2

como se indica en el enlace que proporcionó, en su ~/.vimrc, no tiene que escribirlos cada vez que quiera usar el plegado en un archivo. Esto set nofoldenableasegura que al abrir, los archivos sean "normales", es decir, no estén plegados.

Anthon
fuente
Tengo un código que está escrito por C, por lo que el investigador se centra en una de sus funciones. Presiono <kbd> esc </kbd> para ir al comando, así que después de: escribo zc y no sucede nada.
Mohammad Reza Rezwani
1
@alex el zc que no debe escribir después :. Escribe los setcomandos después del mensaje que recibes al escribir :. El zcque escribe cuando puede mover libremente el cursor, al igual que lo utilice ztpara obtener el texto se encuentra el cursor a la parte superior de la pantalla actual.
Anthon
40

Doblar por defecto

El método de plegado predeterminado de Vim manualsignifica que los pliegues se crean manualmente; de lo contrario, no hay dobleces a ser cerrado o abierto utilizando za, zoo zccomo usted describió. Pero, puede crear un pliegue zf{motion}en modo Normal o zfen modo Visual ; Por ejemplo, zfjcrea un pliegue para la línea actual y la siguiente siguiente en modo Normal .

Doblar por indent

La respuesta aceptada, por @Anthon, describe cómo configurar el método de plegado en indent; es decir, el plegado se define por el nivel de muescas.

Doblar por syntax

De una manera más conveniente, los pliegues se pueden crear automáticamente en función de la sintaxis del idioma del búfer actual. Si está utilizando un lenguaje de programación, llamémoslo L , y tiene una definición plegable de L (por ejemplo, ha instalado un complemento Vim en el que se define la información plegable de L ; como c.vim para C / C ++ o python -mode para Python), solo necesita configurar el método de plegado para syntax:

set foldmethod=syntax

Eso es. Los comandos más útiles para trabajar con pliegues son:

  • zo abre un pliegue en el cursor.
  • zShift+ oabre todos los pliegues en el cursor.
  • zc cierra un pliegue en el cursor.
  • zmaumenta el foldlevelpor uno.
  • zShift+ mcierra todos los pliegues abiertos.
  • zrdisminuye el foldlevelpor uno.
  • zShift+ rdisminuye el valor foldlevela cero: todos los pliegues estarán abiertos.
dibujante
fuente
14

No tiene que usarlo sistemáticamente: generalmente selecciono manualmente los pliegues por el movimiento o la sección. Por ejemplo, doblar un párrafo es zfipy doblar las siguientes 20 líneas es zf20j. Use zapara alternar y zdeliminar.

Esto requiere un poco más de trabajo, pero permite que el plegado refleje la tarea en cuestión.

Marmaduke
fuente
4

Puede habilitar foldingen la sesión actual como la respuesta de @ Anthon. Pero si desea que sea permanente, debe establecer al menos esta línea en el .vimrctrabajo de plegado:

set foldmethod=indent

indent es algo plegable, puedes ver más de :help foldmethod

'foldmethod' 'fdm'      string (default: "manual")
                        local to window
                        {not in Vi}
                        {not available when compiled without the +folding
                        feature}
        The kind of folding used for the current window.  Possible values:
        fold-manual     manual      Folds are created manually.
        fold-indent     indent      Lines with equal indent form a fold.
        fold-expr       expr        'foldexpr' gives the fold level of a line.
        fold-marker     marker      Markers are used to specify folds.
        fold-syntax     syntax      Syntax highlighting items specify folds.
        fold-diff       diff        Fold text that is not changed.

Ahora, cada vez que abre un archivo con vim, puede ver que el código se dobla por el método que se configuró. A continuación, puede utilizar za, zc, zo.

Cuonglm
fuente
No hay necesidad de usar el vimrc, nunca lo hice, ya que uso el plegado solo ocasionalmente
Anthon
@Anthon: Oh, por supuesto. Agregaré más información en mi respuesta.
Cuonglm