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.
:h fold-expr
und:h 'fdm'
git
Sie möglicherweise sogar Hooks verwenden, um die Änderungen transparent anzuwenden.