LINUX.ORG.RU

Neovim 0.9.0

 ,


1

3

7-го апреля был тихо и незаметно опубликован новый мажорный релиз Neovim 0.9.0. В этой версии были исправлены более 300 ошибок, проведён рефакторинг исходного кода, а также были добавлены новые возможности и удалены устаревшие.

Осторожно, простыня:


Несовместимые изменения:

  • Удалена поддержка cscope:

    • Удалённые команды:
      • :cscope
      • :lcscope
      • :scscope
      • :cstag
    • Удалённые опции:
      • cscopepathcomp
      • cscopeprg
      • cscopequickfix
      • cscoperelative
      • cscopetag
      • cscopetagorder
      • cscopeverbose
    • Удалённые функции:
      • cscope_connection()
  • Удалена команда :hardcopy и соответствующие ей опции:

    • printdevice
    • printencoding
    • printexpr
    • printfont
    • printheader
    • printmbcharset
  • Опция paste помечена как устаревшая, а pastetoggle удалена. paste работает автоматически в графическом и текстовом интерфейсах Nvim.
    Просто вставь.™ [sic.]

  • Изменения в vim.treesitter.get_node_text():

    • Теперь эта функция всегда возвращает строку вместо string|string[]|nil.
    • Опция concat была удалена, так как она применялась непоследовательно.
    • Недействительные диапазоны теперь вызывают ошибку вместо того, чтобы возвращать nil.
  • Treesitter-парсер help был переименован в vimdoc. Единственное изменение, которое затронет пользователей, заключается в том, что специфичные для языков группы подсветки должны быть переименованы из @foo.help в @foo.vimdoc.

  • Значение по умолчанию для переменной commentstring теперь пустое вместо /*%s*/.

  • Теперь для сборки Nvim требуются libiconv и intl.


Новые возможности

  • Подсветка синтаксиса Treesitter для файлов help теперь поддерживает подсвеченные примеры кода. Для включения необходимо создать файл .config/nvim/ftplugin/help.lua со следующим содержимым:
vim.treesitter.start()
  • В клиент LSP добавлена поддержка подсветки семантических токенов. Эта функциональность включена по умолчанию в тех случаях, когда к буферу подключен клиент, поддерживающий эту возможность. Отключить её можно путём удаления semanticTokensProvider из раздела {server_capabilities} в обратном вызове LspAttach.

  • vim.inspect_pos(), vim.show_pos() и :Inspect позволяют получить или показать элементы в указанной позиции в буфере. На текущий момент это работает для объектов, захваченных Treesitter’ом, семантических токенов LSP, синтаксических групп, и расширенных меток (extmarks).

  • vim.treesitter.inspect_tree() и :InspectTree открывают разделённое окно, отображающее текстовое представление узлов в языковом дереве для текущего буфера.

  • Опция statuscolumn для настройки области сбоку от окна, обычно содержащей колонки складок, знаков и номеров строк. Эта новая опция использует синтаксис statusline и может использоваться для преобразований над номерами строк, создания обратных вызовов, для кликов мышкой по знакам, добавления пользовательских отступов и разделителей и т. д.

  • vim.secure.trust() и :trust позволяют управлять файлами в базе данных доверенных файлов. vim.secure.read() читает файл и запрашивает у пользователя, можно ли доверять этому файлу, и, если да, то возвращает содержимое файла. Используется в exrc.

  • Поддержка EditorConfig теперь встроена в Neovim. Она включена по умолчанию и срабатывает автоматически. Для её выключения необходимо добавить

vim.g.editorconfig = false

или Vimscript-эквивалент в файл конфигурации.

  • Новая переменная окружения NVIM_APPNAME позволяет указывать каталоги, в которых Neovim должен искать свои файлы конфигурации и состояния.

  • Добавлена поддержка запуска сценариев Lua из оболочки командной строки при помощи опции -l.

nvim -l foo.lua --arg1 --arg2

Также работает и с stdin:

