UNIXAWESOME

Еще одно руководство по настройке Neovim - 2026

#neovim
Table of contents

Я начал использовать Vim в начале своего пути DevOps инженера, и он уже длительное время помогает мне редактировать конфиги, писать скрипты и прочий код, как локально, так и на серверах. Со временем попробовав Neovim переехал на него. Больше современных фич и активнее разработка.

Паралельно освоив метод “Слепой печати на клавиатуре” осознаешь что вместе с неовимом получается очень крутое комбо 😎

Периодически оптимизирую систему на своем ноутбуке и заодно переписываю свой конфиг неовима с нуля. Делая его более чистым и понятным. Заодно очищая от старых ненужных плагинов и строк в конфигурационных файлах.

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

По поводу готовых сборок по типу LunarVim, LazyVim, AstroNvim, NvChad, то как то не очень мне пришлись они по вкусу. Мне больше нравится подход когда берешь что то минимальное и при необходимости доставляешь, допиливаешь только то, что действительно нужно в текущий момент. Это позволяет лучше разобраться в инструменте и сделать его более быстрым и заточенным. Возможно из-за этого я и пользуюсь дистрибутивом Archlinux больше 12 лет. Хотя если глянуть с другой стороны, то это быстрый способ опробовать весь крутой функционал без необходимости долго разбираться с настройкой редактора.


На момент написания последняя версия Neovim 0.11.5

Настраивать буду на своем ноутбуке с системой Archlinux. Для дистрибутивов Debian based и прочих, будет отличатся только первоначальная установка Neovim через пакетный менеджер. Для желающих получить самую свежайшую версию, можно и скомпилить.
Все остальные конфигурации находяться по одинаковых путях в домашней директории пользователя ~/.config/nvim.


Так же нужен будет ripgrep, который необходим для ускорения поиска файлов.

yay -S neovim ripgrep

Структура

Вот такая структура каталогов моих конфигурационных файлов для Neovim на текущий момент.

.config/nvim
├── init.lua
└── lua
    ├── configs
    │   ├── init.lua
    │   ├── keymaps.lua
    │   └── options.lua
    └── plugins
        ├── colorscheme.lua
        ├── gitsigns.lua
        ├── indent-blankline.lua
        ├── neo-tree.lua
        ├── tabline.lua
        ├── telescope.lua
        └── treesitter.lua

Все начинается с файла init.lua в директории .config/nvim. Это точка входа в конфигурацию.
В некоторых старых руководствах по настройке встречается использование init.vim, но єто уже устаревший способ настройки. Ну и преимуществ у init.lua больше:

Затем есть директория lua/ в которой хранятся все остальные конфигурации. В файле init.lua у меня указано подключение директории configs/, автоматическая установка менеджера плагинов Lazy при запуске.


Настройка параметров

init.lua

require('configs')

-- Automatically install lazy.nvim
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", -- latest stable release
    lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)


-- Install your plugins here
require('lazy').setup('plugins', {
    install = {
                missing = true,
        },
        checker = {
                enabled = false,
                notify = false,
        },
        change_detection = {
                enabled = true,
                notify = false,
        },
    performance = {
        rtp = {
            -- disable some rtp plugins
            disabled_plugins = {
                "gzip",
                "tarPlugin",
                "tohtml",
                "tutor",
                "zipPlugin",
            },
        },
    },
})

require("neo-tree")

Далее создаем необходимые нам директории.

mkdir -p ~/.config/nvim/lua/{plugins,configs}

В директории configs делаем еще один файл init.lua в котором подключаются другие файлы с настройками.

init.lua

ConfigMode = "rich" -- changes the config to suit either a full nerdfont/truecolor setup, or a simple 8 color tty ('rich' or 'simple')
-- disable netrw at the very start of your init.lua (strongly advised)
vim.g.loaded = 1
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1

require('configs.options')
require('configs.keymaps')

options.lua - основной файл с параметрами Neovim

