Как стать автором
Обновить

NeoVim: настройка и использование

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.2K

Введение

Да, Вы правы — это ещё одна статья из множества, посвящённых текстовому редактору на основе Vim под названием NeoVim.

Вот несколько полезных ссылок:

Зачем я пишу эту статью?

  1. Зафиксировать для себя текущую конфигурацию моего любимого редактора.

  2. Поделиться с другими — возможно, это кому-то облегчит освоение NeoVim.

Установка

Я уверен, что вы сможете найти способ установки NeoVim для своей операционной системы и менеджера пакетов. Это самая простая часть настройки.

Пример установки для MacOS с помощью Homebrew:

brew install nvim

После установки проверяем версию:

nvim -v

Если увидите нечто подобное, можно переходить к настройке:

NVIM v0.10.4
Build type: Release
LuaJIT 2.1.1736781742
Run "nvim -V1 -v" for more info

Моя конфигурация плагинов

Структура конфигурации

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

├── init.lua
└── lua
    ├── core
    │   ├── colors.lua
    │   ├── configs.lua
    │   ├── mappings.lua
    │   └── plugins.lua
    └── plugins
        ├── autoclose.lua
        ├── barbar.lua
        ├── cmp.lua
        ├── colors
        │   ├── catppucchin-theme.lua
        │   ├── kanagawa-theme.lua
        │   └── onedark-theme.lua
        ├── debug_dapui.lua
        ├── lualine.lua
        ├── navigator.lua
        ├── neotree.lua
        ├── noice.lua
        ├── nvim-surround.lua
        ├── telescope.lua
        ├── treesitter.lua
        └── window.lua

За исключением navigator.lua ее можно назвать базированной

Файл init.lua загружает модули в определённом порядке:

require('core.mappings')
require('core.plugins')
require('core.colors')
require('core.configs')

Базовые настройки (core.configs.lua)

часть стандартных настроек

-- Поиск
vim.opt.ignorecase = true -- Игнорирует регистр при поиске
vim.opt.smartcase = true -- Если есть заглавные буквы, поиск становится чувствительным к регистру

-- Мышь
vim.opt.mouse = "a"
vim.opt.mousefocus = true

-- Нумерация строк
vim.opt.number = true
vim.opt.relativenumber = true

Кастомные сочетания клавиш (core.mappings.lua)

vim.keymap.set("i", "jk", "")

Это позволяет например выйти из режима вставки, набрав jk.

Темы (core.colors.lua)

тут думаю все понятно

function SetColor(color)
    color = color or "onedark"
    vim.cmd.colorscheme(color)
end

SetColor("kanagawa")

Менеджер плагинов (core.plugins.lua)

Используем современный менеджер плагинов - больше информации
https://www.barbarianmeetscoding.com/notes/neovim-lazyvim

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
    vim.fn.system({
        "git", "clone", "--filter=blob:none",
        "https://github.com/folke/lazy.nvim.git", "--branch=stable",
        lazypath
    })
end

vim.opt.rtp:prepend(lazypath)

require("lazy").setup({
    { import = "plugins" },
    { import = "plugins.colors" },
    checker = {
        enabled = false -- отключить автообновление плагинов
    }
})

введите команду

:Lazy

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

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

Примеры конфигурации плагинов

Автоматическое закрытие парных символов (plugins/autoclose.lua)

return {
    'm4xshen/autoclose.nvim',
    config = function()
        require("autoclose").setup({})
    end
}

Neo-tree — файловый менеджер (plugins/neotree.lua)

return {
    "nvim-neo-tree/neo-tree.nvim",
    branch = "v3.x",
    dependencies = {
        "nvim-lua/plenary.nvim",
        "nvim-tree/nvim-web-devicons",
        "MunifTanjim/nui.nvim",
    },
    config = function()
        local neotree = require("neo-tree")
        vim.keymap.set('n', 'e', ':Neotree left')
        vim.keymap.set('n', 'o', ':Neotree float git_status')
        neotree.setup({
            filesystem = {
                follow_current_file = {
                    enabled = true,
                    leave_dirs_open = false,
                },
                filtered_items = {
                    visible = true,
                    show_hidden_count = true,
                    hide_dotfiles = false,
                    hide_gitignored = false,
                }
            }
        })
    end
}

Telescope — поисковой менеджер (plugins/telescope.lua)

return {
    "nvim-telescope/telescope.nvim",
    dependencies = {
        "nvim-lua/plenary.nvim",
        {
            "nvim-telescope/telescope-fzf-native.nvim",
            build = "make",
            enabled = true
        }, {"nvim-telescope/telescope-file-browser.nvim", enabled = true}
    },
    branch = "0.1.x",
    config = function()
        local builtin = require('telescope.builtin')
        vim.keymap.set('n', '-', ":Telescope file_browser")
        vim.keymap.set('n', 'ff', builtin.find_files, {})
        vim.keymap.set('n', 'fw', builtin.live_grep, {})
        vim.keymap.set('n', 'fb', builtin.buffers, {})
        vim.keymap.set('n', 'fh', builtin.help_tags, {})
        vim.keymap.set('n', 'gb', builtin.git_branches, {})
        vim.keymap.set('n', 'gc', builtin.git_commits, {})
        vim.keymap.set('n', 'gs', builtin.git_status, {})
        vim.keymap.set('n', 'ls', builtin.lsp_document_symbols, {})
        vim.keymap.set('n', 'fx', builtin.treesitter, {})
        vim.keymap.set('n', 'fs', builtin.spell_suggest, {})
        vim.keymap.set('n', 'gd', builtin.lsp_definitions,
                    {noremap = true, silent = true})
    end
}

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

Траблшутинг

1. Фиксация версий плагинов

Чтобы избежать проблем с обновлениями, фиксируйте версии плагинов в файле:

~/.config/nvim/lazy-lock.json

Если что-то сломалось, можно удалить и перекачать плагины:

rm -rf ~/.local/share/nvim/lazy/<plagin_name>

2. Просмотр логов

При возникновении ошибок первым делом смотрите логи:

~/.local/state/nvim/log/<plagin_name>

3. Проверка привязок клавиш

Если комбинации клавиш не работают, можно посмотреть их привязки:

:nmap  # Normal mode
:vmap  # Visual mode
:imap  # Insert mode

или можете использовать

:Telescope keymaps

4. Ошибки при запуске NeoVim

Если NeoVim не запускается или работает некорректно, попробуйте запуск без пользовательской конфигурации:

nvim --clean  

5. Совет от себя - vimtutor

Открой терминал и запусти команду:

vimtutor

Это встроенный обучающий курс, который пошагого знакомит с основами Vim. В этот совет наверно также добавлю развитие скилла "слепая печать" иначе толку от всего выше описанного мало. Отлично помогает https://monkeytype.com/.

Заключение

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

Мою актуальную конфигурацию смотри здесь -> https://github.com/alpo-tech/nvim
Не переставайте познавать окружающий вас мир

Теги:
Хабы:
Всего голосов 6: ↑5 и ↓1+4
Комментарии16

Публикации

Ближайшие события