Версионирование
Основным преимуществом 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" } },
}
И теперь наш стартапчик будет выглядеть примерно таким образом:
Описание плагинов
- Neotest - плагин для удобного запуска тестов в приложении
leader
+ t
запускает множество команд для прогонки тестов
- DAP - плагин для дебага приложения
Первым делом получаем сокет с активным дебагом от нашего приложения
leader
+ d
+ b
- ставим точку остановы
leader
+ d
+ u
- открытие окна с дебагом
leader
+ d
+ s
- запуск дебага
И когда выполнение кода дойдёт до точки, то окно заполнится нужными данными
- Lazydev - подсказка сигнатуры вызова метода и упрощение работы с LSP неовима
- Diffview - показывает изменения между файлами для гита
lead + g + f
- откроет историю изменений файла. Очень удобно смотреть на различные изменения файла в течение времени
- better-bqf
g + f
- позволяет быстро найти все определения функции / метода в коде и удобно предоставляет список внизу с окошком
На o
можно перейти на нужный референс
- Todo Comments
Подсвечивает тудушки и остальные ключевые слова в проекте
:TodoQuickFix