options.lua
local options = {
    backup = false,                    -- creates a backup file
    hidden = true,                     -- enable modified buffers in background
    --undofile = true,                 -- enable persistent undo
    clipboard = "unnamedplus",         -- access the system clipboard
    cmdheight = 0,                     -- more space in the command line
    completeopt = { "menuone", "noselect" }, -- mostly just for cmp
    conceallevel = 0,                 -- so that `` is visible in markdown files
    fileencoding = "utf-8",            -- the encoding written to a file
    hlsearch = true,                   -- highlight all on search pattern
    incsearch = true,                  -- show search matches incrementally
    ignorecase = true,                 -- ignore case in search patterns
    mouse = "a",                       -- allow the mouse to be used in neovim
    pumheight = 10,                    -- pop up menu height
    showmode = true,   -- we don't need to see things like -- INSERT -- anymore
    showtabline = 1,                   -- never show tabs
    smartcase = true,                  -- smart case
    smartindent = true,                -- make indenting smarter again
    splitbelow = true,                 -- force all horizontal splits
    splitright = true,                 -- force all vertical splits
    swapfile = false,                  -- creates a swapfile
    scrolloff = 10,                    -- is one of my fav                      
    --colorcolumn = "90",              -- limit line length                     
    timeoutlen = 500,                  -- time to wait for a mapped sequence
    updatetime = 25,                   -- faster completion (4000ms default)        writebackup = false,               
    expandtab = true,                  -- convert tabs to spaces          
    shiftwidth = 2,                    -- the number of spaces
    tabstop = 2,                       -- insert 2 spaces for a tab             
    cursorline = true,                 -- highlight the current line            
    number = false,                    -- set numbered lines                    
    relativenumber = false,            -- set relative numbered lines           
    signcolumn = "yes",                -- always show the sign column
    sidescrolloff = 8,			       -- number of symbols
    foldmethod = "indent",             -- folds for code blocks
    foldlevel = 99,                    -- show all text unwrapped
    errorbells = false,  		       -- no error bells
    wrap = false,
} 

-- Enable options
for key, value in pairs(options) do
    vim.opt[key] = value
end


-- Global options
vim.g.mapleader = " "
vim.g.maplocalleader = " "

keymaps.lua - файл где прописываем все сочетания клавиш для управления редактором.

keymaps.lua
local insert_mode = "i"
local normal_mode = "n"
local term_mode = "t"
local visual_mode = "v"
local visual_block_mode = "x"
local command_mode = "c"

local opts = { noremap = true, silent = true }
local term_opts = { silent = true }

local keymap = vim.api.nvim_set_keymap

keymap("", "<Space>", "<Nop>", opts)

-- Normal --
-- Better window navigation
keymap(normal_mode, "<C-h>", "<C-w>h", opts)
keymap(normal_mode, "<C-j>", "<C-w>j", opts)
keymap(normal_mode, "<C-k>", "<C-w>k", opts)
keymap(normal_mode, "<C-l>", "<C-w>l", opts)

keymap(normal_mode, ";", ":", opts)

keymap(normal_mode, "<leader>b", ":Telescope buffers<cr>", opts)
-- Unhilight search --
-- keymap(normal_mode, "<leader>chl", ":nohl<cr>", opts)

-- Insert blank line above and below current line
keymap(normal_mode, "<leader>o", "m`o<Esc>``", opts)
keymap(normal_mode, "<leader>O", "m`O<Esc>``", opts)

-- Resize with arrows
keymap(normal_mode, "<C-Up>", ":resize -2<CR>", opts)
keymap(normal_mode, "<C-Down>", ":resize +2<CR>", opts)
keymap(normal_mode, "<C-Left>", ":vertical resize -2<CR>", opts)
keymap(normal_mode, "<C-Right>", ":vertical resize +2<CR>", opts)

-- Navigate buffers
keymap(normal_mode, "<S-l>", ":bnext<CR>", opts)
keymap(normal_mode, "<S-h>", ":bprevious<CR>", opts)

-- Toggle Word Wrap --
keymap(normal_mode, "<leader>tw", ":set wrap!<CR>", opts)

-- Visual --
-- Stay in indent mode
keymap(visual_mode, "<", "<gv", opts)
keymap(visual_mode, ">", ">gv", opts)

-- Visual search --
keymap(visual_mode, "//", 'y/<C-R>"<CR>', opts)

