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",
      ),
    ),
  );

}

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.