Внешний индекс lisp кода

У меня есть какой -то код, похожий на lisp или схему, который я хочу сделать отступом. Я искал инструменты, такие как GNU indent, но я не смог найти какую-либо утилиту / скрипт командной строки. Их много для C/C++/Java, но почему-то я не могу найти ни одного для lisp / схема, может кто-нибудь, пожалуйста, сообщите мне о таких инструментах отступов, если таковые имеются.

Благодарю.

4 ответа

Вы могли бы использовать emacs в пакетном режиме. Например, вы можете создать файл indent.el

(defun my/indent-file (fPath)
  (let ((buffer (find-file fPath)))
    (message (concat "indenting file " fPath))
    (indent-region (point-min) (point-max))
    (save-buffer)
    (kill-buffer buffer)))

(mapcar 'my/indent-file argv)

и затем вызовите emacs следующим образом, чтобы сделать отступ для множества файлов (обратите внимание, что он будет работать для любого языка, который может узнать emacs, и знает, как сделать отступ):

emacs --load indent.el --batch MY_LISP_FILES

Смотрите, например, эту страницу, чтобы получить больше информации о идиоматических способах использования emacs для пакетной обработки.

редактировать

Вот однострочник, который работает только с одним файлом, но не использует argv переменная (будьте осторожны: важен порядок аргументов):

emacs --batch MY_FILE --eval '(indent-region (point-min) (point-max))' -f 'save-buffer' 

Вот моя амбициозная попытка создать приличный индентор в пакетном режиме под кодовым названием yasi(еще один индентор s-выражения). Если по какой-то причине это не победит вас (это о 800 линии), вы можете отступить к lispindent2.lisp который в основном оригинальный индентор Дораи (lispindent.lisp) с некоторыми изменениями здесь и там. lispindent2.lisp это индентор в пакетном режиме, он такой же скудный, как и исходный (добавлено около 65 строк), но все равно красиво отступает.

Если вы используете vim, этот пост должен дать вам возможность запустить команду vim auto indent для всех файлов. И если вы хотите (IMO) действительно хороший отступ для файлов lisp в vim, я рекомендую загрузить slimv и сервер swank перед выполнением этой команды.

Дорай Ситарам имеет scmindent.scm а также lispindent.lisp скрипты на этом сайте, которые будут работать для этой цели. Изначально они предназначались для того, чтобы позволить вам сделать отступ на языке Lisp в vi.

Другие вопросы по тегам