-- Move text up and down
keymap(visual_mode, "J", ":m '>+1<CR>gv=gv", opts)
keymap(visual_mode, "V", ":m '>-2<CR>gv=gv", opts)
-- keymap(visual_mode, "<A-j>", ":m .+1<CR>==", opts)
-- keymap(visual_mode, "<A-k>", ":m .-2<CR>==", opts)
keymap(visual_mode, "p", '"_dP', opts)

-- keep cursor in place when appending below line to current line
keymap(normal_mode, "J", "mzJ`z", opts)

-- Keep search term in the middle
keymap(normal_mode, "n", "nzzzv", opts)
keymap(normal_mode, "N", "Nzzzv", opts)

-- Keep current buffer when pasting over text
keymap(normal_mode, "<leader>p", '"_dP', opts)

-- Worst place in the universe
keymap(normal_mode, "Q", "<nop>", opts)

-- Make current file executable
keymap(normal_mode, "<leader>x", ":w !chmod +x %<CR>", opts)

-- Find / Replace Current Word
keymap(normal_mode, "<leader>fr", ":%s/\\<<C-r><C-w>\\>/<C-r><C-w>/gI<left><left><left>", opts)

-- Move line up/down
keymap(normal_mode, "<leader>j", "ddp", opts)
keymap(normal_mode, "<leader>k", "ddkP", opts)

-- Better Ctrl u | d
keymap(normal_mode, "<C-u>", "<C-u>zz", opts)
keymap(normal_mode, "<C-d>", "<C-d>zz", opts)

-- MACROS
keymap(normal_mode, "Q", "@qj", opts)
keymap(visual_block_mode, "Q", ":norm @q<CR>gv", opts)


-- Visual Block --
-- Move text up and down
keymap(visual_block_mode, "J", ":move '>+1<CR>gv-gv", opts)
keymap(visual_block_mode, "K", ":move '<-2<CR>gv-gv", opts)
keymap(visual_block_mode, "<A-j>", ":move '>+1<CR>gv-gv", opts)
keymap(visual_block_mode, "<A-k>", ":move '<-2<CR>gv-gv", opts)

-- Terminal --
-- Better terminal navigation
keymap(term_mode, "<C-h>", "<C-\\><C-N><C-w>h", term_opts)
keymap(term_mode, "<C-j>", "<C-\\><C-N><C-w>j", term_opts)
keymap(term_mode, "<C-k>", "<C-\\><C-N><C-w>k", term_opts)
keymap(term_mode, "<C-l>", "<C-\\><C-N><C-w>l", term_opts)

-- Telescope --
keymap(normal_mode, "<leader>pf", "<cmd>:Neotree close<cr><cmd>lua require'telescope.builtin'.find_files({find_command = {'rg', '--files', '--hidden', '-g', '!.git' }})<cr>", opts)
keymap(normal_mode, "<leader>ps", "<cmd>lua require('telescope.builtin').live_grep({ hidden = true })<cr>", opts)

-- Telescope find files in nvim config directory
keymap(normal_mode, "<leader>rc",
    "<cmd>lua require'telescope.builtin'.find_files({cwd = '~/', find_command = {'rg', '--files', '--hidden', '-g', '!.git' }})<cr>"
    , opts)
keymap(normal_mode, "<leader>1", "<cmd>lua require'telescope.builtin'.buffers()<cr>", opts)
keymap(normal_mode, "<Leader>pg", "<CMD>lua require'telescope.builtin'.git_files()<CR>",
    { noremap = true, silent = true })


-- My keymaps
keymap(normal_mode, "<leader>,", ":nohlsearch<CR>", opts)


-- reload current file --
keymap(normal_mode, "<leader>r", "<cmd>e!<CR>", opts)

Добавление плагинов

На данный момент использую такой список плагинов:

  1. colorscheme.lua - цветовая схема
  2. gitsigns.lua - интеграция гита
  3. indent-blankline.lua - добавление линий отступов
  4. neo-tree.lua - для управления файловой системой
  5. tabline.lua - добавление табов
  6. telescope.lua - поиск, фильтрация, предварительный просмотр
  7. treesitter.lua - синтаксический анализ кода

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


