Neovim

и другие vi-подобные редакторы

Модератор: /dev/random

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Neovim

Сообщение serzh-z »

Кто-нибудь может объяснить, чем на практике Neovim лучше Vim? Кроме общих фраз с оффсайта про "больше, дальше, лучше". Этот проект вообще живой или всякие SpaceVim его уже задавили?
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Neovim

Сообщение NickLion »

serzh-z
до vim8 у него бьіли преимущества, сейчас их вроде не осталось особо
Спасибо сказали:

Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Neovim

Сообщение ZyX »

Основные преимущества сейчас — это немного полезной мелочи и кучи вещей для разработчиков дополнений. Из полезной мелочи я помню:

- Возможность исполнения произвольных функций при нажатии в область, называемую tabline (Vim позволяет на нажатие реагировать только путём переключения или закрытия табов, если вы вывели туда какую‐то другую информацию и хотите адекватной реакции на нажатие то вариантов кроме Neovim нет).
- Подсветка синтаксиса в командном режиме — либо при редактировании выражений (т.е. <C-r>=, …), либо при использовании input() (т.е. более интересно разработчикам дополнений).
- Предпросмотр результата выполнения s/… во время набора. Постепенно расширяется на другие команды.
- Более конкретные сообщения об ошибках в ряде мест.

Для разработчиков дополнений есть специальное API, для разработчиков конкретно GUI есть и разрабатывается много вещей призванных сделать так, чтобы Neovim не выглядел как окно терминала. Есть проекты по встраиванию Neovim в разные IDE, опирающиеся на новое API. Vim встроить куда‐либо невозможно, даже для разработки GUI вы форкаете Vim и дописываете что‐то, а не общаетесь по специальному протоколу.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8255
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: Neovim

Сообщение serzh-z »

NickLion писал:
06.07.2018 00:04
до vim8 у него бьіли преимущества
Какие, например? Только те, что описал ZyX?
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Neovim

Сообщение NickLion »

serzh-z
Наверное, ZyX больше деталей знает, я nvim щупал, но не очень подробно. В своё время были фичи — асинхронность, мультипоточность, что потом прибыло и в vim8. Остальное больше в лозунгах напоминало "стильно, модно, молодёжно".

Интеграция с другими программами — это да, плюс, но пока его никто серьёзно не использует (OniVim за серьёзно я не считаю, как и любой другой web-browser-based проект).
Спасибо сказали:

Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Neovim

Сообщение ZyX »

Многопоточности ни в Vim, ни в Neovim реально нет. Только в Neovim есть несколько дополнительных потоков вида «забирают X откуда‐то там (к примеру, забирают ввод пользователя) и отправляют в очередь для обработки в основном потоке», но ни до пользователя, ни до авторов дополнений такая «многопоточность» не очень‐то доходит: как исполнение скриптов, так и собственно обработка ввода ведётся в основном потоке, потому что иначе придётся практически всё переписать.

В Neovim первыми добавили таймеры и нормальный IPC, в Neovim первыми добавили пачку улучшений для viminfo, в Neovim первыми добавили поддержку терминала. Брам много чего скопировал (в смысле возможностей, а не кода), но почти всегда несовместимо и иногда с ухудшением из‐за более жёстких требований к совместимости. К примеру, то что сейчас есть в Vim вместо ShaDa — это по сравнению с ним ужас: информация дублируется, бывший относительно читаемым текстовый формат стал намного менее читаемым, но остался текстовым, документации на формат всё так же нет, особенности прямой совместимости не ясны. В Neovim формат бинарный и нет дублирования (нет необходимости держать совместимость со старыми версиями), он весь документирован, в т.ч. документировано и как более старые версии Neovim должны работать с файлами более новых (в смысле, при добавлении там новых типов записей).

Относительно того, кто и куда интегрирует и какие GUI существуют есть wiki: https://github.com/neovim/neovim/wiki/Related-projects. Не знаю, сколько из этих проектов активно используются, но факт в том, что написать GUI для Neovim намного проще, чем для Vim.
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Neovim

Сообщение NickLion »

ZyX писал:
07.07.2018 02:00
Многопоточности ни в Vim, ни в Neovim реально нет. Только в Neovim есть несколько дополнительных потоков
Ну, в vim8 тоже есть, не "только в NeoVim": http://andrewvos.com/writing-async-jobs-in-vim-8
ZyX писал:
07.07.2018 02:00
потому что иначе придётся практически всё переписать
Странно, что в nvim этого не сделали, ведь всё равно проект начат заново, было бы логично изначально это сделать. Но видимо, момент был упущен.
ZyX писал:
07.07.2018 02:00
В Neovim первыми добавили
Вот и я говорю, что преимущества были, но vim тоже подтянулся.
ZyX писал:
07.07.2018 02:00
ShaDa
Если я правильно понимаю, то вы как раз и приложили руку к сему творению?