echo "print(42)" ` nvim -l -
  • Добавлена реализация omnifunc для Lua, vim.lua_omnifunc().

  • Добавлен новый экспериментальный lua-loader, который байт-компилирует и кэширует файлы. Для включения нового загрузчика нужно добавить следующую строку в начало файла init.lua:

vim.loader.enable()
  • Добавлена функция lua-version для разбора и сравнения строк версий, соответствующих спецификации semver.

  • Если Nvim используется в Tmux 3.2 или более новой версии, то поставщик буфера обмена по умолчанию теперь копирует в системный буфер обмена (provider-clipboard).

  • Опция showcmdloc для отображения информации showcmd в строке статуса или заголовке вкладки. Появился новый элемент строки статуса %S для отображения текста showcmd в пользовательской statusline. Полезно в случаях, когда для cmdheight установлено значение 0.

  • Опция splitkeep для контроля поведения прокрутки горизонтально разделённых окон.

  • У diffopt теперь есть опция linematch для включения «второго уровня» diff для индивидуальных участков, что позволяет получать более точные diff’ы. Эта опция также доступна для vim.diff()

  • Добавлена опция --remote-ui для подключения к удалённому экземпляру программы и отображения её в текстовом интерфейсе в локальном терминале. Это позволяет запускать экземпляр Nvim в фоне и отображать его интерфейс по запросу, что ранее было возможно только при использовании сторонних реализаций пользовательского интерфейса.

  • Добавлена функция vim.lsp.codelens.clear() для очистки «линз кода» (codelenses).

  • В клиент LSP добавлена поддержка возможностей willSave и willSaveWaitUntil. willSaveWaitUntil позволяет серверу модифицировать документ перед сохранением. Примером использования для языковых серверов может быть удаление неиспользуемых импортов или форматирование файла.

  • В клиент LSP добавлена начальная поддержка возможности workspace/didChangeWatchedFiles для уведомления серверов об изменениях файла на диске. Эта функция выключена по умолчанию и может быть включена опцией workspace.didChangeWatchedFiles.dynamicRegistration=true.

  • vim.diagnostic теперь поддерживает LSP DiagnosticsTag.

  • vim.diagnostic.is_disabled() проверяет, отключена ли диагностика в данном буфере или пространстве имён.

  • Захваты Treesitter теперь могут быть преобразованы в директивы. Это позволяет более сложные внедрения для динамических языков.

  • vim.treesitter.get_node_text() теперь принимает опцию metadata для записи пользовательских директив при помощи vim.treesitter.query.add_directive().

  • Функция vim.treesitter.language.require_language заменена на vim.treesitter.language.add().

  • vim.treesitter.foldexpr() может использоваться в foldexpr, что позволяет использовать Treesitter для задания складок.

  • API TSNode расширено следующими функциями:

    • TSNode:tree()
    • TSNode:has_changes()
    • TSNode:extra()
    • TSNode:equal()
      Дополнительно, TSNode:range() теперь принимает опциональный аргумент {include_bytes}.
  • Запросы внедрения Treesitter теперь используют формат, описанный здесь. Поддержка предыдущего формата будет удалена в будущем выпуске.

  • Добавлена функция nvim_get_hl() для получения определений групп подсветки в формате, совместимом с nvim_set_hl().

  • Добавлена функция vim.filetype.get_option() для получения значения по умолчанию для конкретного типа файлов. Это кэширующая обёртка вокруг nvim_get_option_value().

  • require'bit' - теперь всегда доступный lua-bit


Изменённые функции.

  • exrc теперь поддерживает файл .nvim.lua.

  • exrc больше не помечена как устаревшая опция.

  • Текстовый интерфейс пользователя (TUI) теперь выполняется в отдельном процессе (ранее использовался отдельный поток). Это не должно затрагивать пользователя, но может быть причиной небольших изменений в поведении и ошибок.

    Ранее TUI мог быть выключен при сборке (опции +tui/-tui), при этом собранный экземпляр мог быть запущен только в режиме без интерфейса (headless) или встроенным во внешний процесс. Начиная с текущей версии, TUI доступен всегда.

  • Функция Vim has('gui_running') теперь поддерживается для плагинов как способ проверки того, что к Nvim присоединён графический, а не текстовый, интерфейс.

  • Опция msgsep теперь всегда включена, даже если display не содержит флага «msgsep». Теперь при отображении сообщений, длина которых больше cmdheight, не будет прокручиваться весь экран.

  • Вызовы API теперь отображают больше информации о том, где возникло исключение.

  • Пользовательский интерфейс win_viewport теперь содержит информацию о виртуальных строках, что позволяет более однообразно реализовать плавную прокрутку.

  • Синтаксис := {expr} можно использовать для выполнения выражений Lua, как более короткую форму :lus ={expr}. := и :[range]= без аргументов оставлены без изменений. Однако, :=# и похожие варианты, использующие ex-flags, больше не поддерживаются.

  • Теперь при закрытии channel-stdio несохраненные изменения сохраняются, а не сбрасываются.

  • Функция nvim_open_win() теперь принимает опцию mouse для открытия плавающего окна, расположенного относительно курсора мыши. Учтите, что мышка редко обновляется, если не задана опция vim.o.mousemoveevent = true.

  • Функция nvim_eval_statusline() поддерживает выполнение statuscolumn через новое поле opts: use_statuscol_lnum.

  • Функция nvim_buf_get_extmarks() теперь принимает -1 в качестве ns_id для запроса расширенных меток из всех пространств имён и добавляет идентификатор пространства имён к массиву details. Остальные недостающие свойства были также добавлены к массиву details, и метки теперь можно фильтровать по типу.

  • Функция vim.diagnostic.open_float() (а, следовательно, и vim.diagnostic.config()) теперь принимают опцию suffix, которая по умолчанию показывает коды ошибок LSP. Конфигурация virtual_text в vim.diagnostic.config() теперь также имеет опцию suffix, которая по умолчанию ничего не делает.

  • Функция vim.fs.dir() теперь принимает аргумент opts, содержащий поле глубины, что делает возможным рекурсивный поиск в дереве каталогов.

  • Функция vim.gsplit() поддерживает все возможности vim.split().

  • Команда :highlight теперь поддерживает дополнительный атрибут altfont.

  • Просмотрщик страниц документации :Man теперь поддерживает имена страниц с пробелами.

  • Функция nvim_select_popupmenu_item() теперь поддерживает всплывающее меню cmdline-completion.

  • Функция nvim_list_uis() сообщает все поля ui-option.

  • Функция nvim_get_option_value() теперь принимает опцию filetype, которая возвращает опцию по умолчанию для конкретного типа файлов.

  • Произведён ряд улучшений сборки, которые повышают детерминистичность скриптов генерации кода, и добавляют параметр сборки LUA_GEN_PRG, позволяющий обойти некоторые оставшиеся проблемы с воспроизводимостью.


Удалённые возможности.

  • filetype.vim удалён в пользу lua-filetype (Учтите, что логика типов файлов и тесты всё ещё согласованы с Vim, поэтому добавления и изменения должны сначала вноситься туда.)

  • Удалены опции hkmap, hkmapp и aleph. Вместо них предлагается использовать опцию keymap.

  • LanguageTree:parse() больше не возвращает изменённые области. Взамен можно использовать обратные вызовы on_changedtree.

  • Удалены функции vim.highlight.create() и vim.highlight.link(), их заменяет функция nvim_set_hl().

  • Удалена функция require'health', вместо неё предлагается использовать vim.health.


Следующие функции объявлены устаревшими и будут удалены в будущем выпуске:

  • Функция vim.treesitter.language.require_language() заменена на vim.treesitter.language.add().

  • Функции vim.treesitter.get_node_at_pos() и vim.treesitter.get_node_at_cursor() объявлены устаревшими в пользу vim.treesitter.get_node().

  • Функции vim.api.nvim_get_hl_by_name() и vim.api.nvim_get_hl_by_id() объявлены устаревшими в пользу nvim_get_hl().

  • Следующие функции верхнего уровня Treesitter были перемещены:

  vim.treesitter.inspect_language()    -> vim.treesitter.language.inspect()  
  vim.treesitter.get_query_files()     -> vim.treesitter.query.get_files()  
  vim.treesitter.set_query()           -> vim.treesitter.query.set()  
  vim.treesitter.query.set_query()     -> vim.treesitter.query.set()  
  vim.treesitter.get_query()           -> vim.treesitter.query.get()  
  vim.treesitter.query.get_query()     -> vim.treesitter.query.get()  
  vim.treesitter.parse_query()         -> vim.treesitter.query.parse()  
  vim.treesitter.query.parse_query()   -> vim.treesitter.query.parse()  
  vim.treesitter.add_predicate()       -> vim.treesitter.query.add_predicate()  
  vim.treesitter.add_directive()       -> vim.treesitter.query.add_directive()  
  vim.treesitter.list_predicates()     -> vim.treesitter.query.list_predicates()  
  vim.treesitter.list_directives()     -> vim.treesitter.query.list_directives()  
  vim.treesitter.query.get_range()     -> vim.treesitter.get_range()  
  vim.treesitter.query.get_node_text() -> vim.treesitter.get_node_text()  
  • Функция nvim_exec() объявлена устаревшей в пользу nvim_exec2().

  • Функция vim.pretty_print переименована в vim.print.

Полный (и весьма внушительный) список изменений, бинарные сборки и исходные коды доступны по ссылке:

>>> подробности

★★★★★

Проверено: maxcom ()
Последнее исправление: Virtuos86 (всего исправлений: 2)

Есть вопрос по термину «детерминистичность». Это как-то не по-русски (детерминизм?), и есть ощущение, что можно поудачнее перевести.

Virtuos86 ★★★★★
()

Если кто-то думает обновляться, то там какое-то изменение ломает Neovide. Я на днях обновился, пришлось откатываться. Когда пофиксят в neovide, не знаю, но о проблеме осведомлены, надеюсь, что скоро.

emorozov
()

Функция nvim_exec() объявлена устаревшей в пользу nvim_exec2()

безупречный руст не умеет перегрузку спасающую от ебобо-апи или она внезапно не пригождается без наличия ООП?

Syncro ★★★★★
()

Если новости публикуете то хоть пишите что это такое и для чего(((

dumauz ★★
()
Ответ на: комментарий от EXL

https://ru.wiktionary.org/wiki/детерминистический

Происходит от сущ. детерминист и детерминизм

Где здесь «детерминистичность»? Я такое слово нагуглить даже не смог, оно есть в словарях?

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от Syncro

безупречный руст

Neovim 0.9.0

Закусывать надо! (с)

Virtuos86 ★★★★★
()
Ответ на: комментарий от Syncro

безупречный руст не умеет перегрузку спасающую от ебобо-апи или она внезапно не пригождается без наличия ООП?

При чём тут руст, neovim же на сишке написан?

Ну и да, в перегрузку функций не умеет C-api, так что на любом ультра-супер-модном ЯП, выставляющим наружу сишный api придётся следовать ограничениям сишки и делать exec2 и т.п. А если хочешь иметь возможность писать плагины на разных языках, то у сишного апи не так уж много альтернатив.

Ivan_qrt ★★★★★
()

Пипееееец!

Нус, поздравляю всех причастных - любителей «этого дела»…

UriZzz
()

Neovim это редактор, в котором чувствуется большой потенциал, и с каждым годом он только хорошеет.

Конфиг на lua реально рулит, плагины удобные и нетормознутые, конфигурация удобна, нет всего этого трешового вимскрипта с кучей велосипедов и километровых портянок в .vimrc.

Сам редактор быстрый и резкий, если не превращать его в IDE. Короче, всем советую.

Fizzika ★★
()
Последнее исправление: Fizzika (всего исправлений: 1)

Перелез недавно с Вима, чисто ради Treesitter, т.к. дефолтная вимовская подсветка иногда странным образом «лагала», плюс выглядит Treesitter приятнее. Еще конфиг можно на мелкие кусочки разбить, это тоже хорошо. Так что, ура, товарищи!

gill_beits ★★★★
()
Ответ на: комментарий от Fizzika

Не моё, не))). Пытался как то, просто хотел попробовать, но это нечто задротское, для истых хакеров/програмеров.

UriZzz
()
Ответ на: комментарий от gill_beits

Treesitter добавляет адские тормоза. Файлы больше 10 Мб размером лучше не открывать с treesitter. Если мне надо порыться в каком-нибудь дампе SQL или портянке JSON размером в десятки Мб, то сразу лезу в конфиг и вырубаю триситтер, ибо с ним neovim просто зависает. Дефолный nvim без плагинов открывает такие файлы моментально (с подсветкой).

emorozov
()

Плохо они ведут сайт. Недавно заходил была новость про 0.5. Сейчас последняя новость про релиз 0.7. Оказывается, вышел 0.8 и даже 0.9. Был уверен, что умерло.

cchr
()
Ответ на: комментарий от Ivan_qrt

При чём тут руст, neovim же на сишке написан?

попутал%), отлегло теперь, я уже думал попробовать пользоваться, но зигующее хайпожорство отпугивало

А если хочешь иметь возможность писать плагины на разных языках

разные языки нинужно потому как в большинстве они убогие и дефективные, вот назовите хоть пару нормальных

Syncro ★★★★★
()

Странно, что cscope выкинули. Я его использовал, когда с ядром приходилось работать.

Или более современные парсилки уже не ломаются об ядро и не тормозят?

anarquista ★★★★★
()
Ответ на: комментарий от emorozov

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

Syncro ★★★★★
()
Ответ на: комментарий от gill_beits

Перелез недавно с Вима, чисто ради Treesitter, т.к. дефолтная вимовская подсветка иногда странным образом «лагала», плюс выглядит Treesitter приятнее. Еще конфиг можно на мелкие кусочки разбить, это тоже хорошо.

Я тыкал сабж некоторое время (но было это довольно давно), каких-то преимуществ не обнаружил и откотился обратно в Vim.

Выше пишут что конфиг на Lua, ты пишешь про Treesitter, всё это выглядит вкусно, но как оно выйдет на практике? Помнится, у Neovim remote сбоку; я пользуюсь им нечасто, но порой он прям сильно нужен, и в своё время мне пришлось писать жирную портянку-обёртку, чтобы это работало должным образом.

mord0d ★★★★★
()
Ответ на: комментарий от UriZzz

Пытался как то, просто хотел попробовать, но это нечто задротское

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

Ну а так да, красноглазинга много. По сути nvim/vim в мире редакторов это как LFS в мире дистрибутивов. Ты сам из говна и палок собираешь свой редактор под свои нужды.

Fizzika ★★
()
Ответ на: комментарий от mord0d

Treesitter более корректно подсвечивает, из-за этого я им и пользуюсь. Но ничего бесплатного не бывает, триситтер правильно подсвечивает за счёт того, что парсит текст, а это никогда не бывает быстро.

emorozov
()
Ответ на: комментарий от Fizzika

Плохая аналогия. LFS — это задротство ради задротства. У vim/nvim есть масса преимуществ, по сравнению с другими редакторами. В частности, гораздо более легкое и быстрое редактирование, особенно текстов программ.

emorozov
()
Ответ на: комментарий от emorozov

Любая аналогия имеет границы применения и не является каким-то там аргументов в спорах :)

Fizzika ★★
()
Ответ на: комментарий от mord0d

как оно выйдет на практике?

Ровно тот же Вим, можно вообще не переписывать конфиг, если не хочешь. Сверху намазано Lua, что дает плюшки плагинописателям и позволяет переписать конфиг на lua (если не вдаваться в скриптинг, то это просто позволяет превратить огромную простыню в несколько удобно редактируемых файлов). Можно прямо в lua вставлять куски вим-синтаксиса: vim.cmd([[vim code here]]).

Neovim remote

Там странное. Вообще функционал от Вима отличаться не должен, но как-то наткнулся на инфу, что Neovim с чистым Вимом не контачится нормально.

gill_beits ★★★★
()
Ответ на: комментарий от emorozov

Встречал в каких-то конфигах прописанное ограничение по количетсву строк в файле - т.е. если строк, скажем меньше 10000, то TS включается, иначе нет. Погугли - всё удоьнее чем вручную в конфиге отрубать.

najlus ★★★★★
()
Ответ на: комментарий от emorozov

парсит текст, а это никогда не бывает быстро

Насколько это медленно? Насколько это ресурсозатратно? Я так понимаю, на слабом железе оно сильно проиграет в скорости встроенному парсеру Vim (который тоже не сказать что быстрый, и это на слабом железе ощущается)?

mord0d ★★★★★
()
Ответ на: комментарий от gill_beits

Ровно тот же Вим, можно вообще не переписывать конфиг, если не хочешь.

Не совсем так. Даже когда я тыкал nvim ранее, немного пошатать конфиг пришлось и в сторону nvim, и потом обратно. Но по большей части совместимо, да.

Сверху намазано Lua, что дает плюшки плагинописателям и позволяет переписать конфиг на lua (если не вдаваться в скриптинг, то это просто позволяет превратить огромную простыню в несколько удобно редактируемых файлов). Можно прямо в lua вставлять куски вим-синтаксиса: vim.cmd([[vim code here]]).

Это довольно удобно, на самом деле.

Там странное. Вообще функционал от Вима отличаться не должен, но как-то наткнулся на инфу, что Neovim с чистым Вимом не контачится нормально.

Neovim != Vim, потому это ожидаемо. Магии не бывает.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Насколько это медленно? Насколько это ресурсозатратно? Я так понимаю, на слабом железе оно сильно проиграет в скорости встроенному парсеру Vim (который тоже не сказать что быстрый, и это на слабом железе ощущается)?

Замеры не проводил, просто несколько раз пытался на очень мощном железе открывать дампы SQL весом около сотни Мб, neovim просто зависает. Причём незаметно, чтобы так уж сильно грузил ЦП.

Обычно в таких случаях прибиваю его из другой консоли, отключаю treesitter, открываю файл снова, и он открывается моментально.

emorozov
()
Ответ на: комментарий от emorozov

на очень мощном железе

Я в основном с ноута, потому мне этот вопрос довольно критичен. Но тут надо самому тыкать.

Обычно в таких случаях прибиваю его из другой консоли, отключаю treesitter, открываю файл снова, и он открывается моментально.

У него нет крутилок на размеры файла?

mord0d ★★★★★
()

За два дня до выхода 0.9 не дождался и перебазировал свой патч на предрелизную версию 0.9 (master) ради EditorConfig (который заработал отлично). А вот lua не трогал, у меня пока что init.vim по старинке.

Попробовал подсветку tree-sitter с доступным в интернете плагином и парсером C++. Завелось без проблем! Видно, что более продвинуто, чем regex-движок. Но при этом не заметно анализа: подсветка не отличает локальные переменные от членов, имя функции определяет по скобкам после, а макросы по капсу. Я понимаю, что парсеры на основе TS призваны быть сильно проще и быстрее языковых серверов (наверно, он и не лезет во включенные #include файлы?), но через это оно и не сильно полезнее, чем примитивная подсветка ИМХО.

Автоматические выравнивания с парсером tree-sitter оказались умнее стандартного движка в случаях со switch/case, но при этом не следуют (или не полностью) моему cinoptions. Где настроить отдельно, не нашёл. Наверно, плохо искал.

Также в стандартном движке foldmethod=syntax у neovim есть странные баги, когда он, видимо, забывает обновить информацию о фолдах при некоторых операциях редактирования и в результате они слетают и сворачивают вообще не то, что нужно (например между скобками, которые друг другу не соответствуют). Решается повторным :set fdm=syntax, при котором он, видимо, это дело пересчитывает. Я предполагаю, что с нормальным (пусть и примитивным) парсером языка на базе tree-sitter этого бага тоже нет; по крайней мере, не встретил.

Всех причастных поздравляю с релизом!

lwo
()
Последнее исправление: lwo (всего исправлений: 1)

В этой версии было исправлены более 300 ошибок

Новость интересная, но текст писал какой-то «грамотей».

Dr64h ★★
()
Ответ на: комментарий от emorozov

А вот nvim-qt работает. Но он, насколько понимаю, более примитивная оболочка, годится в основном чтобы отвязать редактор от эмулятора терминала, если нужно.

lwo
()
Ответ на: комментарий от Dr64h

Скорее, тут редактировал невнимательный корректор.

Virtuos86 ★★★★★
()
Ответ на: комментарий от mord0d

Выше пишут что конфиг на Lua, ты пишешь про Treesitter, всё это выглядит вкусно, но как оно выйдет на практике?

на практике все очень хорошо. На lua сейчас пишут вообще все плагины в экосистеме. Нормальный человеческий синтаксис, шустро работает (luajit), доступно из коробки.

treesitter это вообще другой уровень по сравнению с тем что было раньше. Он ведь не только для подсветки может применяться, но и для кучи других вещей. Автоотступы, сворачивание кода, убрать или добавить парные скобки, навигация - все это тоже начинает работать лучше. Причем treesitter это не neovim-специфичный проект, а нормальная библиотека, которую можно использовать где угодно. Например в radare2, судя по зависимостям.

Да даже если только про подсветку говорить. Пишешь ты документ в каком-нибудь markdown, вставляешь туда блок кода на C++ - а парсер это распознал и подал сигнал наверх «тут загружай парсер для C++». Вот это я понимаю.

Но для больших файлов все это естественно надо отключать, да.

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 1)

а зачем они в предыдущей версии добавили в vim 300 ошибок?

fMad ★★
()

Я понимаю что это не в духе вима, но умеет ли неовим навешивать функции на сложные комбинации клавиш? Например, Ctrl+Shift+J? (Вим не умеет, он не отличает Ctrl+J от Ctrl+Shift+J.)

debugger ★★★★★
()
Последнее исправление: debugger (всего исправлений: 1)

Отличная новость, пользуюсь сабжем с момента появления

slyjoeh ★★★
()
Ответ на: комментарий от debugger

(Вим не умеет, он не отличает Ctrl+J от Ctrl+Shift+J.)

насколько я понимаю это ограничение не вима, а эмуляторов терминала. И решается тоже на их уровне.

Или можно сделать так. Переходишь в режим вставки, нажимаешь Ctrl+Shift+J и потом Ctrl+V. Оно напишет комбинацию, которую распознал редактор, у меня например это какое-то <S-NL>. Эту комбинацию уже можно мапить.

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 1)
Ответ на: комментарий от Lrrr

На lua сейчас пишут вообще все плагины в экосистеме. Нормальный человеческий синтаксис, шустро работает

Ну, рассказывать мне о преимуществах Lua как-то странно, учитывая что я на нём довольно часто пишу (а ещё пользуюсь оконным менеджером с конфигом на Lua и терминалом с конфигом на Lua). ☺

Вопрос был скорее в плане «насколько это хорошо именно у nvim».

treesitter это вообще другой уровень по сравнению с тем что было раньше. Он ведь не только для подсветки может применяться, но и для кучи других вещей. Автоотступы, сворачивание кода, убрать или добавить парные скобки, навигация - все это тоже начинает работать лучше. Причем treesitter это не neovim-специфичный проект, а нормальная библиотека, которую можно использовать где угодно. Например в radare2, судя по зависимостям.

А вот это для меня оказалось новостью. Только про LSD LSP слышал ранее.

Да даже если только про подсветку говорить. Пишешь ты документ в каком-нибудь markdown, вставляешь туда блок кода на C++ - а парсер это распознал и подал сигнал наверх «тут загружай парсер для C++». Вот это я понимаю.

Именно это мне и показалось вкусным. Очень часто надо, но в Vim это работает только со встроенным в HTML CSS и кое-как кривенько с JS, насколько я знаю (и то, потому что это явно указано и между соответствующими тегами может быть только конкретный тип контента).

Но для больших файлов все это естественно надо отключать, да.

Так и для встроенного парсера приходится отключать. Честно говоря, давно пора придумать какой-нибудь кэш для подсветки синтаксиса в бинарном формате и работать с ним чанками.

mord0d ★★★★★
()
Ответ на: комментарий от Lrrr

насколько я понимаю это ограничение не вима, а эмуляторов терминала. И решается тоже на их уровне.

gvim тоже не отличает Ctrl+J от Ctrl+Shift+J, хотя gvim работает в иксах, а не в эмуляторе терминала.

Переходишь в режим вставки, нажимаешь Ctrl+Shift+J и потом Ctrl+V. Оно напишет комбинацию, которую распознал редактор, у меня например это какое-то . Эту комбинацию уже можно мапить.

Звучит неправдоподобно. Ctrl+J работает как Enter, Ctrl+Shift+J тоже работает как Enter.

Может быть, надо сначала нажимать Ctrl+V? В таком случае да, что-то происходит: после Ctrl+V меняется курсор, и последующая клавиша или комбинация вставляется в текст. Но Ctrl+J и Ctrl+Shift+J приводят к одинаковому результату: ^@. И в виме, и в гвиме, и в неовиме. Гуя для неовима у меня нет, поэтому как ведёт себя неовим в иксах я не знаю.

debugger ★★★★★
()
Ответ на: комментарий от debugger

Может быть, надо сначала нажимать Ctrl+V? В таком случае да, что-то происходит: после Ctrl+V меняется курсор, и последующая клавиша или комбинация вставляется в текст. Но Ctrl+J и Ctrl+Shift+J приводят к одинаковому результату: ^@

ну да, это от оси и терминала зависит. У меня на Ctrl+Shift+J печатает <S+NL>, а на Ctrl+J - вайтспейс какой-то.

проблема в том, что эмулятор терминала, посылая хоткей виму, преобразовывает его в ascii-последовательность, и там какие-то жуткие костыли, легаси и зависимость от фазы луны.

Чтобы все надежно работало, нужно иметь возможность биндить напрямую эту последовательность, без обратного преобразования. Для neovim ее еще не запилили (https://github.com/neovim/neovim/issues/17108), для vim - вероятно тоже.

Вот кстати в zsh это работает, у меня есть в конфиге

bindkey "^[[1;3C" forward-word
bindkey "^[[1;3D" backward-word

чтобы прыгать по словам на Alt+стрелки

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 1)
Ответ на: комментарий от emorozov

neovide

Зачем-то повысили требования к glibc:

$ neovide
neovide: /lib64/libc.so.6: version `GLIBC_2.33' not found (required by neovide)
neovide: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by neovide)
$
$ apt-cache policy glibc
glibc:
  Установлен: 6:2.32-alt5:p10+307861.300.4.1@1666645909
  Кандидат: 6:2.32-alt5:p10+307861.300.4.1@1666645909
  Таблица версий:
 *** 6:2.32-alt5:p10+307861.300.4.1@1666645909 0
        500 http://ftp.altlinux.org p10/branch/x86_64/classic pkglist
        100 RPM Database

Предыдущая версия работала. Самому собирать лень - там такой ад с вендорингом в этом сраном расте…

Turbid ★★★★★
()
Последнее исправление: Turbid (всего исправлений: 2)

Странно читать комментарии экспертов про tree-sitter с жалобами на парсинг больших файлов, когда на гитхабе плагина nvim-treesitter на главной странице лежит пример конфига с проставленной функцией disable, где смотрится размер файла.

fumanchez
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.