
Но моя настоящая любовь — Neovim. Это мой основной редактор кода. Со временем он стал ощущаться продолжением меня: движения, команды и сочетания клавиш настолько привычны, что после него работать в графических редакторах бывает сложно. Просто не хочется отказываться от этой скорости и свободы действий.
Чужие сборки Neovim я воспринимаю примерно так же, как чужое рабочее место. Всё вроде есть, но расположено не так, как удобно мне. Часто они пытаются быть универсальными, обрастают возможностями, которыми я не пользуюсь, и предлагают своё управление. А у меня на всё своё мнение: какие инструменты нужны, какие клавиши должны за них отвечать и как вообще должна строиться работа.
Поэтому собственный конфиг для меня — само собой разумеющееся. Недавно я начал пересобирать его с нуля. Ещё не всё реализовано, но основой уже можно пользоваться. Хочу показать, что в нём сейчас есть и как попробовать его у себя.
Что уже умеет конфиг
Поиск без перебора каталогов
Одна из основных возможностей — поиск через Telescope. Нажимаешь несколько клавиш, начинаешь вводить имя файла и сразу видишь подходящие варианты с предварительным просмотром. Так же можно искать текст по проекту или переключаться между открытыми файлами.
При этом обычный просмотр папок тоже есть. Если удобнее пройти по дереву каталогов, можно открыть встроенный файловый браузер.
Работа с кодом и разметкой
В конфиге настроены подсветка синтаксиса, автоматическое дополнение скобок и кавычек, отступы для разных языков. Тонкие вертикальные линии помогают видеть вложенность. Если у проекта есть свои правила отступов в .editorconfig, редактор следует им.
Для веб-разработки уже подключены подсказки и сообщения об ошибках: HTML, шаблоны Django, JavaScript, TypeScript, React и Vue. Можно перейти к определению, посмотреть справку или сообщение об ошибке прямо в редакторе. Конкретные возможности зависят от языка и настроек проекта. Автоматическое форматирование при сохранении пока не включено; отдельный языковой сервер для Python тоже ещё не настроен.
Есть комментирование строк и выделенных фрагментов, а пометки TODO: и FIXME: выделяются цветом. Их можно найти сразу по всему проекту и перейти к нужному месту.
Emmet
Для разметки и стилей подключён Emmet. Например, вместо ручного создания списка можно набрать ul>li.item$*3 и нажать Tab. Получится:
<ul>
<li class="item1"></li>
<li class="item2"></li>
<li class="item3"></li>
</ul>В CSS сокращение m10 превращается в margin: 10px;. Это работает и в шаблонах Django, JSX/TSX и Vue. По полям развёрнутого шаблона можно перемещаться через Tab и Shift+Tab.
Мой плагин paired-tags.nvim
Специально для этой конфигурации я разработал paired-tags.nvim. Он уже входит в сборку и берёт на себя работу с парными тегами.
Набираете <section> — появляется закрывающий </section>. Меняете имя одного тега — меняется и второй. Ставите курсор на тег — подсвечивается его пара. А Enter между соседними HTML-тегами переносит содержимое на отдельную строку с отступом.
Плагин работает и с компонентами JSX/TSX, Vue и Svelte, а в шаблонах Django и Jinja помогает с парными блоками и разделителями. Если пару нельзя определить однозначно, автоматическое изменение пропускается.
Подробнее о плагине — на странице проекта, а его исходники доступны на GitHub.
Оформление
Для оформления я выбрал Catppuccin со светлой и тёмной темами. На macOS редактор следует за системным оформлением: переключили тему в системе — она поменялась и в Neovim.
Внизу находится строка состояния с именем файла, режимом редактора, веткой Git и сообщениями об ошибках. В узком окне часть информации скрывается, освобождая место для самого нужного.
Как попробовать
Исходники лежат в репозитории hardcodd/nvim. Конфигурация проверялась на macOS с Neovim 0.12.5; другие системы пока не проверены. Команды ниже — для Unix-оболочки.
На macOS с установленным Homebrew основные зависимости можно поставить одной командой:
brew install neovim tree-sitter-cli ripgrep node pythonТакже нужны Git и инструменты разработчика Apple с C-компилятором. Если последние ещё не установлены, запустите xcode-select --install. Подробные требования есть в README.
Для первого знакомства предлагаю поставить конфиг отдельно от ваших обычных настроек Neovim:
nvim_config_root="${XDG_CONFIG_HOME:-$HOME/.config}"
mkdir -p "$nvim_config_root"
git clone https://github.com/hardcodd/nvim.git "$nvim_config_root/nvim-hardcodd"
NVIM_APPNAME=nvim-hardcodd nvimИмя nvim-hardcodd позволяет использовать отдельные каталоги настроек и плагинов. Если такой каталог у вас уже есть, выберите другое свободное имя и замените его в двух последних строках.
При первом запуске дождитесь загрузки плагинов и языковых инструментов. Ход установки можно посмотреть через :Lazy и :Mason. После её завершения перезапустите редактор. Подсветка нового языка при первом открытии файла тоже может потребовать загрузки.
Для последующих запусков используйте ту же команду:
NVIM_APPNAME=nvim-hardcodd nvimС чего начать работу
Если Neovim для вас новый, самое важное — привыкнуть к режимам. Нажмите i, чтобы вводить текст, и Esc, чтобы вернуться к командам. В моём конфиге быстро набранное jk тоже выходит из режима вставки.
Откройте редактор из каталога своего проекта. Для начала хватит нескольких сочетаний. Здесь Space — пробел, а клавиши нажимаются последовательно в обычном режиме.
| Клавиши | Действие |
|---|---|
| Space f f | Найти файл. |
| Space f g | Найти текст в проекте. |
| Space f b | Переключиться между открытыми файлами. |
| Space e | Открыть файловый браузер. |
| Space w | Сохранить файл. |
| Space x | Закрыть текущий файл. |
| Space q | Выйти из Neovim. |
Попробуйте найти файл, изменить несколько строк и сохранить результат. Затем можно проверить Emmet, поработать с тегами и освоить поиск по проекту. Для знакомства с базовыми командами самого Neovim есть встроенный урок :Tutor.
Можно взять за основу
Мне нравится, что в Neovim можно постепенно собрать именно своё рабочее место. Необязательно принимать чужой конфиг целиком: можно забрать удобные идеи, поменять управление, убрать лишнее и добавить то, чего не хватает.
Моя конфигурация написана на Lua, а настройки разделены по назначению. Сочетания клавиш собраны в lua/keymaps.lua — с них удобно начать, если хочется изменить управление. Остальное описано в документации репозитория.
Пересборка ещё продолжается, поэтому конфиг будет меняться. Но если вы давно хотели попробовать Neovim или ищете основу для собственного набора настроек — берите и пробуйте. Для меня возможность устроить редактор под себя и есть одна из главных причин возвращаться к нему каждый день.
Выберите способ входа или оставьте комментарий как гость ниже.