Я хотел бы знать, как лучше настроить автоматическое форматирование / автоиндентирование в vim для Common Lisp.
Автоматическое форматирование (обычно я делаю это, набирая '==' в командном режиме дляline) работает очень хорошо для базового языка lisp в vim (например, defmacro, defun, lambda, если с-output-to-string), но каждый раз, когда определяются новые языковые конструкции (например, с помощью макросов), я нахожучто форматирование для новой конструкции часто не такое, как мне хотелось бы.
Например, вот как vim форматирует когда (стандартная конструкция lisp) и 'awhen (обычно используемая анафорическая версия')когда; не является частью стандарта lisp)
(when 'this
(process 'this))
(awhen 'this
(process it))
Я хотел бы, чтобы когда-либо автоматически форматировался как.Есть идеи, как мне это сделать?
Редактировать: Спасибо Джиллиган и Тамас за рекомендацию Slimv.В качестве теста я скачал MacVim (это понадобится для работы с терминалом vim, но это другая проблема) и slimv, перегрузил загрузку slimv в ~ / .vim, запустил MacVim и загрузил файл .lisp.
Затем я запустил сервер lisp (через GUI с MacVim), который загрузил мой исполняемый файл lisp по умолчанию и файл ядра.
И *, поскольку мой файл ядра уже загружен с языковыми расширениями, которые я обычно используюиспользовать (будучи одним из них), правильно отформатированный прямо из коробки.
Мне очень нравится это решение.Вместо того, чтобы [1] научиться правильно указывать vim для отступа в определенных функциях, и [2] написать код, который делает это явно для каждого расширения языка, которое я определяю, и [3] обновлять этот код каждый раз, когда я добавляю новыйязыковая конструкция.Вместо этого я использую SlimV, чтобы сделать форматирование для меня.Кроме того, SlimV может «изучать» новые языковые расширения, если эти макросы уже загружены в ядро lisp, используемое сеансом сервера.Довольно гладко!
Я обнаружил, что это хорошо работает для определенного класса языковых расширений.Обычно они определяются как макрос, используя ключевое слово & body.Похоже, что в большинстве случаев это «делает правильные вещи», но есть макросы, которые я использую, но они все равно не могут автоматически форматироваться.Хотя я бы сказал, что это скорее проблема с тем, как написан макрос (нестандартное расширение языка), чем что-либо еще.
Итак, это решение хорошо работает для меня в большинстве случаев, и мне не пришлось ничего кодировать (и поддерживать).Отличный материал!