Версионирование

Основным преимуществом NeoVim является его простой перенос из одной среды в другую посредством клонирования конфига из удалённого репозитория в папку с конфигом

echo "# Кастомная конфигурация NeoVim" >> README.md
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin CCЫЛКА_НА_РЕПО
git push -u origin main

И далее на другой машине просто скопируем конфиг

git clone CCЫЛКА_НА_РЕПО ~/.config/nvim

Git плагины

Для работы с Git внутри Vim нам потребуется установить два плагина Fugitive и Flog

Параметр lazy в конфиге отвечает за загрузку вместе с neovim либо только при использовании плагина

lua / plugins / figutive.lua

return {
	{ "tpope/vim-fugitive" },
	{
		"rbong/vim-flog",
		lazy = true,
		cmd = { "Flog", "Flogsplit", "Floggit" },
		dependencies = {
			"tpope/vim-fugitive",
		},
	},
}

:G откроет меню с изменениями, которые мы сделали в проекте, где s застейджит изменения, u заанстейджит их, X сбросит текущие изменения

:Flog откроет окно с коммитами

:G push - запушить изменения :G pull - запулить изменения

LazyGit

Это плагин для отображения удобного интерфейса истории работы с гитом

Устанавливаем сначала саму утилиту:

brew install jesseduffield/lazygit/lazygit

Конфигурация lazygit:

.config / lazygit / config.yml

git:
  commit:
    signOff: true
quitOnTopLevelReturn: true

Далее устанавливаем плагин в neovim

lua / plugins / lazygit.lua

-- nvim v0.8.0
return {
  "kdheepak/lazygit.nvim",
  cmd = {
    "LazyGit",
    "LazyGitConfig",
    "LazyGitCurrentFile",
    "LazyGitFilter",
    "LazyGitFilterCurrentFile",
  },
  -- optional for floating window border decoration
  dependencies = {
    "nvim-lua/plenary.nvim",
  },
  -- setting the keybinding for LazyGit with 'keys' is recommended in
  -- order to load the plugin when the command is run for the first time
  keys = {
    { "<leader>lg", "<cmd>LazyGit<cr>", desc = "LazyGit" }
  }
}

И теперь на <leader>lg у нас открывается окошко с историей гита. Для перемещения по вкладкам, нужно использовать 1-4. Для перемещения между табами вкладок [/]. Чтобы скроллить правую панель, нужно будет использовать PgUp и PgDn

ctrl + ? - откроет меню с подсказками для определённого окна, в котором мы сейчас находимся. Шорткаты будут отличаться в зависимости от активного окна, в котором мы работаем

Через / можно запустить поиск по любому из окошек

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

Через a мы можем застейджить всё, а через c открыть поле для создания коммита, где через enter создадим новый коммит

P - отправить коммит на удалённую репу

Во вкладке с ветками мы можем создавать новые ветки через n и переключаться по ним через space

Так же через enter мы можем просмотреть все коммиты, которые были сделаны в этой ветке

А уже дальше в 4 или 3 вкладке мы можем через enter взглянуть на измения, которые были сделаны в этом коммите

Через M мы смёрджим ветку, на которой мы находимся с целевой

И если у нас есть конфликты, то утилита предложит их разрешить

Через space выбираем нужный вариант, через b можем принять все изменения

Leap

Плагин Leap позволяет нам быстро перемещаться горизонтально и вертикально к определённому слову

lua / plugins / leap.lua

return {
	"ggandor/leap.nvim",
	lazy = false,
	config = function()
		require("leap").add_default_mappings(true)
	end,
}

s + первые две буквы - будет искать слово ниже нашего курсора и при нахождении вхождений подсветит возможные варианты, по которым мы сможем перейти после нажатия выделенной буквы

То же самое, но до курсора будет работать с S

Which key

Так же, чтобы не теряться в большом количестве сочетаний, которое присутствует в виме и его плагинах может помочь WhichKey, который активируется при нажатии клавиши без определения сочетания и выводит подсказку с доступными действиями по клавише

Просто нажали leader:

Просто нажали g:

Чтобы добавить описание для сочетания из плагина, мы можем добавить параметр desc, в котором опишем его действие

lua / plugins / lsp.lua

vim.keymap.set("n", "<Leader>lr", vim.lsp.buf.rename, { buffer = ev.buf, desc = "Rename Symbol" })

Несколько сборок NVim

Так же ничто не мешает нам использовать сразу несколько сборок NeoVim

Для этого механизма в NeoVim было реализовано открытие определённой папки с конфигурацией по переменной окружения. Например, тут будет открываться папка nv в качестве входной точки конфигурации

NVIM_APPNAME=nv nvim

Поэтому в файле конфигурации нашего терминала, мы можем сделать алиас на вызов определённой конфигурации

.zshrc

alias nv="NVIM_APPNAME=nv nvim"

А так же мы можем добавить окошко с выбором конфига по команде nvims, в котором будут отображены варианты наших сборок (в поле items)

.zshrc

function nvims() {
  items=("default" "nv" "nvlazy" "nvastro" "nvchad")
  config=$(printf "%s\n" "${items[@]}" | fzf --prompt=" Neovim Config  " --height=~50% --layout=reverse --border --exit-0)
  if [[ -z $config ]]; then
    echo "Nothing selected"
    return 0
  elif [[ $config == "default" ]]; then
    config=""
  fi
  NVIM_APPNAME=$config nvim $@
}

Dashboard

Далее для красоты сборки остаётся только добавить startup экран, прям как у взрослых с помощью dashboard-nvim

lua / plugins / dashboard.lua

return {
	"nvimdev/dashboard-nvim",
	event = "VimEnter",
	config = function()
		require("dashboard").setup({
			theme = "hyper",
			config = {
				week_header = {
					enable = true,
				},
				shortcut = {
					{ desc = "󰊳 Update", group = "@property", action = "Lazy update", key = "u" },
					{
						icon = " ",
						icon_hl = "@variable",
						desc = "Files",
						group = "Label",
						action = "Telescope find_files",
						key = "f",
					},
					{
						desc = " Menu",
						group = "DiagnosticHint",
						action = "Neotree left toggle reveal",
						key = "e",
					},
				},
			},
		})
	end,
	dependencies = { { "nvim-tree/nvim-web-devicons" } },
}

И теперь наш стартапчик будет выглядеть примерно таким образом:

Описание плагинов

  1. Neotest - плагин для удобного запуска тестов в приложении

leader + t запускает множество команд для прогонки тестов

  1. DAP - плагин для дебага приложения

Первым делом получаем сокет с активным дебагом от нашего приложения

leader + d + b - ставим точку остановы

leader + d + u - открытие окна с дебагом leader + d + s - запуск дебага

И когда выполнение кода дойдёт до точки, то окно заполнится нужными данными

  1. Lazydev - подсказка сигнатуры вызова метода и упрощение работы с LSP неовима

  1. Diffview - показывает изменения между файлами для гита

lead + g + f - откроет историю изменений файла. Очень удобно смотреть на различные изменения файла в течение времени

  1. better-bqf

g + f - позволяет быстро найти все определения функции / метода в коде и удобно предоставляет список внизу с окошком

На o можно перейти на нужный референс

  1. Todo Comments

Подсвечивает тудушки и остальные ключевые слова в проекте

:TodoQuickFix