Pergunta

Eu tenho um arquivo script bash que começa com a definição de função, assim:

#!/bin/bash
# .....
# .....
function test {
...
...
}
...
...

eu uso vim 7,2, e I têm g:sh_fold_enabled=1 conjunto tal que a dobragem é activada com festa. O problema é que a dobradura do teste de funcionamento não está terminado corretamente, ou seja, que dura até o final do arquivo. Parece algo como isto:

#!/bin/bash
# .....
# .....
+-- 550 lines: function test {----------------------------------------
~
~

A função em si é apenas cerca de 40 linhas, e eu quero algo que lookes como este ( "imagens" dizem mais que thousend palavras, eles dizem ...):

#!/bin/bash
# .....
# .....
+-- 40 lines: function test {----------------------------------------
...
...
...
~
~

Alguém sabe uma boa solução para este problema?

Foi útil?

Solução

Eu fiz alguma pesquisa e encontrou uma maneira de corrigir o problema: Para parar vim de funções dobrar até o final do arquivo, eu tive que adicionar um salto-declaração para a região de sintaxe para shExpr (no sh.vim arquivo, em algum lugar geralmente colocados como /usr/share/vim/vim70/syntax/):

syn region shExpr ... start="{" skip="^function.*\_s\={" end="}" ...

Esta alteração pára o arquivo de sintaxe do pensamento que o { e } pertence ao grupo shExpr, quando eles realmente pertencem ao grupo de funções. Ou é assim que eu entendi que, de qualquer maneira.

Nota: Esta correção só funciona para a seguinte sintaxe:

function test
{
....
}

e não para isso:

function test {
....
}

Uma solução rápida e suja para o último erro é remover shExpr do cluster @shFunctionList.

Outras dicas

Deve apenas trabalhar, mas parece haver um erro no arquivo de sintaxe. A região de dobra realmente começa com a palavra 'função' e tenta continuar ao fechamento '}', mas o destaque para a região '{...}' assume o fechamento '}' e da dobra continua em busca de outro 1. Se você adicionar outro '}' você pode ver isso em ação:

function test {
    ...
}
}

Parece haver uma solução mais simples em Reddit .

Para citar o autor no post:

As opções que eu uso são:

syntax=enable

filetype=sh

foldmethod=syntax

let g:sh_fold_enabled=3

g:is_sh=1

EDIT: Solução

vim -u NONE -c 'let g: sh_fold_enabled = 7' c ': conjunto fdm = sintaxe' -c 'sy em' file.sh

g: sh_fold_enabled = 4 parecia ser o acordado em nível de dobra na discussão. Esta solução está funcionando perfeitamente para mim. Eu não tenho que editar o arquivo de sintaxe.

Edit: g: sh_fold_enabled = 5 é realmente o caminho certo. Não 4. Além disso, como o cartaz mostrou no Reddit, esses comandos devem ir antes de qualquer outra configuração no vimrc, exceto os plugins.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top