Jak włączyć i używać zwijania kodu w Vimie?

48

Jak mogę włączyć i zrobić składanie kodu w Vimie?

Czy muszę coś zmienić ~/.vimrc?

I typ z+ ai z+ ci z+ oi nic się nie dzieje.

Oto artykuł na temat składania: Składanie kodu w Vimie .

Mohammad Reza Rezwani
źródło

Odpowiedzi:

40

No nie trzeba umieścić polecenie z tej strony związanej w twojej ~/.vimrc, można po prostu wpisać je po wydaniu :w vimcelu uzyskania wiersza polecenia.

Jeśli jednak wstawisz linie:

set foldmethod=indent   
set foldnestmax=10
set nofoldenable
set foldlevel=2

jak wskazano w podanym linku, ~/.vimrcnie musisz ich wpisywać za każdym razem, gdy chcesz użyć zwijania pliku. set nofoldenableZapewnia, że podczas otwierania, pliki są „normalne”, czyli nie spasował.

Anthon
źródło
Mam kod napisany przez C, więc kurier w jednej z jego funkcji. Naciskam <kbd> esc </kbd>, aby przejść do polecenia, więc po: piszę zc i nic się nie dzieje.
Mohammad Reza Rezwani,
1
@alex the zc, po którym nie należy pisać :. Wpisujesz setpolecenia po monicie, który pojawia się podczas pisania :. Wpisujesz zc, kiedy możesz swobodnie przesuwać kursor, tak jak byś użył, ztaby uzyskać tekst, który kursor znajduje się na górze bieżącego ekranu.
Anthon
39

Złożyć domyślnie

Domyślna metoda składania Vima manualoznacza, że ​​fałdy są tworzone ręcznie; w przeciwnym razie, nie ma fałd być zamknięte lub otwarte za pomocą za, zo, lub zc, jak to opisano. Ale możesz utworzyć zakładkę zf{motion}w trybie normalnym lub zfw trybie wizualnym ; np. zfjtworzy zagięcie dla bieżącej linii i następnej następnej w trybie normalnym .

Złożyć indent

Przyjęta odpowiedź @ Antona opisuje, jak ustawić metodę składania na indent; tzn. składanie jest określone przez poziom wcięć.

Złożyć syntax

W bardziej wygodny sposób fałdy mogą być tworzone automatycznie na podstawie składni języka bieżącego bufora. Jeśli używasz języka programowania, nazwijmy go L , a masz składaną definicję L (np. Zainstalowałeś wtyczkę Vim, w której zdefiniowane są informacje o składaniu L ; takie jak c.vim dla C / C ++ lub python -mode dla Python), wystarczy ustawić metodę składania na syntax:

set foldmethod=syntax

Otóż ​​to. Najbardziej przydatne polecenia do pracy z foldami to:

  • zo otwiera zakładkę przy kursorze.
  • zShift+ ootwiera wszystkie fałdy pod kursorem.
  • zc zamyka fałd na kursorze.
  • zmzwiększa foldlevelo jeden.
  • zShift+ mzamyka wszystkie otwarte fałdy.
  • zrzmniejsza foldlevelo jeden.
  • zShift+ rzmniejsza foldleveldo zera - wszystkie fałdy będą otwarte.
rysownik
źródło
14

Nie musisz go używać systematycznie: zazwyczaj ręcznie wybieram fałdy według ruchu lub sekcji. Na przykład składanie akapitu jest zfipi składanie kolejnych 20 wierszy jest zf20j. Służy zado przełączania i zdusuwania.

Wymaga to trochę więcej pracy, ale pozwala, aby twoje składanie odzwierciedlało dane zadanie.

Marmaduke
źródło
4

Możesz włączyć foldingw bieżącej sesji, np. Odpowiedź @ Anthon. Ale jeśli chcesz, aby była trwała, musisz ustawić przynajmniej tę linię w .vimrcpracy składania:

set foldmethod=indent

indent to rodzaj składania, z którego widać więcej :help foldmethod

'foldmethod' 'fdm'      string (default: "manual")
                        local to window
                        {not in Vi}
                        {not available when compiled without the +folding
                        feature}
        The kind of folding used for the current window.  Possible values:
        fold-manual     manual      Folds are created manually.
        fold-indent     indent      Lines with equal indent form a fold.
        fold-expr       expr        'foldexpr' gives the fold level of a line.
        fold-marker     marker      Markers are used to specify folds.
        fold-syntax     syntax      Syntax highlighting items specify folds.
        fold-diff       diff        Fold text that is not changed.

Teraz za każdym razem, gdy otwierasz plik vim, możesz zobaczyć, że kod jest składany zgodnie z ustawioną metodą. Następnie można użyć za, zc, zo.

Cuonglm
źródło
Nie ma potrzeby korzystania z vimrc, nigdy tego nie robiłem, ponieważ używam foldowania tylko od czasu do czasu
Anthon
@Anthon: Och, oczywiście. Dodam więcej informacji do mojej odpowiedzi.
cuonglm