A dobra falha: o vim não consegue encontrar nenhuma dobra


9

Estou tentando dobrar algum código PHP e incluí uma versão reduzida de alguns dos códigos que estou tentando dobrar no final da postagem.

Eu tentei os seguintes comandos vim, mas apenas os comandos ex abaixo funcionam. Os comandos não-ex não funcionam e produzem uma mensagem branca no vermelho na linha de status dizendo: Não consigo encontrar nenhuma dobra.

:help folding
:help fold-commands
:help foldmethod

:set foldmethod=syntax

zi - toggle folding

zj - move to top of next fold
zk - move to bottom of previous fold

za - toggle current fold open and closed
zo - open current fold
zc - close current fold

zA - toggle all current folds at the current cursor position
zO - open all current folds at the current cursor position
zC - close all current folds at the current cursor position

Como posso o vim encontrar as dobras (por exemplo, quero dobrar o código entre {e }, ou entre (e ).

Aqui está um exemplo de código (apenas para mostrar que está sintaticamente correto e, portanto, os comandos vim devem funcionar):

function getTree() {

  return array(
    "node1" => array(
      "node11" => array(
        "node111" => "leaf111",
        "node112" => "leaf112",
        "node113" => "leaf113",
      ),
          "node12" => array(
        "node121" => "leaf121",
        "node122" => "leaf122",
        "node123" => "leaf123",
      ),
      "node13" => array(
        "node131" => "leaf131",
        "node132" => "leaf132",
        "node133" => "leaf133",
      ),
    ),
    "node2" => array(
      "node21" => array(
        "node211" => "leaf211",
        "node212" => "leaf212",
        "node213" => "leaf213",
      ),
          "node22" => array(
        "node221" => "leaf221",
        "node222" => "leaf222",
        "node223" => "leaf223",
      ),
      "node23" => array(
        "node231" => "leaf231",
        "node232" => "leaf232",
        "node233" => "leaf233",
      ),
    ),
    "node3" => array(
      "node31" => array(
        "node311" => "leaf311",
        "node312" => "leaf312",
        "node313" => "leaf313",
      ),
          "node32" => array(
        "node321" => "leaf321",
        "node322" => "leaf322",
        "node323" => "leaf323",
      ),
      "node33" => array(
        "node331" => "leaf331",
        "node332" => "leaf332",
        "node333" => "leaf333",
      ),
    ),
  );

}

Respostas:


9

O Vim não vem com a sintaxe do PHP embutida. No entanto, se todo o seu código estiver corretamente recuado (como no exemplo), você poderá usar um método de dobra diferente:

:set foldmethod=indent

5

O phpfolding.vim fornece isso. A vantagem disso :set foldmethod=indenté que é "mais inteligente", porque analisa a sintaxe real do PHP, e não apenas o recuo. No README:

  • Ele lembra as configurações de dobra. Se você adicionar funções e executar o script novamente, suas dobras abertas não serão fechadas.
  • Não será confundido por colchetes em blocos de comentários ou literais de cadeias.
  • A dobragem de propriedades de classe com seus comentários PhpDoc.
  • A dobra de todas as propriedades de classe em uma dobra.
  • Dobrar o estilo do marcador original também se dobra.
  • Um "**" pós-fixando a dobra indica que o PhpDoc está dentro (configurável).
  • Um "** # @ +" postfixing a dobra indica que PhpDocBlock está dentro (configurável).
  • Linhas vazias pós-fixando as dobras podem ser configuradas para serem incluídas na dobra.
  • Dobras aninhadas são suportadas (funções dentro de funções, etc.)
  • Variáveis ​​de classe privadas, públicas e protegidas dobráveis ​​+ parâmetros de várias linhas.
  • Folodificar a classe agora é uma opção desativada por padrão.

Instale-o baixando o .vimscript e colocando-o ~/.vim/ftplugin/php/(ou use o gerenciador de plugins, se você usar um). Ele será dobrado automaticamente, com o qual você pode desativar let g:DisableAutoPHPFolding = 1.


Vou tentar este plugin. Tenho certeza de que os recursos extras que ele fornece serão úteis, pois às vezes, ao escrever código, há erros de sintaxe. Obrigado.
John Sonderson
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.