2009-01-05 11 views
4

Je dispose d'un fichier de script bash qui commence par une définition de fonction, comme ceci:Un problème avec des fonctions de bash de pliage dans vim

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

J'utilise vim 7.2, et j'ai mis g:sh_fold_enabled=1 tel que le pliage est activé avec frapper. 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. Il ressemble à ceci:

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

La fonction elle-même est à peu près 40 lignes, et je veux quelque chose qui lookes comme celui-ci (« images » en disent plus que des mots thousend, disent-ils ...):

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

Est-ce que quelqu'un connaît une bonne solution à ce problème?

Répondre

0

Je l'ai fait quelques recherches et trouvé un moyen de résoudre le problème: Pour arrêter vim des fonctions de pliage jusqu'à la fin du fichier, j'avais pour ajouter un saut-déclaration dans la région de syntaxe pour shExpr (dans le fichier sh.vim, généralement placé quelque part comme /usr/share/vim/vim70/syntax/):

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

Ce changement arrête le fichier de syntaxe de penser que le { et } appartient au groupe shExpr , quand ils appartiennent réellement au groupe de fonctions. Ou c'est comme ça que je l'ai compris, de toute façon.

Note: Ce correctif ne fonctionne que pour la syntaxe suivante:

function test 
{ 
.... 
} 

et non pour cela:

function test { 
.... 
} 

Une solution rapide et sale pour le dernier bug est de supprimer shExpr du @ ShFunctionList cluster.

0

Cela devrait fonctionner, mais il semble y avoir un bug dans le fichier de syntaxe. La région de pli commence réellement au mot 'fonction' et essaie de continuer à la '}' de fermeture, mais la surbrillance pour la région de '{...}' prend la fermeture '}' et le pli continue en cherchant un autre un. Si vous ajoutez un autre « } » vous pouvez le voir en action:

function test { 
    ... 
} 
} 
0

Il semble y avoir une solution plus simple sur Reddit.

Pour citer l'auteur dans le message:

Les options que j'utilise sont:

syntax=enable 

filetype=sh 

foldmethod=syntax 

let g:sh_fold_enabled=3 

g:is_sh=1 

EDIT: Solution

vim -u NONE -c « let g: sh_fold_enabled = 7 '-c': définir 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 à éditer le fichier de syntaxe.

Editer: g: sh_fold_enabled = 5 est en fait le bon. Pas 4. En outre, comme l'affiche montré sur Reddit, ces commandes doivent aller avant tout autre paramètre dans vimrc, à l'exception des plugins.