Релиз текстового редактора Vim 8.0

2016-09-12

После трёх лет разработки и после более 10 лет развития ветки 7.x состоялся релиз текстового редактора Vim 8.0. Код Vim распространяется под собственной копилефт лицензией, совместимой с GPL, и позволяющей без ограничений использовать, распространять и перерабатывать код. Основная особенность лицензии Vim связана с возвратом изменений - реализованные в сторонних продуктах улучшения должны быть переданы в исходный проект, если мэйнтейнер Vim посчитает эти улучшения заслуживающими внимания и отправит соответствующий запрос. По типу распространения, Vim относится к Сharityware, т.е. вместо продажи программы или сбора пожертвований на нужды проекта, авторы Vim просят перечислить любую сумму на благотворительность, если программа понравится пользователю.

Основные новшества:

  • Поддержка асинхронного ввода/вывода и каналов, позволяющих обмениваться сообщениями с другими процессами в фоновом режиме, что даёт возможность отправлять задания отдельным серверным обработчикам и принимать результаты не прерывая работу основного процесса Vim. Данные при взаимодействии между процессами могут передаваться в формате JSON, что позволяет создавать достаточно сложные плагины на любом языке программирования, работающие в форме отдельно выполняемых серверных процессов;
  • Концепция, позволяющая запустить некоторую задачу в фоне, взаимодействовать с ней и остановить при необходимости. Таким образом, например, можно запустить специальный процесс для проверки синтаксиса или автодополнения кода. Задачи могут записывать и читать содержимое буфера или файла, а также взаимодействовать с основным процессом через каналы;
  • Таймеры, которые позволяют запускать функции через определённое время или через повторяющиеся промежутки времени;
  • Дополнительные средства для косвенного вызова функций - "Partial", которые в отличие от Funcref кроме ссылки на функцию дополнительно прикрепляют к запросу аргументы и словари, что удобно для совершения callback-обращений через каналы и таймеры;
  • Поддержка лямбда-выражений и замыканий для быстрого создания пользовательских функций ("{args -> expr}");
  • Реализация пакетов для установки, обновления и управления плагинами;
  • Возможность обращения к окнам по привязанным к ним уникальным идентификаторам, а не по порядковому номеру окна;
  • Из viminfo информация теперь извлекается на основании времени записи, а не последнего добавленного элемента;
  • Добавлена опция 'breakindent' для смещения строк без нарушения отступов;
  • Добавлена опция 'renderoptions', позволяющая задействовать DirectX (DirectWrite) для отрисовки вывода в Windows;
  • Поддержка сборки графического интерфейса с GTK+ 3. При наличии GTK+ 2 и GTK+ 3 по умолчанию по-прежнему используется GTK+ 2.