2009-12-17 19 views
12

Tengo ~ 30.000 líneas de código OCaml mal indentado (incluidos los archivos mly y mll) y me gustaría aplicarles sangría. Intenté buscar variaciones de 'ocaml indent' en Google, lo más cercano que puedo hacer es usar Omlet.vim y aplicar sangría al código línea por línea (mediante C-f en modo insertar). ¿Hay alguna manera de hacer la sangría para todas las 30000 líneas?Cómo sangrar el código OCaml existente

Respuesta

8

utilizo Emacs como mi editor con este paquete instalado:

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

Para sangrar el código existente que necesita para resaltarlo y luego usar la combinación de teclas C-M-\

Puede este script por archivo con bastante facilidad y creo que la sangría es bastante buena.

+0

Gracias, eso funcionó. – vbigiani

+1

Puede hacer lo mismo en tuareg-mode con 'M-q'. Sin embargo, no sé cómo se adapta a miles de líneas. –

+0

@Chris, estás en lo correcto. Utilicé tuareg cuando comencé a aprender OCaml y creo que es más popular que el paquete alojado en el sitio de inria. Simplemente prefiero el paquete que publiqué. Pero tome eso con un grano de sal ya que no soy el programador de OCaml más pulido;) – chollida

3

Cuando quiero volver a guión todo un archivo en vim, utilizo la siguiente secuencia de teclas:

ggVG=

Romper esto abajo para usted, gg mueve el cursor al comienzo del archivo. V ingresa al modo visual. G selecciona hasta el final del archivo. = sangra las líneas seleccionadas.

Esto debería ser mucho más rápido que su método de aplicar sangría línea por línea, pero aún así usará las mismas reglas (advertencia: utilizando Omlet, sangría todo un archivo puede tardar un tiempo).

1

Ahora, uno puede usar OCP-guión (OPAM instalar OCP-guión) e invocar así:

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

Uso ocp-indent herramienta para esto. Aquí hay una regla de ejemplo Makefile, que automáticamente le sangrará los archivos ml.

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