Язык программирования Lisp с момента своего создания в 1958 году заслужил статус одного из самых уникальных и влиятельных языков. Его особенность — выраженная гомоиконичность и мощная система макросов — делает Lisp гибким и мощным инструментом для решения сложных задач. Несмотря на свою древность, язык продолжает активно использоваться в образовательных и профессиональных кругах. Одной из главных сред разработки для Lisp традиционно считается Emacs с плагином SLIME, предоставляющим широкий спектр инструментов для интерактивного программирования. Однако пользователи Vim, популярного и легковесного редактора, долгое время испытывали нехватку подобных возможностей для Lisp.
Ситуация стала существенно меняться в последние десять лет благодаря развитию плагинов Slimv и Vlime. Slimv (Superior Lisp Interaction Mode for Vim) и Vlime представляют собой два мощных плагина, значительно расширяющих возможности Vim для работы с Lisp. Slimv появился в 2009 году и завоевал популярность среди пользователей Vim, предлагая интеграцию с Lisp Read-Eval-Print-Loop (REPL), структурированные инструменты редактирования, поддержку отладки и возможность автозапуска Swank-сервера. Vlime, более молодой проект, выпущенный в 2017 году, также обеспечивает интерактивное программирование, но строит собственный подход к интеграции с Swank и использует Quicklisp для автоматического управления необходимыми зависимостями. Для комфортной работы с Lisp в Vim необходимо понимание особенностей установки и настройки этих плагинов.
Slimv требует Vim с поддержкой Python, что обеспечивается пакетами vim-nox или vim-gtk, а Vlime способен работать и с базовой версией Vim без дополнительной поддержки Python. Чтобы установить Slimv, достаточно клонировать репозиторий в директорию пакетов Vim и обновить теги справки, после чего можно запускать Swank-сервер автоматически при работе с tmux, GNU Screen или в графической среде. Vlime требует установки Quicklisp, который ответственен за загрузку Swank, а также более сложной конфигурации из-за нестандартной структуры плагина, не совместимой с нативной поддержкой пакетов в Vim 8. Одним из незаменимых инструментов для работы с Lisp в Vim является Paredit, плагин, обеспечивающий структурированный ввод и редактирование s-выражений. Paredit помогает поддерживать баланс скобок, автоматизирует вставку соответствующих закрывающих символов и предоставляет набор удобных клавишных команд для перемещения и изменения структуры кода.
Slimv включает Paredit прямо в поставку, что упрощает настройку, тогда как Vlime требует отдельной установки этого плагина. Функция «electric return» в Paredit позволяет красиво форматировать код при переносе строки, автоматически вставляя отступы и поддерживая стиль Lisp. В Slimv эта функция работает полноценно, а в Vlime наблюдаются некоторые ограничения. Работа с REPL — сердце интерактивного программирования в Lisp. Slimv предоставляет полностью интерактивную REPL, в которую можно вводить команды и получать результат выполнения на лету.
Vlime же использует немодифицируемое окно REPL, ограничивая прямой ввод, но предлагает альтернативный режим взаимодействия с выражениями в исходном коде, активируемый соответствующей командой. Это различие является одним из ключевых аспектов выбора плагина в зависимости от потребностей пользователя. Отладка и инспекция кода в Slimv и Vlime реализованы через SLDB (Slime Debugger). При возникновении ошибок открывается отдельное окно с возможностью просмотра трассировки стека, инспекции локальных переменных и выбора вариантов рестартов. Slimv и Vlime предоставляют удобные клавиши для навигации и взаимодействия с окном отладки, что существенно облегчает отладочный процесс и делает его более понятным для разработчика.
Одной из полезных функций обеих платформ является трассировка функций, позволяющая отслеживать вызовы, аргументы и возвращаемые значения для заданной функции. Slimv предоставляет это с помощью простой команды, выводя результат непосредственно в REPL окно. Vlime требует загрузки дополнительного Swank модуля для поддержки трассировки и предоставляет удобный интерфейс с диалогом для управления трассировками. Комфорт разработки повышает набор дополнительных функций, таких как оценка текущего выражения или верхнеуровневого формы, отображение аргументов функции в реальном времени, а также поддержка «rainbow parentheses» — цветового выделения парных скобок для улучшения читаемости кода. В Slimv данная функция встроена и активируется через простое добавление настройки, для Vlime же существуют отдельные популярные плагины, реализующие подобный эффект.
Еще одним важным аспектом является поддержка различных реализаций Lisp. Slimv доказал свою совместимость не только с SBCL, но и с CLISP, ECL, MIT/GNU Scheme и даже Clojure, что делает его универсальным выбором для разнородных проектов. При работе с альтернативными Lisp реализациями зачастую требуется ручной запуск Swank-сервера или настройка дополнительных параметров. Vlime изначально ориентирован на SBCL и прямую поддержку других Lisp диалектов не предоставляет. Настройка Vlime для работы с CLISP или ECL требует дополнительной конфигурации запуска сервера через функции, объявленные в vimrc, и использование специфичных параметров командной строки для корректного старта.
Несмотря на это, Vlime поддерживает необходимые базовые возможности для полноценной работы с этими реализациями, но требует большего вовлечения в процесс настройки пользователя. Работа с другими диалектами Lisp представляет интерес для узкой аудитории. Slimv позволяет работать с MIT/GNU Scheme и Clojure, предоставляя соответствующие Swank-серверы и механизмы соединения. Такие возможности отсутствуют у Vlime, что ограничивает его применение исключительно Common Lisp средами. При сравнении Slimv и Vlime стоит обратить внимание на структуру установки и интеграции с Vim.
Slimv соответствует стандартной структуре плагинов Vim и с лёгкостью устанавливается с помощью встроенной поддержки пакетов, в то время как Vlime требует более сложной установки с добавлением в runtimepath. Преимущества Slimv заключаются в интерактивном REPL, встроенном Paredit, поддержке нескольких Lisp диалектов и удобном отображении вспомогательной информации. Vlime же выигрывает за счёт меньших системных требований, поскольку не требует Vim с Python, и собственной автоматизации в загрузке Swank через Quicklisp. Однако отсутствие интерактивного REPL и необходимость установки Paredit отдельно могут вызывать неудобства. Итогом становится рекомендация выбирать Slimv для пользователей, стремящихся к максимально богатой, удобной и гибкой среде разработки Lisp в Vim, готовых потратить немного времени на установку и настройку.