Ecco il mio caso d'uso:
Ho un sacco di codice che a causa dell'applicazione dello stile scriviamo nuove righe dopo e prima di ogni parentesi aperta e chiusa (rispettivamente).
Esempio:
function func(args) {
statement 1;
statement 2;
if (condition) {
statement 3;
}
}
Mentre questo è bello e facile da leggere, lo considero uno spreco di spazio deplorevole, ma i miei compagni di squadra non sono d'accordo con me. Fondamentalmente questo è il modo in cui stiamo controllando il nostro codice e basta.
Stavo pensando che forse potrei usare le funzionalità di Vim per aiutarmi a salvare lo schermo immobiliare, pur permettendomi di scrivere il codice in modo dettagliato. Non mi dispiace digitarlo, voglio solo un uso più efficiente dello spazio. Ho pensato che forse avrei potuto far crollare automaticamente le linee vuote gratuite di Vim.
Sto trovando un po 'difficile impostare questo usando le regole di sintassi perché tutto ciò che scrivo sembra essere in conflitto con le regole di sintassi esistenti, ma quello che ho deciso di fare come primo tentativo è stato quello di scrivere queste regole che non si scontreranno:
syntax match aaaaaaaaa "\vabcd" conceal cchar=A
syntax match bbbbbbbbb "\vef\ngh" conceal cchar=B
La seconda regola qui è vicina a ciò che voglio, che per il caso parentesi aperta è qualcosa di simile /\v\{(\n\s*){2,}
: abbina una parentesi aperta con qualsiasi numero maggiore o uguale a 2 di una nuova riga seguito da solo uno spazio bianco.
Ciò che accade all'interno di Vim è tuttavia il seguente:
Se scrivo
abcd
una riga, viene nascostoA
come previsto.Se scrivo
ef
su una riga egh
su quella successiva, ENTRAMBI le linee diventano nascosteB
.
Speravo davvero che le due linee ef\ngh
sarebbero state nascoste in una sola riga in modo da poter salvare un po 'di spazio nel buffer verticale in questo modo.
Ma vedo ora che è probabilmente un problema di dettaglio dell'implementazione di Vim. Il collasso delle linee è un problema da risolvere per la piegatura del codice, probabilmente al di fuori del campo di applicazione per quanto riguarda l'occultamento.
Quindi mi chiedo se c'è ancora un modo per fare quello che voglio fare. Forse in qualche modo usando i marker di piega? Il problema è che ho bisogno di piegare solo gli spazi vuoti.
:h fold-expr
e:h 'fdm'
git
potresti anche essere in grado di utilizzare gli hook per rendere le modifiche applicabili in modo trasparente.