Внешний индекс 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.