Ну, в "интернетах" говорят, что neovim более открыт изменениям, по сравнению с vim, возможно, конкурренция заставляет vim больше крутиться.
ZyX писал:
07.07.2018 02:00
но факт в том, что написать GUI для Neovim намного проще, чем для Vim.
Да, как скорее всего правда и в том, что код neovim чище, чем vim (не проверял, но в интернетах пишут).
Но для себя, как пользователя, а не писателя плагинов... не увидел преимуществ особых.
Возможно, через время nvim и обрастёт уникальными плагинами (или с уникальными фичами для nvim, которые не получится/сложно заставить заработать на vim) и инфраструктурой.
ZyX писал:
07.07.2018 02:00
есть wiki: https://github.com/neovim/neovim/wiki/Related-projects.
Опуская библиотеки, вроде "equalsraf/neovim-qt", из всего списка заинтересовало только "eovim" (как обычно, "няшные" EFL проргаммки) и "dzhou121/gonvim".
А, ну, ещё "sassanh/qnvim", но но никаких скришотов, как оно интегрировано не ясно.
Спасибо сказали:

Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Neovim

Сообщение ZyX »

Ну, в vim8 тоже есть, не "только в NeoVim": http://andrewvos.com/writing-async-jobs-in-vim-8
Это ни разу не потоки. Запустить процесс и общаться через pipe (и не только) — это одно и я назвал это «нормальным IPC». Исполнять код в несколько потоков, находящихся в одном процессе с общей памятью — это другое. Вы можете увидеть там страшные callback’и, но они все исполняются в основном потоке, в котором крутится event loop. Насколько мне известно, в Vim много потоков крутят только GUI toolkit’ы и ещё что‐то есть в mzscheme. Возможно ещё для терминалов в libvterm есть потоки, я её не смотрел. Но всё это работает на уровне «засунуть данные в очередь для обработки в основном потоке» при взаимодействии с остальной частью Vim.
Странно, что в nvim этого не сделали, ведь всё равно проект начат заново, было бы логично изначально это сделать. Но видимо, момент был упущен.
Не всё равно. Откуда возьмётся столько разработчиков? Рефакторинг делают и будут делать, но постепенно. Подсистему ввода вот довольно серьёзно улучшили.
Ну, в "интернетах" говорят, что neovim более открыт изменениям, по сравнению с vim, возможно, конкурренция заставляет vim больше крутиться.
Судя по тому, что происходит уже заставляет. Допустимость создания :terminal в рамках Vim прямо отрицалась в :h design-not.
Да, как скорее всего правда и в том, что код neovim чище, чем vim (не проверял, но в интернетах пишут).
Зависит от того, насколько сильно его трогали. Часть кода просто прогнана через formatter и выглядит не очень. То, что трогали — переделывается в соответствии с другим style guide (на основе гугловского). Ещё у нас лучше CI, есть модульные тесты (т.е. можно тестировать отдельный C’шные функции, не делая их доступными из VimL), большой набор добавленных (по сравнению с Vim) функциональных тестов, которые можно писать на lua, у которых не сохраняется состояние между тестами и в которых код самих тестов не является частью состояния тестируемого приложения.

Ещё у нас не 100500 настроек что оставлять в бинарном файле, а что нет. Т.е. нельзя просто взять и не скомпилировать поддержку :terminal, но зато нет разбросанных по коду в огромном количестве #ifdef. И нет такого, что в Vim вроде можно что‐то взять и не скомпилировать, но по факту комбинацию никто не проверял (а не всегда проверяют даже популярные комбинации, в коммитах можно часто найти «Проблема: Vim не компилируется на наборе X»).

В коде также уже отправили практически всё платформо‐зависимое в отдельный каталог, частью переведя на libuv. Попутно убрав ещё больше #ifdef.

К тому же, часть вещей генерируются скриптами на lua (в первую очередь — объявления функций). В некоторых местах они избавляют от стрёмно выглядящих объявлений массива структур, почти везде — от дублирования кода (и поддержания соответствия кода в одном файле коду в другом).
Но для себя, как пользователя, а не писателя плагинов... не увидел преимуществ особых.
Возможно, через время nvim и обрастёт уникальными плагинами (или с уникальными фичами для nvim, которые не получится/сложно заставить заработать на vim) и инфраструктурой.
У нас делают ставку именно на это. В Vim не так уж много и нужно чего добавить, в Neovim основные преимущества для разработчиков.

Ещё, кстати, нельзя забывать про https://github.com/vim/vim/graphs/contributors: всего «один» разработчик, не сильно поменявший workflow за очень много лет, принципиально не пользующийся как многими преимуществами VCS вообще (D я не просто так убрал — не нужно иметь D, чтобы сохранить автора изменения в метаданных), так и github.
Спасибо сказали: