Falten schlägt fehl: vim kann keine Falte finden

9

Ich versuche, einen PHP-Code zu falten, und ich habe am Ende des Beitrags eine abgespeckte Version eines Teils des Codes eingefügt, den ich zu falten versuche.

Ich habe die folgenden vim-Befehle ausprobiert, aber nur die folgenden ex-Befehle funktionieren. Die Non-Ex-Befehle funktionieren nicht und erzeugen in der Statuszeile eine Weiß-auf-Rot-Meldung mit der Aufschrift: Ich kann keine Falten finden.

:help folding
:help fold-commands
:help foldmethod

:set foldmethod=syntax

zi - toggle folding

zj - move to top of next fold
zk - move to bottom of previous fold

za - toggle current fold open and closed
zo - open current fold
zc - close current fold

zA - toggle all current folds at the current cursor position
zO - open all current folds at the current cursor position
zC - close all current folds at the current cursor position

Wie kann ich vim bekommen die Falten zu finden (zB Ich möchte Code falten zwischen {und }oder zwischen (und ).

Hier ist ein Beispielcode (nur um zu zeigen, dass er syntaktisch korrekt ist und daher die vim-Befehle funktionieren sollten):

function getTree() {

  return array(
    "node1" => array(
      "node11" => array(
        "node111" => "leaf111",
        "node112" => "leaf112",
        "node113" => "leaf113",
      ),
          "node12" => array(
        "node121" => "leaf121",
        "node122" => "leaf122",
        "node123" => "leaf123",
      ),
      "node13" => array(
        "node131" => "leaf131",
        "node132" => "leaf132",
        "node133" => "leaf133",
      ),
    ),
    "node2" => array(
      "node21" => array(
        "node211" => "leaf211",
        "node212" => "leaf212",
        "node213" => "leaf213",
      ),
          "node22" => array(
        "node221" => "leaf221",
        "node222" => "leaf222",
        "node223" => "leaf223",
      ),
      "node23" => array(
        "node231" => "leaf231",
        "node232" => "leaf232",
        "node233" => "leaf233",
      ),
    ),
    "node3" => array(
      "node31" => array(
        "node311" => "leaf311",
        "node312" => "leaf312",
        "node313" => "leaf313",
      ),
          "node32" => array(
        "node321" => "leaf321",
        "node322" => "leaf322",
        "node323" => "leaf323",
      ),
      "node33" => array(
        "node331" => "leaf331",
        "node332" => "leaf332",
        "node333" => "leaf333",
      ),
    ),
  );

}
John Sonderson
quelle

Antworten:

9

In Vim ist keine PHP-Syntax-Faltung integriert. Wenn Ihr gesamter Code jedoch richtig eingerückt ist (wie in Ihrem Beispiel), können Sie eine andere Falzmethode verwenden:

:set foldmethod=indent
Türknauf
quelle
5

phpfolding.vim bietet dies. Dies hat den Vorteil, :set foldmethod=indentdass es "intelligenter" ist, da es die tatsächliche PHP-Syntax und nicht nur die Einrückung berücksichtigt. Aus der README:

  • Es merkt sich Falzeinstellungen. Wenn Sie Funktionen hinzufügen und das Skript erneut ausführen, werden Ihre geöffneten Falten nicht geschlossen.
  • Es wird nicht durch Klammern in Kommentarblöcken oder String-Literalen verwechselt.
  • Das Falten von Klasseneigenschaften mit ihren PhpDoc-Kommentaren.
  • Das Falten aller Klasseneigenschaften in einer Falte.
  • Das Falten des ursprünglichen Markierungsstils wird ebenfalls gefaltet.
  • Ein "**" Postfixing der Falte zeigt an, dass sich PhpDoc im Inneren befindet (konfigurierbar).
  • Ein "** # @ +" - Postfixing der Falte zeigt an, dass sich PhpDocBlock im Inneren befindet (konfigurierbar).
  • Leere Linien, die die Falten nachfixieren, können so konfiguriert werden, dass sie in die Falte aufgenommen werden.
  • Verschachtelte Falten werden unterstützt (Funktionen innerhalb von Funktionen usw.)
  • Falten privater, öffentlicher, geschützter Klassenvariablen + mehrzeiliger Parameter.
  • Die Folodierung der Klasse ist jetzt standardmäßig deaktiviert.

Installieren Sie es, indem Sie das .vimSkript herunterladen und einfügen ~/.vim/ftplugin/php/(oder verwenden Sie Ihren Plugin-Manager, falls Sie einen verwenden). Es wird automatisch geklappt, was Sie deaktivieren können let g:DisableAutoPHPFolding = 1.

Martin Tournoij
quelle
Ich werde dieses Plugin ausprobieren. Ich bin sicher, dass die zusätzlichen Funktionen nützlich sind, da manchmal beim Schreiben von Code Syntaxfehler auftreten. Vielen Dank.
John Sonderson