2010-12-30 4 views
30

Zuerst benutze ich den set foldmethod = marker, und bewege den Cursor auf {einer Funktion, benutze die zf% um die aktuelle Funktion zu falten. Aber es gibt viele Funktionen in dieser Datei. Wie kann ich alle Funktionen in dieser Datei falten? Und ich möchte nicht {} in den Funktionen falten.Wie kann ich automatisch alle Funktionen in einer Datei mit vim falten?

+4

FYI vim-Distributionen kommen normalerweise mit eingebetteter Hilfe. Wenn du ': help fold' eintippst, kannst du alle faltenbezogenen Sachen sehen. –

+1

Sie müssen hinzufügen, welche Sprache Sie interessiert (nicht alle Sprachen haben {} für einen Start!); Einklappen von Vim ist ein eigenes Thema. – Rook

Antwort

70

Wenn Sie :set foldmethod=syntax die Falten werden aus den Syntaxdefinitionen angegeben. Wenn Sie bevorzugen, können Sie :set foldmethod=indent die Einrückung haben, um die Falten zu definieren.

Sie können alle Falten mit zM schließen. Wenn Sie Falten verschachtelt haben und Ebene für Ebene folden möchten, verwenden Sie zm. Um Falten zu öffnen, verwenden Sie zR (alle) und zr (Ebene für Ebene).

+0

Ich glaube, du verstehst meine Bedeutung falsch. Zuerst muss ich für jede Funktion eine Falte einrichten. Ich möchte nur wissen, wie man die Faltung für alle Funktionen in der ersten Zeit einrichten kann. –

+0

@Yongwei: ok, ich denke, ich verstehe es jetzt. Wolltest du das? –

+1

zR und zm funktionieren nicht, nachdem ich foldmethod = syntax –

8

Wenn jede Funktion ihre öffnende Klammer auf der ersten Spalte können Sie tun:

:%g/^{/normal! zf% 

Vielleicht ist es klar, dass diese Art und Weise:

:%g /^{/ normal! zf% 

der g Befehl wählt Linien der folgenden gemäß Muster und führt einen ex-Befehl aus (hier normal!, um normale Tastatureingaben zu spielen).

Siehe :help :g und :help :normal

+0

Ich benutze dies - danke aber wie können Sie vermeiden, dass es über Funktionen falten? es scheint, es ist nicht nur Funktionen – serup

4

ich auf diese kam, als ich für eine ähnliche Sache zu suchen. Das hättest du jetzt offensichtlich herausgefunden, aber zum Nutzen anderer Leute werde ich es trotzdem beantworten.

Sie müssen in den folgenden Zeilen in .vimrc setzen:

set foldmethod=syntax 
set foldnestmax=1 
3
set foldlevel=0 

falten alles von Anfang an, was gefaltet ment werden. Abhängig von der Sprache und Ihrer Falzfunktion variiert der Inhalt der Falte.

+1

'zM' das gleiche tun. – MOHRE

1

Versuchen :%g/\(function\_.\{-}\)\@<={/ normal! f{zf%

Erklären bitweise:

:%g - globaly in einer ganzen Datei suchen

/\(function\_.\{-}\)\@<={/ - Muster zuerst finden '{' nach einer 'Funktion' und setzen den Cursor auf beginnen String mit dem '{'

normal! f{zf% - führen Sie vorwärts zu '{' f{ und machen Falte mit Bewegung '%' zf% auf tha t Zeichenfolge

+1

konnte Ihren Befehl nicht zur Arbeit bringen - vielleicht zeigen Beispielfunktionen – serup

1

Ich habe versucht, das gleiche zu tun und am Ende einfach tun:

setlocal foldmethod=marker 
setlocal foldmarker={,} 

Es verwendet den Marker fold Verfahren und ändert die Markierung auf eine einzelne geschweifte Klammer (standardmäßig der Marker {{{).

+0

Ich liebte das, ziemlich praktisch! Aber ich sollte Zeilen teilen, die eine geschweifte Klammer schließen und eine andere öffnen (wie "} else {") –

Verwandte Themen