colorscheme.lua
return {                                                                        
  {                                                                             
    "Mofiqul/dracula.nvim",                                                     
    lazy = false,                                                               
    priority = 1000,                                                            
    config = function()                                                         
      require("dracula").setup({                                                
        transparent_bg = true,                                                  
        show_end_of_buffer = true,                                              
        italic_comment = true,                                                  
      })                                                                        
      vim.cmd.colorscheme("dracula")                                            
    end,                                                                        
  },                                                                            
}

gitsigns.lua
return {
    'lewis6991/gitsigns.nvim',
    config = function()
        require('gitsigns').setup {
            current_line_blame = true,
        }
    end
}

indent-blankline.lua
return {
  {
    "lukas-reineke/indent-blankline.nvim",
    main = "ibl",
    opts = {
      -- scope = {
      --   enabled = false,  
      --   show_start = true,
      --   show_end = true,  
      -- },
      indent = {
        char = "▏",
      },
    },
  }
}

neo-tree.lua
return {
    "nvim-neo-tree/neo-tree.nvim",
    dependencies = {
        "nvim-lua/plenary.nvim",
        "nvim-tree/nvim-web-devicons",
        "MunifTanjim/nui.nvim",
    },
    event = "VeryLazy",
    keys = {
        { "<leader>w", ":Neotree focus<CR>", silent = true, desc = "File Explorer" },
    },
    config = function()
        require("neo-tree").setup({
            close_if_last_window = false,
            popup_border_style = "rounded",
            enable_git_status = true,
            enable_modified_markers = true,
            update_cwd = true,
            enable_diagnostics = true,
            sort_case_insensitive = true,
            default_component_configs = {
                container = {
                    enable_character_fade = true,
                },
                indent = {
                    with_markers = true,
                    with_expanders = true,
                --    indent_size = 2,
                },
                file_size = {
                    enabled = true,
                    required_width = 64,
                },
            },
            window = {
                position = "float",
                width = 135,
            },
            filesystem = {
                use_libuv_file_watcher = true,
                filtered_items = {
                    visable = true,
                    hide_dotfiles = false,
                    hide_gitignored = false,
                    hide_by_name = {
                        "node_modules",
                    },
                    never_show = {
                        ".DS_Store",
                        "thumbs.db",
                    },
                },
				renderers = {
				  root = {
					{"indent"},
					{"icon", default="C" },
					{"name", zindex = 10},
				  },
				  symbol = {
					{"indent", with_expanders = true},
					{"kind_icon", default="?" },
					{"container",
					content = {
					  {"name", zindex = 10},
					  {"kind_name", zindex = 20, align = "right"},
					  }
					}
				  },
				},
            },
            buffers = {
                follow_current_file = {
                    enabled = true
                },
            },
            event_handlers = {},
        })
    end,
}

tabline.lua
return {
    "crispgm/nvim-tabline",
    dependencies = { 'nvim-tree/nvim-web-devicons' }, -- optional
    config = true,
    config = function()
        require('tabline').setup({
        show_index = true,           -- show tab index
        show_modify = true,          -- show buffer modification indicator
        show_icon = true,           -- show file extension icon
        fnamemodify = ':t',          -- file name modifier
        modify_indicator = '[+]',    -- modify indicator
        no_name = 'No name',         -- no name buffer name
        brackets = { '[', ']' },     -- file name brackets surrounding
        inactive_tab_max_length = 0  -- max length of inactive tab titles, 0 to ignore
    })
    end
}

