Меня зовут Никита Ефимов, я – программист в компании 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 имеет глубокую и сложную систему настроек и функций, которые заслуживают отдельных статей для детального изучения.