Tôi có ~ 30.000 dòng mã OCaml được thụt lề rõ ràng (bao gồm các tệp mly và mll) và muốn thụt lề chúng. Tôi đã thử googling cho các biến thể của 'ocaml indent' gần nhất tôi có thể nhận được là sử dụng Omlet.vim và thụt lề mã một dòng tại một thời điểm (thông qua C-f trong chế độ chèn). Có cách nào để làm thụt đầu dòng cho tất cả 30000 dòng không?Làm cách nào để thụt lề mã OCaml hiện tại
Trả lời
Tôi sử dụng Emacs như biên tập viên của tôi với gói này được cài đặt:
http://caml.inria.fr/pub/docs/u3-ocaml/emacs/index.html
Để thụt mã hiện tại bạn cần để làm nổi bật nó và sau đó sử dụng tổ hợp phím C-M-\
Bạn có thể kịch bản này cho mỗi tập tin khá dễ dàng và tôi thấy thụt đầu dòng khá tốt.
Khi tôi muốn tái-indent cả tập tin trong vim, tôi sử dụng trình tự sau đây chính:
ggVG=
Breaking xuống này cho bạn, gg di chuyển con trỏ đến đầu tệp. V chuyển sang chế độ trực quan. G chọn ở cuối tệp. = thụt lề các dòng được chọn.
Điều này sẽ nhanh hơn nhiều so với phương pháp áp dụng dòng thụt đầu dòng, nhưng sẽ sử dụng cùng một quy tắc (cảnh báo: sử dụng Omlet, thụt lề toàn bộ tệp có thể mất một lúc).
Bây giờ, người ta có thể sử dụng OCP-indent (OPAM cài đặt OCP-indent) và gọi nó như thế này:
ocp-indent bad-indented-ocaml.ml > well-indented-file.ml
Sử dụng ocp-indent
công cụ cho việc này. Dưới đây là ví dụ về quy tắc Makefile
, quy tắc này sẽ tự động thụt lề cho bạn ml
tệp.
.PHONY: auto-ocp-indent
auto-ocp-indent: *.ml
for mlfile in $^; do ocp-indent -i $$mlfile; done
Cảm ơn bạn đã hoạt động. – vbigiani
Bạn có thể làm điều tương tự trong chế độ tuareg với 'M-q'. Không biết làm thế nào nó quy mô đến hàng ngàn dòng mặc dù. –
@ Chris, bạn đã đúng. Tôi đã sử dụng tuareg khi tôi bắt đầu học OCaml và tôi nghĩ nó phổ biến hơn so với gói được lưu trữ trên trang inria. Tôi chỉ thích sử dụng gói mà tôi đã đăng. Nhưng lấy nó bằng một hạt muối vì tôi không phải là người lập trình OCaml được đánh bóng nhất xung quanh;) – chollida