Меня зовут Никита Ефимов, я – программист в компании 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" (латинской) и пишем следующий код:
|
включает взаимодействие мышью |
|
включает нумерацию строк |
|
включает относительную нумерацию строк. Нумерация идет относительно той строки, на которой сейчас находится курсор |
|
умные проставления табов |
|
определяет, каким количеством пробелов будет равен 1 таб |
|
количество пробелов, используемых для отступов при выполнении операции сдвига влево или вправо |
|
то же самое что и tabstop, но в режиме вставки |
|
для автоматического отступа |
Сохраним изменения и выйдем из 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)
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 использую, но это уже дело многолетней привычки, так-то я понимаю, что особых преимуществ нет.
ParaMara
15.01.2024 14:14+3Статью можно ужать до одной фразы - установи VimPlug и AstroNvim. На что немедленно следует классическое
Если хочешь узнать куда тебе идти, скажи что мне делать.
Выше реакция на подобную писанину. Не про номерочки строчечек нужно копипастить, а про то а) зачем Neovim здесь и сейчас и б) как сделать IDE, что в точности и всего лишь означает включить TreeSitter и клиент LSP. Всё остальное - мусор, заставляющий меня очень сомневаться что автор вообще с чем-то, особенно Neovim, реально работал.
Менеджер плагинов в Neovim необязателен - значит никакого менеджера пакетов. Если уж Neovim - значит никаких конфигов на скриптах, только Lua. И никаких готовых конфигов, статья начального уровня должна объяснять что куда положить и всё. Ещё раз для бестолковых - И ВСЁ. Чтобы потом заинтересовавшийся легче мог понять что вся это дрянь, менеджеры и конфиги, творит и значит.
И обязательный финал - на примере любого языка показать, что должно происходить когда и TreeSitter и LSP работают.
Для оценки этой статьи у меня нет слов способных пройти модерацию. Helix forever.
Monnoroch
15.01.2024 14:14+1Helix и правда forever. Модель verb-subject больше десятилетия вызывала у меня скрип мозга и сильно замедляла работу в vim. Helix с его subject-verb идеально ложится на мой рабочий мыслительный процесс. Жаль только сам инструмент достаточно сырой. Хотел бы я neovim использовать с моделью helix.
zabanen2
15.01.2024 14:14+1не читая статью, проматываю до комментариев:
1) зачем это надо, когда есть нормальные IDE
2) вы попробуйте emacs
3) ваш гайд говно, а таких уже тысячиgonzazoid
15.01.2024 14:14+1зачем это надо, когда есть нормальные IDE
гетерогенная среда - когда пишешь не в одном стеке. с++/js/haskell, с++ и js зачастую под разными платформами - mac, nix-ы и даже винда иногда - это мой обычный вечер. С удовольствием посмотрю на вылизанную IDE под FreeBSD. Просто народ с обоих сторон баррикад не понимает простой вещи - надо или не надо - это кому то а не всем сразу. Поэтому оба мнения имеют право на жизнь, никому ничего навязывать не надо.
AnimeSlave
15.01.2024 14:14Отвечаю на заголовок: НИКАК!. Я, как пользователь NeoVim очень хорошо знаю, что такое его настройка, и что само понятие «удобства» индивидуальное. Самым удобным текстовым редактором NeoVim сделать невозможно, именно потому что сама его настройка это суть неудобства этого редактора. И не важно готовый конфиг используется, или с нуля его писать. В любом случает «удобства» в этом мало
domix32
15.01.2024 14:14sudo apt-get install neovim
там стоит допотопная 0.5.х версия, которую практически все забили поддержива. Многие плагины просят не меньше 0.7.х
Создайте резервную копию текущего конфига
В последних версиях neovim завезли возможность указывать профили конфигурации ($VIM и $VIMRUNTIME), чтобы не заниматься подобным.
По итогу в статье примерно нифига не сказано, как же таки сделать его удобным IDE. Установка Astro и LSP точно не конец ибо все это ещё надо доконфигурировать и домапливать. Для совсем новичков предложил бы воспользоваться Kickstart Nvim и уже его распилить на собственную конфигурацию, идиоматично распилив на файлы.
luboshenko
15.01.2024 14:14Только меня раздражает слово "туториал" в названии? Почему нельзя использовать нормальное русское слово "руководство"?
Pitcentr0
Все описанные преимущества есть в любой IDE и редакторе от JetBrains до VScode, сколько статей не читал про neovim всегда выглядит как извращение, извините, так дойдем до DOS оболочки т.к она быстрее оказывается.
ilnuribat
Я сначала перешёл с vscode на вим просто чтобы изучить что это такое и почему о нем так много шума
Через 6 месяцев решил попробовать вернуться обратно в vscode и чуть не вырвало в прямом смысле: мне приходилось перемещать фокус взгляда между 1) монитором, 2) клавой, и 3) мышкой. При этом когда брал мышку не всегда сразу находил где именно находится курсор. Через 15 минут такого извращения понял что хочу просто положить руки на клаву и не отрывать взгляд от монитора. Это был чистый кайф