Como ativar e usar a dobragem de código no Vim?

49

Como posso habilitar e fazer dobramento de código no vim?

Eu tenho que mudar alguma coisa ~/.vimrc?

Eu digito z+ ae z+ ce z+ oe nada acontece.

Aqui está um artigo sobre a dobra: Dobragem de código no Vim .

Mohammad Reza Rezwani
fonte

Respostas:

40

Não, você não tem que colocar o comando da página que você ligado no seu ~/.vimrc, você pode simplesmente digitá-los após a emissão :em vimobter o prompt de comando.

No entanto, se você colocar as linhas:

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

conforme indicado no link que você forneceu, ~/.vimrcvocê não precisa digitá-los toda vez que quiser usar a dobragem em um arquivo. O set nofoldenablegarante que ao abrir, os arquivos são "normal", ou seja, não dobrado.

Anthon
fonte
Eu tenho um código que é escrito por C, então o cursor é sobre uma de suas funções. Pressiono <kbd> esc </kbd> para ir ao comando e, depois de:, escrevo zc e nada acontece.
Mohammad Reza Rezwani 07/07/2014
1
@alex o zc que você não deve digitar depois :. Você digita os setcomandos após o prompt recebido ao digitar :. O zcque você digita quando você pode mover-se livremente o cursor, assim como você usaria ztpara obter o texto o cursor estiver sobre a parte superior da tela atual.
Anthon
40

Dobrar por padrão

O método de dobra padrão do Vim manualsignifica que as dobras são criadas manualmente; Caso contrário, existe nenhuma dobra a ser fechado ou aberto usando za, zo, ou zccomo descrito. Mas, você pode criar uma dobra por zf{motion}no normal modo ou zfno Visual modo; por exemplo, zfjcria uma dobra para a linha atual e a seguinte no modo Normal .

Dobre por indent

A resposta aceita, por @Anthon, descreve como definir o método de dobra para indent; isto é, o dobramento é definido pelo nível de indentações.

Dobre por syntax

De uma maneira mais conveniente, as dobras podem ser criadas automaticamente com base na sintaxe do idioma do buffer atual. Se você estiver usando uma linguagem de programação, vamos chamá-lo de L e você terá uma definição dobrável de L (por exemplo, você instalou um plug-in Vim no qual as informações dobráveis ​​de L são definidas; como c.vim para C / C ++ ou python -mode para Python), você só precisa definir o método de dobramento para syntax:

set foldmethod=syntax

É isso aí. Os comandos mais úteis para trabalhar com dobras são:

  • zo abre uma dobra no cursor.
  • zShift+ oabre todas as dobras no cursor.
  • zc fecha uma dobra no cursor.
  • zmaumenta o foldlevelpor um.
  • zShift+ mfecha todas as dobras abertas.
  • zrdiminui o foldlevelpor um.
  • zShift+ rdiminui foldlevelpara zero - todas as dobras serão abertas.
cartunista
fonte
14

Você não precisa usá-lo sistematicamente: costumo selecionar manualmente dobras pelo movimento ou seção. Por exemplo, dobrar um parágrafo é zfipe dobrar as próximas 20 linhas zf20j. Use zapara alternar e zdremover.

Isso requer um pouco mais de trabalho, mas permite que sua dobra reflita a tarefa em questão.

Marmaduke
fonte
4

Você pode ativar foldingna sessão atual como a resposta do @ Anthon. Mas se você deseja torná-lo permanente, você deve definir pelo menos esta linha .vimrcpara dobrar o trabalho:

set foldmethod=indent

indent é meio que dobrável, você pode ver mais em :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.

Agora, toda vez que você abre um arquivo vim, pode ver que o código é dobrado pelo método que você definiu. Então você pode usar za, zc, zo.

cuonglm
fonte
Não há necessidade de usar o vimrc, eu nunca fiz isso como eu uso dobrar apenas ocasionalmente
Anthon
@ Anthon: Ah, claro. Vou adicionar mais informações na minha resposta.
cuonglm