Question

J'ai un fichier de script bash qui commence par une définition de fonction, comme ceci:

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

J'utilise vim 7.2 et j'ai défini g: sh_fold_enabled = 1 de sorte que le repliement soit activé avec bash. Le problème est que le pliage du test de fonction n’est pas terminé correctement, c’est-à-dire qu’il dure jusqu’à la fin du fichier. Cela ressemble à quelque chose comme ça:

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

La fonction elle-même a à peu près 40 lignes et je veux quelque chose qui ressemble à ceci ("les images" en disent plus que mille mots, dit-on ...):

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

Quelqu'un connaît-il une bonne solution à ce problème?

Était-ce utile?

La solution

J'ai effectué des recherches et trouvé un moyen de résoudre le problème: pour empêcher vim de replier les fonctions jusqu'à la fin du fichier, je devais ajouter une instruction skip à la région de syntaxe pour shExpr (dans le fichier sh.vim , généralement placé quelque part comme / usr / share / vim / vim70 / syntaxe / ):

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

Cette modification empêche le fichier de syntaxe de penser que les codes { et } appartiennent au groupe shExpr, alors qu'ils appartiennent réellement au groupe de fonctions. Ou c’est ce que j’ai compris de toute façon.

Remarque: cette correction ne fonctionne que pour la syntaxe suivante:

function test
{
....
}

et pas pour cela:

function test {
....
}

Pour résoudre le dernier bogue, le correctif rapide consiste à supprimer shExpr du cluster @shFunctionList.

Autres conseils

Cela devrait fonctionner, mais il semble y avoir un bogue dans le fichier de syntaxe. La région de pliage commence en fait au mot 'fonction' et tente de continuer jusqu'à la fermeture '}', mais la mise en surbrillance de la région '{...}' prend en charge la fermeture '}' et le repli continue en recherchant une autre un. Si vous ajoutez un autre '}', vous pouvez le voir en action:

function test {
    ...
}
}

Il semble exister une solution plus simple sur Reddit .

Pour citer l'auteur dans le message:

  

Les options que j'utilise sont les suivantes:

syntax=enable

filetype=sh

foldmethod=syntax

let g:sh_fold_enabled=3

g:is_sh=1
     

EDIT: solution de contournement

     

vim -u NONE -c 'let g: sh_fold_enabled = 7' -c ': set fdm = syntaxe' -c 'sy   sur 'fichier.sh

g: sh_fold_enabled = 4 semblait être le niveau de pli convenu dans la discussion. Cette solution fonctionne parfaitement pour moi. Je n'ai pas eu à modifier le fichier de syntaxe.

Edit: g: sh_fold_enabled = 5 est en fait le bon. Pas 4. De plus, comme l'a montré l'affiche sur Reddit, ces commandes doivent précéder tout autre paramètre de vimrc, à l'exception des plug-ins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top