Hier ist mein Anwendungsfall:
Ich habe viel Code, den wir aufgrund der Stildurchsetzung nach und vor jeder offenen bzw. geschlossenen Klammer neu schreiben.
Beispiel:
function func(args) {
statement 1;
statement 2;
if (condition) {
statement 3;
}
}
Das ist zwar schön und leicht zu lesen, aber ich halte dies für eine explosionswürdige Platzverschwendung, aber meine Teamkollegen stimmen mir nicht zu. Grundsätzlich checken wir so unseren Code ein und das ist es auch.
Ich dachte, dass ich vielleicht Vim-Funktionen verwenden kann, um Bildschirmimmobilien zu speichern, während ich den Code trotzdem ausführlich schreiben kann. Es macht mir nichts aus, es abzutippen, ich möchte nur den Raum effizienter nutzen. Ich dachte mir, ich könnte Vim die unbegründeten Leerzeilen automatisch kollabieren lassen.
Ich finde es etwas schwierig, dies mithilfe von Syntaxregeln einzurichten, da alles, was ich schreibe, mit vorhandenen Syntaxregeln in Konflikt zu stehen scheint. Als ersten Versuch habe ich mich jedoch entschlossen, diese Regeln zu schreiben, die nicht kollidieren:
syntax match aaaaaaaaa "\vabcd" conceal cchar=A
syntax match bbbbbbbbb "\vef\ngh" conceal cchar=B
Die zweite Regel hier kommt dem nahe, was ich möchte, was für den Fall der offenen Klammer /\v\{(\n\s*){2,}
ungefähr so ist: Ordnen Sie eine offene Klammer einer beliebigen Zahl zu, die größer oder gleich 2 einer neuen Zeile ist, gefolgt von nur Leerzeichen.
Was jedoch in vim passiert, ist Folgendes:
Wenn ich
abcd
eine Zeile eingebe, wird sieA
wie erwartet ausgeblendet.Wenn ich
ef
in einer Zeile undgh
in der nächsten tippe, werden BEIDE Zeilen verborgenB
.
Ich hatte wirklich gehofft, dass die beiden Zeilen ef\ngh
in einer einzigen Zeile verborgen wären, damit ich auf diese Weise etwas vertikalen Pufferplatz sparen kann.
Aber ich sehe jetzt, dass es wahrscheinlich ein Detailproblem bei der Vim-Implementierung ist. Das Reduzieren von Zeilen ist ein Problem, das beim Falten von Code gelöst werden muss, wahrscheinlich nur außerhalb des Bereichs, was das Verbergen betrifft.
Ich frage mich also, ob es noch eine Möglichkeit gibt, das zu tun, was ich tun möchte. Vielleicht irgendwie Faltmarker verwenden? Das Problem ist, dass ich nur das leere Leerzeichen falten muss.
git
Sie möglicherweise sogar Hooks verwenden, um die Änderungen transparent anzuwenden.:h fold-expr
und:h 'fdm'
Antworten:
Es ist möglich, Falten zu missbrauchen, um zusätzliche Leerzeilen zu verbergen. So könnte man es machen:
Es würde ungefähr so aussehen:
Wie Sie sehen können, gibt es keine Syntaxhervorhebung bei gefalteten Linien, die jedoch möglicherweise erträglicher ist als viele unnötige leere Zeilen. Sie können Falten auch mit einer ziVerknüpfung ein- und ausschalten, falls sie Ihnen im Weg stehen.
Falten sind kein kleines Thema und Vim hat eine separate Hilfedatei . Verwandte Optionen sind dort ebenfalls verlinkt.
Das detaillierte Verhalten von Cursor und Suche kann über gesteuert werden
'foldopen'
, was zusammen mit'foldclose'
definiert, wann Falten automatisch für Sie geöffnet und geschlossen werden.quelle
Zunächst einmal ist das eine beschissene Durchsetzung, und Sie haben mein Mitgefühl. Anstatt zu verbergen, wie wäre es, eine Zuordnung oder Funktionen (wie unten gezeigt) zum Löschen der unnötigen Zeilen zu erstellen, bevor Sie sie bearbeiten und hinzufügen, wenn Sie fertig sind? etwas in der Richtung:
Die Grundidee beginnt, löschen Sie die leeren Zeilen beim Lesen und ersetzen Sie sie beim Schreiben, haben Sie es nicht versucht, aber ich denke, dies kann als Autocmd wie folgt hinzugefügt werden:
quelle