2009-12-17 10 views
12

Ho ~ 30.000 righe di codice OCaml con rientro grave (inclusi file mly e mll) e vorrei indentarle. Ho provato googling per le variazioni di 'ocaml indent' il più vicino che posso ottenere è utilizzare Omlet.vim e indentare il codice una riga alla volta (tramite C-f in modalità di inserimento). C'è un modo per fare il rientro per tutte le 30000 linee?Come rientrare codice OCaml esistente

risposta

8

Io uso Emacs come editor con questo pacchetto installato:

http://caml.inria.fr/pub/docs/u3-ocaml/emacs/index.html

Per far rientrare il codice esistente è necessario evidenziarlo e quindi utilizzare la combinazione di tasti C-M-\

È possibile creare script questo per file abbastanza facilmente e trovo che il rientro sia piuttosto buono.

+0

Grazie, ha funzionato. – vbigiani

+1

Puoi fare la stessa cosa in modalità tuareg con 'M-q'. Non so come scala a migliaia di linee però. –

+0

@ Chris, hai ragione. Ho usato tuareg quando ho iniziato ad imparare OCaml e penso che sia più popolare del pacchetto ospitato sul sito di inria. Mi capita solo di preferire il pacchetto che ho postato. Ma prendilo con un pizzico di sale perché non sono il programmatore OCaml più lucido in giro;) – chollida

3

Quando voglio ri-trattino un intero file in vim, utilizzo la seguente sequenza di tasti:

ggVG=

Rottura questo giù per voi, gg sposta il cursore all'inizio del file. V entra in modalità visuale. G seleziona fino alla fine del file. = indenta le linee selezionate.

Questo dovrebbe essere molto più veloce del metodo di applicazione del rientro riga per riga, ma utilizzerà comunque le stesse regole (attenzione: utilizzando Omlet, il rientro di un intero file potrebbe richiedere un po 'di tempo).

1

Ora, si può usare OCP-trattino (OPAM installare OCP-trattino) e richiamare in questo modo:

ocp-indent bad-indented-ocaml.ml > well-indented-file.ml 
0

Usa ocp-indent strumento per questo. Ecco una regola di esempio Makefile, che farà rientrare automaticamente i file ml.

.PHONY: auto-ocp-indent 
auto-ocp-indent: *.ml 
    for mlfile in $^; do ocp-indent -i $$mlfile; done