Что нового в 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.
    Support the author
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 26

      +8
      Ох как Брэм Муленар засуетился после форка Neovim.
      Async I/O, Jobs и улучшенная система плагинов были одними из основных преимуществ Neovim, но теперь когда эти фичи появятся и в Vim 8.0 привлекательность форка сильно снижается.
      Это очень похоже на ситуацию с Node.js и форком io.js.
        +4
        Было бы хорошо, если бы эти нововведения помогли подсвечивать синтаксис больших файлов не укладывая при этом вим в тормоза.
          +2
          Для этого подсветка должна быть по семантике кода, а не по регуляркам.
            0
            Как раз наоборот — хватит и подсветки по регулярке, только нужно чтобы парсился не весь файл а только область отображаемая в окне и небольшой кусок вокруг окна.
              +3
              А если области вокруг окна недостаточно для определения контекста и подсветки? Подсветка будет прыгать при прокрутке.
                0
                Ну значит иногда подсветка будет ломаться. А расширение области автоматически нас возвращает к изначальной проблеме слишком большого объема данных которые нужно распарсить, чтобы подсветить. В общем в любом случае придется чем-то жертвовать.
                  0
                  Нет, достаточно подсвечивать на основании семантического разбора, который так же может быть использован не только для подсветки.
                    0
                    Я исхожу из того, что если парсить «окно», а не весь файл, то по скорости будет все равно регулярки там или полноценный парсер. А на больших файлах без «окна» тормозит все — и регулярки и парсер. У парсера качество будет выше, но парсер же более чувствителен к ошибкам чем регулярки. И в случае любого парсинга окна я не знаю как можно например побороть ситуации вида:

                    $var1 = "some template  <?php if (true) { ?>some value <?php } ?>";
                    
                    $var2 = 5;
                    
                    ...
                    


                    Вот например граница окна попадает на пробел слева от if. Можно ли в таком случае определить как подсветить текст до if до кавычки — как код php или как строковую константу?
                      +1

                      Вообще, в Vim и сделано примерно как описано выше, только это "окно" определяется по строкам, столбцы не обрезаются. Правила отсечения "окна" (как далеко идти наверх от верхней строки, чтобы попасть в начальное состояние) определяются в правилах подсветки синтаксиса. Если где-то тормозит, то стоит править там в первую очередь. И да, оно бывает неправильно срабатывает из-за этого, но довольно редко. Детали в :help syn-sync.

                        0
                        парсера качество будет выше, но парсер же более чувствителен к ошибкам чем регулярки

                        Ну о том, как обходить ошибки парсинга написана не одна статья.

                        Я исхожу из того, что если парсить «окно», а не весь файл, то по скорости будет все равно регулярки там или полноценный парсер

                        Так парсить проект все равно придется, потому зачем еще что то выдумывать?

                        А на больших файлах без «окна» тормозит все — и регулярки и парсер

                        Ну если парсер инкрементарный, то не очень.

                        Парсить окно это решение одной конкретной проблемы, а их там куча.
            0
            Сам недавно пересел на neovim из-за пары плагинов.
            Или эффект плацебо или он вроде как пошустрее работает, ну и плюс нужный мне плагин deoplete явно быстрее своего аналога от того жа автора.
            –5
            Оно уже умеет работать с системной переключалкой раскладки?
              0
              Так и скажи что не осилил.

              set langmap — гугли.
                +1
                Не осилил, не пригорай к стулу, не осилил.

                Просто если уж начали повсеместно городить костыли, то можно было за столько лет развития проекта что-нибудь и в апстриме поменять.
                  0
                  Не считаю это костылем.
                  Но тут в другом дело, ты свой вопрос задал как «утверждение», что вим не работает при смене раскладки. А не поинтересовался как сделать, чтобы она работала.
                    +1
                    Мне уже приходилось узнавать, как это чинить.

                    Странно, что из поставки, vim работает не с keycode'ами в command и visual режимах, а с символами. Неужели это так сложно было в реализации?
                      0
                      Обратная совместимость же.
              0
              Отличные обновки, куча костылей уходит в утиль. Интересны подробности про «фреймворк для запуска тестов», не так давно закончил xUnit под vim со всеми плюшками на нативном VimL. Может кто знает подробности?
                0
                Кому любопытно, появился проект написания с нуля редактора цель которого выполнять 80% команд vim, при размере кодовой базы в 1%.

                Полная совместимость не планируется, но цель сделать нечто очень похоже. Vim Script, продвинутое управление окнами, GUI реализовываться не будут принципиально. Нормальная подстветка синтаксиса уже сделана. В качестве внутреннего языка используется Lua. Запланирован RPC для внешнего управления (это вместо плагинов).

                На данный момент работоспособен в качестве замены vi, но с подсветкой и визуальным режимом.

                Проект находится вот здесь: github.com/martanne/vis

                  +3
                  появился проект написания с нуля редактора цель которого выполнять 80% команд vim

                  Оо зачем?
                    0
                    Ну я не могу говорить за авторов, но лично я бы не отказался от vim подобного редактора с хорошим RPC, чтоб писать плагины на том языке, который удобен в данном, конкретном случае.

                    Насколько я понимаю, существенная проблема современного vim, в том, что полностью кодовую базу уже никто не понимает и, как следствие, существенные проблемы (например подсветка синтаксиса) не могут решится уже много лет.

                    Т.е. грубо говоря цель это проекта редактор и ничего более.
                      0
                      Привести в порядок кодовую базу Vim дело хорошее, возможно даже делать это придется переписыванием редактора с нуля и выкидыванием с него «ненужного», я это понимаю. Проблема в том, что многие не до конца понимают сложность и ответственность этой затеи, особенно когда предлагают писать с нуля. Часто такие затеи кончаются не очень хорошо. Как по мне, лучше постепенный рефакторинг, чем все эти vis и neovim, но время, конечно, покажет.
                        0
                        Ну как бы на данный момент, как я уже говорил, уже есть релиз, который уже работает, в котором есть подсветка синтаксиса, все базовые кнопки, макросы, визуальный мод, множественные курсоры (новшество, относительно вим).

                        Им уже можно пользоваться как редактором. Что я и делаю последние два дня.
                          0
                          Вопрос не в том, работает vis или не работает. Вопрос в том, что в процессе переноса функциональности vim в vis, всякой кроссплатформиности и т.д. код vis может стать таким же, как код vim (в лучшем случае таким же, как vim после рефакторинга).
                  +1
                  Ну вот, а говорили, что Neovim ненужен. Благодаря этому проекту Брэм зашевелился в правильном направлении.
                    0
                    Вроде neovim ещё код чистили от старого и не поддерживаемого

                    Only users with full accounts can post comments. Log in, please.