Frage

Ich habe ein Bash-Skript-Datei, die mit einer Funktionsdefinition beginnt, wie folgt aus:

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

Ich verwende Vim 7.2, und ich habe festgelegt, so dass g:sh_fold_enabled=1 Faltung mit bash aktiviert ist. Das Problem ist, dass die Falten des Funktionstest nicht richtig beendet sind, das heißt, es bis zum Ende der Datei dauert. Es sieht etwa so aus:

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

Die Funktion selbst nur etwa 40 Zeilen ist, und ich möchte etwas, das wie dieses lookes ( „Bilder“ sagen mehr als tausend Worte, sagen sie ...):

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

Kennt jemand eine gute Lösung für dieses Problem?

War es hilfreich?

Lösung

Ich habe einige die Forschung getan, und fand einen Weg, um das Problem zu beheben: vim Zum Stoppen von Funktionen bis zum Ende der Datei Falten, ich habe eine Skip-Anweisung an die Syntax Region für shExpr hinzufügen hatte (in der Datei sh.vim, in der Regel irgendwo wie /usr/share/vim/vim70/syntax/ platziert):

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

Diese Änderung stoppt die Syntaxdatei von dem Gedanken, dass die { und } zur shExpr Gruppe gehören, wenn sie gehören eigentlich zur Funktionsgruppe. Oder das ist, wie ich es verstanden habe, sowieso.

Hinweis: Dieses Update funktioniert nur für die folgende Syntax:

function test
{
....
}

und nicht für diese:

function test {
....
}

A quick and dirty fix für den letzten Fehler ist shExpr vom @shFunctionList Cluster zu entfernen.

Andere Tipps

Es sollte einfach funktionieren, aber es scheint ein Fehler in der Syntaxdatei zu sein. Der Faltungsbereich beginnt tatsächlich bei dem Wort ‚Funktion‘ und versucht, auf den Schluss ‚}‘, aber die Markierung für die ‚{...}‘ Region übernimmt die Schließung ‚}‘ und die Falte weiter auf der Suche nach einem anderen, um fortzufahren einer. Wenn Sie eine weitere hinzufügen ‚}‘ können Sie dies in Aktion sehen:

function test {
    ...
}
}

Es scheint eine einfachere Lösung auf Reddit zu sein.

den Autor in der Post zu zitieren:

  

Die Optionen, die ich verwende, sind:

syntax=enable

filetype=sh

foldmethod=syntax

let g:sh_fold_enabled=3

g:is_sh=1
     

EDIT: Umgehung

     

vim -u NONE -c 'sei g: sh_fold_enabled = 7' -c ': set fdm = Syntax' -c ‚sy   auf‘file.sh

g: sh_fold_enabled = 4 schien die auf Klapp Ebene in der Diskussion einig zu sein. Diese Lösung funktioniert perfekt für mich. Ich habe nicht die Syntax-Datei zu bearbeiten.

Edit: g: sh_fold_enabled = 5 ist eigentlich die richtige. Nicht 4. Auch, wie das Plakat auf Reddit zeigte, diese Befehle vor jeder anderen Einstellung in vimrc gehen müssen, mit Ausnahme des Plugins.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top