В этой статье речь пойдёт про некоторые его преимущества, которые, на мой взгляд, наиболее важны для конечного пользователя.

Нативный LSP-клиент

Language Server Protocol

LSP --- протокол для взаимодействия редактора кода (чаще всего) с сервером языка программирования, позволяющий реализовать такие функции как автодополнение, переход к определению, иерархию вызовов и многое другое.

В 1798 году власти США заключают контракт Эли Уитни, частным репетитором и изобретателем коттон-джин, первой эффективной машины по очистке хлопка, на изготовление 10 тысяч мушкетов.

Коттон-джин 19-века в музее Эли Уитни
Коттон-джин 19-века в музее Эли Уитни

Стоит отметить, что Эли никогда в жизни не изготавливал мушкеты, тем не менее уже в январе 1798 года он получил контракт на доставку 10-15 тысяч мушкетов в 1800 год

Несмотря на то, что господин Уитни и был смышлёным, но оружие никогда не делал, однако у него было преимущество: он видел проблему --- отсутствие стандартизации. Сложно представить, но тогда каждый экземпляр оружия был уникальным, оружейники просто не имели каких-то чётких стандартов или же лекал. Уитни нашёл такой метод изготовления оружия неэффективным, ему удалось его изменить. Уже в 1801 году изобретатель представил Конгрессу США 10 одинаковых пушек, разобрав их, он перетасовал составляющие части. Они подходили, они были взаимозаменяемыми. Конгрессу, к слову, идея понравилась, и он приказал стандартизировать всё снаряжение войск США.

Про контракт

Заказ он выполнил только в 1809 году.

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

Переносимся уже в не такое далёкое прошлое. Чаще всего при работе в редакторе кода вы бы хотели видеть автодополнение или диагностику кода. Раньше, чтобы обеспечить независимость утилиты, которая будет заниматься подобным надо было сделать примерно так:

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

  2. Написать переходники для каждого популярного редактора кода или IDE.

И вы это делаете, просто потому, что хотите популяризировать свою утилиту.

В 2015 году корпорация Microsoft для своего редактора кода Visual Studio Code изобретает LSP, который позже станет открытым стандартом.

Теперь, если вы напишете крутую утилиту для автодополнения, нет нужды поддерживать большое количество редакторов, ведь есть стандарт. Выигрывают ещё и пользователи, которые теперь не будут страдать от качества прослоек.

Вот так стандартизация и взаимозаменяемость пришли в мир редакторов кода.

Поддержка tree-sitter

Про сам tree-sitter

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

Как вы относитесь к подсветке синтаксиса? Я хорошо, это удобно при написании, для навигации, впрочем, не думаю, что это требует объяснения. Поэтому подсветка синтаксиса важна, как и её качество. Проблема в том, что очень сложно хорошо развивать подсветку синтаксиса большинства ЯП в пределах разработки редактора кода, слишком трудозатратно.

Решение --- переложить эту задачу на отдельную библиотеку.

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

Tree-sitter: до и после (пример из nvim-treesitter)
Tree-sitter: до и после (пример из nvim-treesitter)

Кстати, tree-sitter используется ещё для подсветки синтаксиса GitHub'ом и в редакторе Atom.

Lua

Исторически так сложилось, что Vim поддерживал (де-факто был таким себе интерпретатором) собственный язык программирования как Vim Script. Но дело в том, что достаточно сложно поддерживать и развивать отдельный язык в рамках проекта по созданию редактора кода.

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

Neovim ♥️ Lua
Neovim ♥️ Lua

Итог --- модульность

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

Комментарии (10)


  1. csl
    21.11.2021 03:39

  1. khabib
    21.11.2021 16:28

    А есть готовые конфиги на подобие spacemacs или spacevim?



  1. KisM
    21.11.2021 17:40
    +2

    Что-то я не уловил посыл статьи... Только решил почитать, а статья уже закончилась. Тут больше про LSP и Lua. А как это стыкуется с neovim?


    1. trokhymchuk Автор
      21.11.2021 18:12

      Поддержка этих (только ещё tree-sitter) технологий --- отличительная черта neovim.


      1. vtb_k
        22.11.2021 01:31

        Все это и намного больше есть в Emacs, разве что вместо Lua — Lisp. О какой именно отличительной черте вы хотите нам поведать?


        1. trokhymchuk Автор
          22.11.2021 07:43

          Все это и намного больше есть в Emacs

          В емаксе есть встроенная поддержка ЛСП, tree-sitter и стороннего языка для плагинов?


          1. vtb_k
            22.11.2021 16:52

            Емакс — это интерпретатор лиспа, поэтому ему нет разницы, используете вы встроенные функции, собственно написанные или с внешнего пакета. Поэтому да, поддержка lsp есть, причем 2 разными способами, тоже с tree-sitter. При наличии лиспа никакого 2 языка вообще не надо. А еще в Емаксе есть графический режим, режим сервера-клиента, орг мод, встроенный календарь/почтовый клиент, возможность просматривать картинки/пдф-ки, латех, любые шрифты разного размера с лигатурами и даже встраивают эмоджи. Даже есть встроенный эмулятор вима. Проще назвать то, чего нет в емаксе, чем перечислять то что есть)


            1. trokhymchuk Автор
              22.11.2021 19:05

              Емакс — это интерпретатор лиспа

              А неовим или вим --- интерпретатор вимскрипта. К слову, емакс уже не только интерпретатор, но и компилятор лиспа.

              поэтому ему нет разницы, используете вы встроенные функции, собственно написанные или с внешнего пакета

              Позвольте, разница есть. Дело в поддержке. Ведь, согласитесь, если бы поддержка того же ЛСП была непосредственно в самом емаксе (или модулем), она развивалась бы проектом по созданию емакса, тогда о её качестве можно было бы не беспокоится. Ведь статья была про модульность для разработчика, а ЛСП на сегодняшний день --- стандарт де-факто.

              А еще в Емаксе есть графический режим, режим сервера-клиента, орг мод, встроенный календарь/почтовый клиент, возможность просматривать картинки/пдф-ки, латех, любые шрифты разного размера с лигатурами и даже встраивают эмоджи. Даже есть встроенный эмулятор вима. Проще назвать то, чего нет в емаксе, чем перечислять то что есть)

              Давняя легенда гласит, что в емаксе есть всё, кроме хорошего редактора.

              Это, конечно, шутка, до перехода на вим я и сам долго пользовался емаксом. И, хоть он и лежит в сердце на полочке "первый действительно функциональный редактор", я так и не смог понять, зачем мне в нём календарь и почтовый клиент.

              З.Ы.: благодарю за критику.


              1. vtb_k
                23.11.2021 14:28

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

                Не согласен. Очень много сторонних плагинов имеют аналоги в самом Емаксе, но я предпочитаю пользоваться ими, а не тем, что встроено в Емакс. Просто потому, что выход новой версии Емакса происходит раз в 2-3 года, что очень медленно для некоторых вещей. Например в Емаксе есть vc-mode — режим для интеграции с системами контроля версий. Но есть плагин magit — который на голову удобен и его все используют. То же самое касается режима эмуляции вима, никто не использует viper-mode, все юзают evil-mode, просто потому что он намного лучше. Такие вещи гораздо лучше выносить в сторонние плагины. Хотя наличие альтернативы в голом Емаксе конечно же лучше, чем отсутствие ее вообще.


                Давняя легенда гласит, что в емаксе есть всё, кроме хорошего редактора.

                Давняя легенда врет, потому что есть минимум 3 разных эмуляции вима, встроенные в сам редактор, не говоря уже о сторонних пакетах :)


                vi, vip and viper (ordered by creation date) come built-in with Emacs, all of those emulate VI. vim-mode is a newer, stand-alone effort to actually emulate Vim, vimpulse is a set of extras on top of viper to give one the most useful Vim features. evil was created as replacement to vim-mode.