внешний индекс кода lisp - PullRequest
       20

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

5 голосов
/ 22 марта 2012

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

Спасибо.

Ответы [ 4 ]

3 голосов
/ 22 марта 2012

Вы можете использовать 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' 
2 голосов
/ 04 декабря 2013

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

2 голосов
/ 23 марта 2012

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

1 голос
/ 22 марта 2012

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

...