Składanie kończy się niepowodzeniem: vim nie może znaleźć żadnego zagięcia


9

Próbuję złożyć trochę kodu PHP, a na końcu wpisu umieściłem wersję części kodu, którą próbuję złożyć.

Próbowałem następujących poleceń vima, ale działają tylko poniższe polecenia ex. Komendy inne niż ex nie działają i wyświetlają biało-czerwoną wiadomość w linii statusu, mówiąc: Nie mogę znaleźć żadnych fałd.

: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

Jak mogę uzyskać vima, aby znaleźć fałdy (np. Chcę złożyć kod między {i }, lub pomiędzy (i ).

Oto przykładowy kod (aby pokazać, że jest poprawny pod względem składniowym, a zatem polecenia vim powinny działać):

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

}

Odpowiedzi:


9

Vim nie jest wyposażony we wbudowane składanie składni PHP. Jeśli jednak cały kod jest prawidłowo wcięty (tak jak w przykładzie), możesz użyć innej metody fold:

:set foldmethod=indent

5

phpfolding.vim zapewnia to. Zaletą tego :set foldmethod=indentjest to, że jest „mądrzejszy”, ponieważ analizuje faktyczną składnię PHP, a nie tylko wcięcia. Z README:

  • Zapamiętuje ustawienia składania. Jeśli dodasz funkcje i uruchom ponownie skrypt, otwarte foldery nie zostaną zamknięte.
  • Nie będą mylone w nawiasach kwadratowych w komentarzach lub literałach łańcuchowych.
  • Zwijanie właściwości klasy wraz z komentarzami PhpDoc.
  • Składanie wszystkich właściwości klasy w jedną zakładkę.
  • Składany jest również oryginalny styl markera.
  • „**” po złożeniu oznacza, że ​​PhpDoc jest w środku (konfigurowalny).
  • Znak „** # @ +” po złożeniu oznacza, że ​​PhpDocBlock jest wewnątrz (konfigurowalny).
  • Puste linie po zamocowaniu fałd można skonfigurować tak, aby były zawarte w fałdzie.
  • Obsługiwane są zagnieżdżone zagięcia (funkcje wewnątrz funkcji itp.)
  • Składane prywatne, publiczne, chronione zmienne klasowe + parametr wieloliniowy.
  • Foloding klasy jest teraz domyślnie wyłączoną opcją.

Zainstaluj go, pobierając .vimskrypt i wkładając go ~/.vim/ftplugin/php/(lub użyj menedżera wtyczek, jeśli go używasz). Spasuje automatycznie, co można wyłączyć za pomocą let g:DisableAutoPHPFolding = 1.


Spróbuję tej wtyczki. Jestem pewien, że dodatkowe funkcje, które zapewnia, będą przydatne, ponieważ czasami podczas pisania kodu występują błędy składniowe. Dzięki.
John Sonderson
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.