telescope.lua
return {
    {
        "nvim-telescope/telescope.nvim",
        cmd = 'Telescope',
        version = false,
        lazy = true,
        dependencies = {
            "nvim-lua/plenary.nvim",
            "jvgrootveld/telescope-zoxide",
            "nvim-tree/nvim-web-devicons",
            { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make' },
            'nvim-telescope/telescope-ui-select.nvim',
        },
        config = function()
            local telescope = require("telescope")
            local actions = require("telescope.actions")

            telescope.setup {
                defaults = {
                    theme = 'dropdown',
                    previewer = true,
                    path_display = { "smart" },
                    entry_prefix = "  ",
                    initial_mode = "insert",
                    selection_strategy = "reset",
                    sorting_strategy = "ascending",
                    layout_strategy = "horizontal",
                    border = {},
                    borderchars = nil,
                    layout_config = {
                        width = 0.95,
                        preview_cutoff = 120,
                        prompt_position = "top",
                        horizontal = { mirror = false },
                        vertical = { mirror = false },
                    },
                    vimgrep_arguments = {
                        "rg",
                        "--color=never",
                        "--no-heading",
                        "--with-filename",
                        "--line-number",
                        "--column",
                        "--smart-case",
                        "--hidden",
                        "--glob=!.git/",
                    },
                    mappings = {
                        i = {
                            ["<C-n>"] = actions.cycle_history_next,
                            ["<C-p>"] = actions.cycle_history_prev,
                            ["<C-j>"] = actions.move_selection_next,
                            ["<C-k>"] = actions.move_selection_previous,
                            ["<C-c>"] = actions.close,
                            ["<Down>"] = actions.move_selection_next,
                            ["<Up>"] = actions.move_selection_previous,
                            ["<CR>"] = actions.select_default,
                            ["<C-x>"] = actions.select_horizontal,
                            ["<C-v>"] = actions.select_vertical,
                            -- ["<C-t>"] = actions.select_tab,
                            ["<C-u>"] = actions.preview_scrolling_up,
                            ["<C-d>"] = actions.preview_scrolling_down,
                            ["<PageUp>"] = actions.results_scrolling_up,
                            ["<PageDown>"] = actions.results_scrolling_down,
                            ["<Tab>"] = actions.toggle_selection + actions.move_selection_worse,
                            ["<S-Tab>"] = actions.toggle_selection + actions.move_selection_better,
                            ["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
                            ["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
                            ["<C-l>"] = actions.complete_tag,
                            ["<C-_>"] = actions.which_key, -- keys from pressing <C-/>
                        },
                        n = {
                            ["<esc>"] = actions.close,
                            ["<CR>"] = actions.select_default,
                            ["<C-x>"] = actions.select_horizontal,
                            ["<C-v>"] = actions.select_vertical,
                            ["<C-t>"] = actions.select_tab,
                            ["<Tab>"] = actions.toggle_selection + actions.move_selection_worse,
                            ["<S-Tab>"] = actions.toggle_selection + actions.move_selection_better,
                            ["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
                            ["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
                            ["j"] = actions.move_selection_next,
                            ["k"] = actions.move_selection_previous,
                            ["H"] = actions.move_to_top,
                            ["M"] = actions.move_to_middle,
                            ["L"] = actions.move_to_bottom,
                            ["<Down>"] = actions.move_selection_next,
                            ["<Up>"] = actions.move_selection_previous,
                            ["gg"] = actions.move_to_top,
                            ["G"] = actions.move_to_bottom,
                            ["<C-u>"] = actions.preview_scrolling_up,
                            ["<C-d>"] = actions.preview_scrolling_down,
                            ["<PageUp>"] = actions.results_scrolling_up,
                            ["<PageDown>"] = actions.results_scrolling_down,
                            ["?"] = actions.which_key,
                        },
                    },
                },
                file_ignore_patterns = {},
                path_display = { shorten = 5 },
                winblend = 0,
                set_env = { ["COLORTERM"] = "truecolor" }, -- default = nil,
                pickers = {
                    find_files = {
                        hidden = true,
                        previewer = true,
                        layout_config = {
                            vertical = {
                                width = 0.5,
                                height = 0.4,
                                preview_height = 0.5,
                            },
                        },
                    },
                    git_files = {
                        hidden = true,
                        previewer = false,
                        layout_config = {
                            horizontal = {
                                width = 0.5,
                                height = 0.4,
                                preview_width = 0.6,
                            },
                        },
                    },
                    live_grep = {
                        --@usage don't include the filename in the search results
                        only_sort_text = true,
                        previewer = true,
                        layout_config = {
                            horizontal = {
                                width = 0.9,
                                height = 0.75,
                                preview_width = 0.6,
                            },
                        },
                    },
                    grep_string = {
                        --@usage don't include the filename in the search results
                        only_sort_text = true,
                        previewer = true,
                        layout_config = {
                            horizontal = {
                                width = 0.9,
                                height = 0.75,
                                preview_width = 0.6,
                            },
                        },
                    },
                    buffers = {
                        -- initial_mode = "normal",
                        previewer = false,
                        layout_config = {
                            horizontal = {
                                width = 0.5,
                                height = 0.4,
                                preview_width = 0.6,
                            },
                        },
                    },
                    lsp_reference = {
                        show_line = true,
                        layout_config = {
                            horizontal = {
                                width = 0.9,
                                height = 0.75,
                                preview_width = 0.6,
                            },
                        },
                    },
                    treesitter = {
                        show_line = true,
                        sorting_strategy = nil,
                        layout_config = {
                            horizontal = {
                                width = 0.9,
                                height = 0.75,
                                preview_width = 0.6,
                            },
                        },
                        symbols = {
                            "class", "function", "method", "type", "conts",
                            "property", "struct", "field", "constructor",
                            "variable", "interface", "module"
                        }
                    },
                },
                extensions = {
                    fzf = {
                        fuzzy = true,               -- false will only do exact matching
                        override_generic_sorter = true, -- override the generic sorter
                        override_file_sorter = true, -- override the file sorter
                        case_mode = "smart_case",   -- or "ignore_case" or "respect_case"
                    },
                    ["ui-select"] = {
                        require("telescope.themes").get_dropdown({
                            previewer = false,
                            initial_mode = "normal",
                            sorting_strategy = "ascending",
                            layout_strategy = "horizontal",
                            layout_config = {
                                horizontal = {
                                    width = 0.5,
                                    height = 0.4,
                                    preview_width = 0.6,
                                },
                            },
                        })
                    },
                },
            }
            local M = {}

            M.project_files = function()
                local opts = {}
                local ok = pcall(require "telescope.builtin".git_files, opts)
                if not ok then require "telescope.builtin".find_files(opts) end
            end

            return M
        end
    }
}

treesitter.lua
return {
  'nvim-treesitter/nvim-treesitter',
  dependencies = {
    'nvim-treesitter/nvim-treesitter-context',
  },
  lazy = false,
  branch = 'main',
  build = ':TSUpdate',
  config = function()
    local ts = require('nvim-treesitter')

    -- Install core parsers at startup
    ts.install({
      "c",
      "lua",
      "vim",
      "vimdoc",
      "query",
      "markdown",
      "markdown_inline",
      "bash",
      "cmake",
      "comment",
      "cpp",
      "css",
      "csv",
      "diff",
      "go",
      "groovy",
      "helm",
      "html",
      "http",
      "ini",
      "javascript",
      "json",
      "php",
      "python",
      "rst",
      "ruby",
      "rust",
      "sway",
      "xml",
      "qmljs",
    }, {
      max_jobs = 8,
    })

    local group = vim.api.nvim_create_augroup('TreesitterSetup', { clear = true })

    local ignore_filetypes = {
      'checkhealth',
      'lazy',
      'mason',
      'snacks_dashboard',
      'snacks_notif',
      'snacks_win',
    }

    -- Auto-install parsers and enable highlighting on FileType
    vim.api.nvim_create_autocmd('FileType', {
      group = group,
      desc = 'Enable treesitter highlighting and indentation',
      callback = function(event)
        if vim.tbl_contains(ignore_filetypes, event.match) then
          return
        end

        local lang = vim.treesitter.language.get_lang(event.match) or event.match
        local buf = event.buf

        -- Start highlighting immediately (works if parser exists)
        pcall(vim.treesitter.start, buf, lang)

        -- Enable treesitter indentation
        vim.bo[buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"

        -- Install missing parsers (async, no-op if already installed)
        ts.install({ lang })
      end,
    })
  end,
}

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







Все настраивается с помощью lua без использования VimScript.
Neovim — это постоянно развивающийся редактор, плагины, которые были актуальны вчера, могут оказаться устаревшими сегодня, поэтому неизбежно будут некоторые изменения, и это руководство со временем устареет.


Reply to this post by email ↪

Or share: