Меня зовут Никита Ефимов, я – программист в компании Nexign. За последние пару лет в разработке я попробовал огромное количество редакторов для кода разного вида и выделил для себя пару любимчиков.

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

Почему именно NeoVim? Всё просто: этот текстовый редактор стал особенно популярным среди разработчиков. Он представляет собой эволюцию классического Vim (который в свою очередь был улучшением оригинального Vi), с улучшенными возможностями и расширенным функционалом. NeoVim сохраняет совместимость с Vim, но также предлагает дополнительные возможности и улучшенный интерфейс. Он позволяет более эффективно работать с кодом, а главное — настраивать редактор под свои нужды.

Статья получилась довольно объёмная, поэтому вы можете сразу перейти к интересующему вас разделу:

  • История: от Vi(m) до NeoVim

  • Функциональность

  • Преимущества NeoVim

  • Установка NeoVim

  • Настройка

  • Установка плагинов

  • NeoVim как IDE

История: от Vi(m) до NeoVim

История редактора Vi начинается с 1977 года. Vi пришел на замену устаревшему редактору кода для печатного терминала – QED, который был создан еще 1966 году.

Технологии и потребности разработчиков не стоят на месте, и вот уже в 1991 году был создан редактор Vim (улучшенная версия Vi). Vim позволял писать конфигурации, биндить клавиши и делать прочие настройки. Возможности ограничивались одним .vimrc файлом, а конфиги писались только на vimscript.

Ну, а NeoVim был создан программистом Thiago de Arruda из Бразилии в 2013, когда его пул реквест в ветку Vim отклонили.

Функциональность

Оригинальный NeoVim очень похож на Vim и изначально не работает как IDE, в нём нужно самому прописывать конфиг. Но на выходе мы получаем идеальный редактор: в нём всё устроено так, как нужно разработчику. Сейчас существует много готовых IDE-конфигов, которые идентичны по возможностям с Visual Studio Code или с редакторами от JetBrains, но превосходят их за счет скорости работы, а также за счет того, что конфиг можно настроить под себя, оставив только то, что вам нужно. 

Пример персонализированных рабочих окружений:

Преимущества NeoVim

  • Скорость работы. NeoVim базируется на скриптовом языке программирования Lua. Это дает редактору модульность конфига и повышает скорость работы. С NeoVim не нужно ждать открытия редактора, он запускается в терминале моментально.

  • Горячие клавиши. Огромное преимущество NeoVim в его комбинациях клавиш. Все нужные команды всегда под рукой и не нужно лишний раз тянуться до какой-то клавиши, так как перемещение осуществляется клавишами H-J-K-L (но можно и стрелками).

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

  • Интеграция с технологиям. В NeoVim можно подключить интеграцию с любыми технологиями, которые реализованы в других IDE. Например, lazygit для интерфейса взаимодействия с Git или wakatime для отслеживания времени кодинга.

Перейдем к установке NeoVim

NeoVim устанавливается из терминала одной из следующих команд в соответствии с вашей ОС.

  • MacOS
    brew install neovim

  • Arch Linux
    sudo pacman -S neovim

  • Debian и Ubuntu
    sudo apt-get install neovim

  • Fedora
    sudo dnf install -y neovim python3-neovim

  • Flatpak
    flatpak install flathub io.neovim.nvim
    flatpak run io.neovim.nvim

  • Snap
    sudo snap install --edge nvim --classic

  • CentOS 8 / RHEL 8
    yum install -y
    https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
    yum install -y neovim python3-neovim

Инструкции для других дистрибутивов можно найти на GitHub.

После установки откроем NeoVim командой nvim (для нашей следующей настройки рекомендуется версия NeoVim 0.8 и новее).

Поздравляем, вы открыли NeoVim! ???? (осталось выйти из него)

Теперь рекомендуем пройти обучение по управлению редактором, введя команду :Tutor. При нажатии на клавишу « : » внизу появится отображение вводимой команды.

Важно: команды в NeoVim работают только с английской раскладкой.

Настройка

В корневой директории создадим папку (если не существует) .config, а внутри нее создадим папку nvim. Теперь создадим новый файл init.vim и сразу откроем его внутри NeoVim. Сделать это можно с помощью команды nvim init.vim

NeoVim поддерживает несколько режимов работы.

  • Режим командной строки (Command-Line mode)
    В этом режиме вы можете вводить команды для выполнения различных операций, например: сохранение файла, открытие нового файла и т.д. Чтобы войти в этот режим, нажмите клавишу ":".

  • Режим вставки (Insert mode)
    В этом режиме вы можете вводить текст прямо в файл. Чтобы войти в этот режим, нажмите клавишу "i" или "a".

  • Командный режим (Normal mode)
    Это основной режим работы в NeoVim. В нем вы можете перемещаться по файлу, удалять текст, копировать и вставлять содержимое, выполнять другие операции редактирования. Этот режим стоит по умолчанию при запуске NeoVim.

  • Режим визуального выбора (Visual mode)
    В этом режиме вы можете выделять текст для выполнения таких операций над ним, как: копирование, удаление и замена. Чтобы войти в этот режим, нажмите клавишу "v".

  • Режим поиска (Search mode)
    В этом режиме вы можете искать определенные фразы или слова в файле. Чтобы войти в этот режим, нажмите клавишу "/" или "?".

Переходим в режим редактирования клавишей "a" (латинской) и пишем следующий код:

:set mouse 

включает взаимодействие мышью

:set number

включает нумерацию строк

:set relativenumber

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

:set smarttab

умные проставления табов

:set tabstop=2

определяет, каким количеством пробелов будет равен 1 таб

:set shiftwidth=2

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

:set softtabstop=2

то же самое что и tabstop, но в режиме вставки

:set autoindent

для автоматического отступа

Сохраним изменения и выйдем из NeoVim командой :wq (т.е. write and quit).

Теперь при повторном открытии файла в NeoVim мы увидим, что настройки применились и появилась нумерация строк:

Установка плагинов

Предварительно нам потребуется пакетный менеджер VimPlug. Установим его командой:

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim
--create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

Возвращаемся в init.vim и добавляем две строчки в конец, после наших модулей:

call plug#begin()

call plug#end()

Между ними будут располагаться ссылки на плагины.

Добавим первый плагин. Для этого вставим между двумя строками:

Plug 'https://github.com/vim-airline/vim-airline' 

Перезаходим в файл конфигурации и пишем команду :PlugInstall

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

Чтобы все отображалось корректно, в настройках терминала должен стоять любой Nerd шрифт, поскольку они содержат в себе иконки. В нашем случае это JetBrains Mono Nerd Font.

Теперь добавим еще два плагина:

Plug 'https://github.com/preservim/nerdtree'

Plug 'https://github.com/ryanoasis/vim-devicons'

NerdTree позволяет открывать дерево файлов, а devicons подставляет в дереве файлов иконки, основываясь на расширении файла.

После этого переходим обратно в NeoVim и выполняем команду :PlugInstall

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

nnoremap <leader>n :NERDTreeFocus<CR>

nnoremap <C-n> :NERDTree<CR>

nnoremap <C-t> :NERDTreeToggle<CR>

nnoremap <C-f> :NERDTreeFind<CR>

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

Сохраняем и заходим еще раз. После открытия NeoVim, нажимаем ctrl + t и у нас открывается дерево файлов в его базовом виде.

Теперь вы можете настроить NeoVim полностью под себя.

Полный список настроек размещен в официальной документации NeoVim. А плагины можно найти на VimAwesome.

NeoVim как IDE

Теперь мы можем сделать из нашего редактора полноценную IDE. За основу возьмем готовый конфиг – AstroNvim. Официальная документация: https://astronvim.com/ 

Но для начала рекомендую установить зависимости, без них конфиг может работать некорректно.

Установка AstroNvim

Создайте резервную копию текущего конфига nvim и общей папки.

Linux/MacOS

mv ~/.config/nvim ~/.config/nvim.bak

mv ~/.local/share/nvim ~/.local/share/nvim.bak

Windows (Powershell)

Rename-Item -Path $env:LOCALAPPDATA\nvim -NewName $env:LOCALAPPDATA\nvim.bak

Rename-Item -Path $env:LOCALAPPDATA\nvim-data -NewName $env:LOCALAPPDATA\nvim-data.bak

Клонируем репозиторий и запускаем NeoVim

Linux/MacOS

mv ~/.config/nvim ~/.config/nvim.bak

mv ~/.local/share/nvim ~/.local/share/nvim.bak

Windows (Powershell)

git clone --depth 1 https://github.com/AstroNvim/AstroNvim $env:LOCALAPPDATA\nvim

nvim

После захода в nvim у нас откроется окно менеджера пакетов и установятся все пакеты, которые есть в этом конфиге по умолчанию. Почти готово!

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

Пропишем команду :LspInstall <язык>

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

Также в этом окне мы можем установить еще линтеры и форматтеры, например, Prettier. 

Нажмем ctrl + f, чтобы выбрать только то, что относится к нужному нам языку.

После того, как установили LSP серверы для всех желаемых языков, закрыть окно можно с помощью клавиши Esc.

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

Пишем команду :TSInstall <язык1> <язык2> <язык3> <язык4> и перечисляем все языки, для которых нужно установить парсер.

Основная часть установки закончена. Можете открыть файл и начать писать код!

Для того, чтобы ознакомиться с комбинациями в AstroNvim – нажмите пробел, находясь в NeoVim. Всплывет окно с комбинациями клавиш. Например, поиск текста в любом из файлов вызывается путем последовательного нажатия пробел, f, w.

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

Совет: плагины и сам конфиг рекомендуется периодически обновлять. Делается это с помощью двух команд:

:AstroUpdate – обновление самого AstroNvim
:Lazy update – обновление установленных плагинов

Помимо AstroNvim, есть много других IDE подобных конфигов для NeoVim, самые популярные: 

Так почему стоит потратить время и установить NeoVim?

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

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

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

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


  1. Pitcentr0
    15.01.2024 14:14
    +5

    Все описанные преимущества есть в любой IDE и редакторе от JetBrains до VScode, сколько статей не читал про neovim всегда выглядит как извращение, извините, так дойдем до DOS оболочки т.к она быстрее оказывается.


    1. ilnuribat
      15.01.2024 14:14
      +2

      Я сначала перешёл с vscode на вим просто чтобы изучить что это такое и почему о нем так много шума

      Через 6 месяцев решил попробовать вернуться обратно в vscode и чуть не вырвало в прямом смысле: мне приходилось перемещать фокус взгляда между 1) монитором, 2) клавой, и 3) мышкой. При этом когда брал мышку не всегда сразу находил где именно находится курсор. Через 15 минут такого извращения понял что хочу просто положить руки на клаву и не отрывать взгляд от монитора. Это был чистый кайф


  1. includedlibrary
    15.01.2024 14:14
    +3

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

    А как же emacs?

    Предварительно нам потребуется пакетный менеджер VimPlug.

    Довольно странно ставить VimPlug на NeoVim, если все используют lazy.nvim. Тем более в следующей части статьи, посвящённой AtroNvim, уже используется lazy.

    За основу возьмем готовый конфиг – AstroNvim

    А в чём смысл готовые конфиги использовать? Самому настроить проще, чем в чужом конфиге разбираться. Плюс в чужом конфиге может быть то, что тебе вообще не нужно.

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

    Тут вопрос к читающим больше, у меня одного не получается нормально настроить LSP на NeoVim? Сколько раз не пытался, а работает через одно место (тормозит, перестаёт нормально работать: делать переход к определениям, подсвечивать ошибки и т.д.). При том, что тот же language server отлично дружит с emacs без особых танцев с бубном.

    Так почему стоит потратить время и установить NeoVim?

    На самом деле единственное преимущество у vim состоит в том, что он поддерживает большое количество языков, в т.ч. для которых нет IDE. Любая специализированная IDE должна быть мощнее, чем nvim с кучей плагинов. Я сам nvim использую, но это уже дело многолетней привычки, так-то я понимаю, что особых преимуществ нет.


  1. ParaMara
    15.01.2024 14:14
    +3

    Статью можно ужать до одной фразы - установи VimPlug и AstroNvim. На что немедленно следует классическое

    Если хочешь узнать куда тебе идти, скажи что мне делать.

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

    Менеджер плагинов в Neovim необязателен - значит никакого менеджера пакетов. Если уж Neovim - значит никаких конфигов на скриптах, только Lua. И никаких готовых конфигов, статья начального уровня должна объяснять что куда положить и всё. Ещё раз для бестолковых - И ВСЁ. Чтобы потом заинтересовавшийся легче мог понять что вся это дрянь, менеджеры и конфиги, творит и значит.

    И обязательный финал - на примере любого языка показать, что должно происходить когда и TreeSitter и LSP работают.

    Для оценки этой статьи у меня нет слов способных пройти модерацию. Helix forever.


    1. Monnoroch
      15.01.2024 14:14
      +1

      Helix и правда forever. Модель verb-subject больше десятилетия вызывала у меня скрип мозга и сильно замедляла работу в vim. Helix с его subject-verb идеально ложится на мой рабочий мыслительный процесс. Жаль только сам инструмент достаточно сырой. Хотел бы я neovim использовать с моделью helix.


  1. zabanen2
    15.01.2024 14:14
    +1

    не читая статью, проматываю до комментариев:
    1) зачем это надо, когда есть нормальные IDE
    2) вы попробуйте emacs
    3) ваш гайд говно, а таких уже тысячи


    1. gonzazoid
      15.01.2024 14:14
      +1

      зачем это надо, когда есть нормальные IDE

      гетерогенная среда - когда пишешь не в одном стеке. с++/js/haskell, с++ и js зачастую под разными платформами - mac, nix-ы и даже винда иногда - это мой обычный вечер. С удовольствием посмотрю на вылизанную IDE под FreeBSD. Просто народ с обоих сторон баррикад не понимает простой вещи - надо или не надо - это кому то а не всем сразу. Поэтому оба мнения имеют право на жизнь, никому ничего навязывать не надо.


    1. IcyKit
      15.01.2024 14:14

      Ведь за это мы и любим коммьюнити Хабра?)


  1. AnimeSlave
    15.01.2024 14:14

    Отвечаю на заголовок: НИКАК!. Я, как пользователь NeoVim очень хорошо знаю, что такое его настройка, и что само понятие «удобства» индивидуальное. Самым удобным текстовым редактором NeoVim сделать невозможно, именно потому что сама его настройка это суть неудобства этого редактора. И не важно готовый конфиг используется, или с нуля его писать. В любом случает «удобства» в этом мало


  1. domix32
    15.01.2024 14:14

    sudo apt-get install neovim

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

    Создайте резервную копию текущего конфига

    В последних версиях neovim завезли возможность указывать профили конфигурации ($VIM и $VIMRUNTIME), чтобы не заниматься подобным.

    По итогу в статье примерно нифига не сказано, как же таки сделать его удобным IDE. Установка Astro и LSP точно не конец ибо все это ещё надо доконфигурировать и домапливать. Для совсем новичков предложил бы воспользоваться Kickstart Nvim и уже его распилить на собственную конфигурацию, идиоматично распилив на файлы.


  1. luboshenko
    15.01.2024 14:14

    Только меня раздражает слово "туториал" в названии? Почему нельзя использовать нормальное русское слово "руководство"?