Um problema com dobrar funções Bash no vim
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?
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.