avrei usato il potere di macro Vim.
Supponiamo che non si dispone di alcun altro personale nel file tranne i record e la prima registrazione inizia sulla prima riga. E che non hai l'inizio del livello 1 e finisci sulla stessa linea. E tutti i tuoi {} corrispondono bene.
Vai alla prima voce e registrare una macro per registrare un (qa
- avviare la registrazione q
- fermata)
/{^MV%k:s/\n/EEEEEE/^Mj^
Copia mia o meglio registrare da soli: (^ M - sta per letterale immettere)
- /{^ M trova successivo {
- V% k linea di selezione-morsa fino alla fine del livello 1, ma non la linea di chiusura con}}}
- : s/\ n/EEEEEE/^ M cambia il simbolo 'fine linea' in una stringa unica all'interno della selezione
- j^passa una riga in basso e alla riga della richiesta nel caso in cui il record precedente avesse spazi iniziali.
eseguire la macro a partire dalla seconda linea (supponiamo che il primo viene elaborato già quando ha registrato la macro.) In modalità normale 100000 @ a - uso qualunque sia il numero maggiore di numero dei record. La macro si fermerà da sola quando tutte le linee vengono elaborate se il primo record si trova nella prima riga del file. Come effetto collaterale selezionerà visivamente la prima linea - deselezionandola.
Ordina il file
:sort
Ripristinare la fine delle linee: :% s/EEEEEE/^ M/g
Nota^M dovrebbero essere letterale entrare. Per digitare utilizzare Ctrl-V Enter
Funziona con livelli nidificati perché% salta alla chiusura corrispondente}. Questo è il motivo per cui è importante avere tutti i {} abbinati bene.
La macro si interrompe quando non è possibile salire con k
è per questo che è necessario disporre del primo record sulla prima riga. Le linee vuote o qualsiasi cosa che non sia un record tra i record saranno ignorate dalla macro.
Il metodo sopra dovrebbe funzionare bene per il file. Se si desidera un approccio più generale con pieghe quindi utilizzare i seguenti comandi nella macro invece di/{e%
aprire In primo luogo tutte le piegature
ZJ - tornare all'inizio della prossima piega aperta
] z - vai alla fine della piega attuale.
Il resto della macro è lo stesso. Questo metodo è più generale ma l'ho trovato meno affidabile in quanto dipende da tutte le pieghe aperte, abilitazione piegatura e così via.