Что нового в Vim 8
В репозитории Vim на Github появился первый черновик документации для версии Vim 8.0. В нём указано, что исправлено большое количество багов и добавлено несколько новых фич.
Асинхронный ввод/вывод, каналы
Vim теперь умеет обмениваться сообщениями с другим процессом в фоне (например, с сервером Python). Сообщения принимаются и обрабатываются, когда Vim ожидает ввода символа.
С каналами связана широкая поддержка JSON, его легко использовать для коммуникации между процессами, что позволяет написать сервер на любом языке. Используются функции |json_encode()|
и |json_decode()|
.
Задания (jobs)
Vim может запустить задание, обменяться с ним данными и остановить его. Это очень полезно для запуска процесса завершения, проверки синтаксиса и проч. Коммуникация происходит через каналы. Задания могут читать и писать в буфер или файл.
Таймеры
Таймеры тоже асинхронные. Они могут срабатывать однажды или периодически и запускать функцию для любой работы.
let tempTimer = timer_start(4000, 'CheckTemp')
Через четыре секунды вызов: >
call CheckTemp()
Партиалы (partials)
В Vim уже есть Funcref, отсылка к функции. Партиал тоже относится к функции, и дополнительно связывает аргументы и/или словарь. Это особенно полезно для обратных вызовов на каналах и таймерах. Например, в вышеупомянутом таймере передаём аргумент функции.
let tempTimer = timer_start(4000, function('CheckTemp', ['out']))
Через четыре секунды вызов: >
call CheckTemp('out')
Пакеты
Плагинов становится всё больше. Чтобы лучше управлять коллекцией плагинов, добавлена поддержка пакетов. Это удобный способ получить один или несколько плагинов, поместить их в директорию и, возможно, обновлять до новых версий. Vim будет загружать их автоматически или только по требованию.
Новые тесты
Это для разработчиков Vim. До сих пор писать тесты для Vim было непросто. В Vim 8 появились функции assert
и фреймворк для запуска тестов. Теперь гораздо проще писать тесты и обновлять их.
Добавлены следующие функции: |assert_equal()|
|assert_notequal()|
|assert_exception()|
|assert_fails()|
|assert_false()|
|assert_match()|
|assert_notmatch()|
|assert_true()|
|alloc_fail()|
|disable_char_avail_for_testing()|
Идентификаторы окон
Раньше доступ к окну проходил только по его номеру. И каждый раз при открытии, закрытии или перемещении этот номер менялся. Теперь у каждого окна уникальный ID, так что окно легко найти.
Добавление отступов к строкам
Появилась опция 'breakindent'
, чтобы вставлять отступы без изменения величины отступа.
Поддержка Direct-X (под Windows)
Опция 'renderoptions'
позволяет переключиться в режим Direct-X (DirectWrite) под Windows.
Поддержка GTK+ 3
GTK+ 2 уже уходит в прошлое, пришло время GTK+ 3. Поддержка уже интегрирована, и она работает довольно хорошо, почти как GTK+ 2.
Улучшения скриптов
Добавлены следующие типы скриптов.
|Special| |v:false|, |v:true|, |v:none| and |v:null|
|Channel| подключение к другому процессу для асинхронного ввода/вывода
|Job| управление процессом
Добавлено много функций и команд для поддержки этих новых типов.
Из других улучшений упомянуто добавление шифрования blowfish2 вместо blowfish.
Есть одно «несовместимое» изменение в Vim 8.0 — это прекращение поддержки MS-DOS.