Вернуться назад

nvim3

Lazy

Официальный сайт lazy.nvim: lazy.folke.io

Далее кусок кода с оф. сайта – для установки lazy.nvim:

-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
  local lazyrepo = "https://github.com/folke/lazy.nvim.git"
  local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
  if vim.v.shell_error ~= 0 then
    vim.api.nvim_echo({
      { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
      { out, "WarningMsg" },
      { "\nPress any key to exit..." },
    }, true, {})
    vim.fn.getchar()
    os.exit(1)
  end
end
vim.opt.rtp:prepend(lazypath)

-- Make sure to setup `mapleader` and `maplocalleader` before
-- loading lazy.nvim so that mappings are correct.
-- This is also a good place to setup other settings (vim.opt)
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"

-- Setup lazy.nvim
require("lazy").setup({

})

Установим плагин hop (т.е. добавим его в setup):

require("lazy").setup({
   { 'phaazon/hop.nvim' }
})

Так тоже можно:

require("lazy").setup({
   spec = {
      {
         'phaazon/hop.nvim',
	 branch = 'v2',
	 config = function() 
            -- you can configure Hop the way you like here; see :h hop-config
            require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
         end
      }
   }
})

Явно указывать spec не обязательно. Можно воспользоваться короткой формой записи:

require("lazy").setup({
   {
      'phaazon/hop.nvim',
      branch = 'v2',
      config = function() 
         -- you can configure Hop the way you like here; see :h hop-config
         require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
      end
   }
})

lazy.nvim устроен так, что если первый аргумент не содержит ключа spec, то первый аргумент считается таблицей плагинов (т.е. spec). Если же есть ключ spec, то lazy.nvim использует его.

Ключи

Помимо spec, есть ещё другие ключи:

require("lazy").setup({
   spec = {
      { ... }
   },
   default = { ... },
   install = { ... },
   event = { ... },
   cmd = { ... },
   checker = { ... },
   opts = { ... }
})

checker – это настройка lazy.nvim для автоматической проверки обновлений плагинов.

opts – это параметры, которые передаются в функцию setup.

То есть:

require("lazy").setup({
   {
      'phaazon/hop.nvim',
      branch = 'v2',
      config = function() 
         -- you can configure Hop the way you like here; see :h hop-config
         require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' },
         create_hl_autocmd = false,
         jump_on_sole_occurrence = true,
      end
   }
})

-- То же самое:
require("lazy").setup({
   {
      'phaazon/hop.nvim',
      branch = 'v2',
      opts = {
         keys = 'etovxqpdygfblzhckisuran',
         create_hl_autocmd = false,
         jump_on_sole_occurrence = true,
      }
   }
})

-- То же самое, но избыточно и бессмысленно:
require("lazy").setup({
   {
      'phaazon/hop.nvim',
      branch = 'v2',
      opts = {
         keys = 'etovxqpdygfblzhckisuran',
         create_hl_autocmd = false,
         jump_on_sole_occurrence = true,
      }
      config = function(_, opts)
         require'hop'.setup(opts)
      end
   }
})

Попробуем применить цветовую схему после установки:

require("lazy").setup({
   spec = {
      { ... }
   },
   default = { ... },
   install = { colorscheme = { "lunaperche" } }
})

Здесь после установки любого плагина включится цветова схема "lunaperche". Она применится именно в процессе установки в том же сеансе, безе перезагрузки nvim. Но после перезагрузки nvim вернётся схема по умолчанию.

А чтобы схема не слетала после перезагрузки nvim, то сделаем так:

require("lazy").setup({
   spec = {
      { ... }
   },
   install = { colorscheme = { "lunaperche" } }
})
vim.cmd('colorscheme habamax')

При таком раскладе в процессе установки плагина мы будем видеть схему lunaperche, но после установки сразу применится habamax.

Можно переопределить настройки плагина:

require("lazy").setup({
   spec = {
      {
      'phaazon/hop.nvim',
      branch = 'v2',
      config = function() 
         -- you can configure Hop the way you like here; see :h hop-config
         require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
      end
      }
   },
   install = { colorscheme = { "murphy" } }
})

-- Переопределяем ключ keys:
require'hop'.setup { keys = '12345' }

vim.cmd('colorscheme habamax')

Ключ event:

require("lazy").setup({
   spec = { ... },
   install = { colorscheme = { "murphy" } },
   -- Плагин загрузится при первом чтении файла:
   event = "BufRead" 
})

vim.cmd('colorscheme habamax')

При любом открытии файла:

require("lazy").setup({
   spec = { ... },
   install = { colorscheme = { "murphy" } },
   -- Плагин загрузится при любом открытии файла:
   event = { "BufReadPost", "BufNewFile" } 
})

vim.cmd('colorscheme habamax')

для определённых типов файлов:

require("lazy").setup({
   spec = { ... },
   install = { colorscheme = { "murphy" } },
   -- Плагин загрузится только при открытии .js-файлов:
   event = { "BufRead *.js", "BufNewFile *.js" }
})

vim.cmd('colorscheme habamax')

для определённых типов файлов (ориентируется на filetype, а не на расширение):

require("lazy").setup({
   spec = { ... },
   install = { colorscheme = { "murphy" } },
   -- Загрузится только когда filetype станет "javascript":
   ft = "javascript"
})

vim.cmd('colorscheme habamax')

Вот пример конфигурации, где при старте nvim не загружается плагин hop.nvim:

require("lazy").setup({
   spec = {
      {
         'phaazon/hop.nvim',
         branch = 'v2',
         event = { "InsertEnter", "BufRead" },
         config = function() 
            -- you can configure Hop the way you like here; see :h hop-config
            require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
         end
      }
   },
   install = { colorscheme = { "murphy" } }
})

vim.cmd('colorscheme habamax')

Здесь нужно обратить внимание на event.

InsertEnter срабатывает, когда мы переходим в режим вставки. А BufRead – когда открываем файл. Таким образом, если мы просто запустили nvim, не открывая файл, то плагин не загрузится. Но стоит только открыть файл, или начать печатать текст, как сразу подгружается плагин hop.nvim.

А что, если мы хотим вручную подгрузить плагин? Тогда делаем так:

:Lazy load hop.nvim

Ещё можно загружать плагин по команде. Я хочу, чтобы при первом открытии nvim были доступны только две команды: HopWord и HopChar1. И только когда я выполню одну из них, плагин подгужается и мне становятся доступны все остальные команды. Реализовать это можно так:

require("lazy").setup({
   spec = { ... },
   install = { colorscheme = { "murphy" } },
   -- Загрузится только когда filetype станет "javascript":
   cmd = { "HopWord", "HopChar1" }  -- загрузить только при вызове команды
})

vim.cmd('colorscheme habamax')

Горячие клавиши

Первый вариант:

vim.g.mapleader = " "
require("lazy").setup({
   spec = { ... },
   install = { colorscheme = { "murphy" } },
   -- Загрузится после нажатия "пробел, h, w"
   keys = { "<leader>hw" }
})

vim.cmd('colorscheme habamax')

Второй вариант:

vim.g.mapleader = " "
require("lazy").setup({
   spec = { ... },
   install = { colorscheme = { "murphy" } },
   -- Загрузится после нажатия "пробел, h, w"
   keys = { 
      { "<leader>kb", "<cmd>HopWord<cr>", desc = "Kakashka" },
   },
})

vim.cmd('colorscheme habamax')

Первый вариант – Говорит lazy.nvim: "Загрузи плагин когда пользователь нажмёт <leader>hw", НО не назначает саму команду!

Второй вариант – Загружает плагин при нажатии <leader>kb. Назначает клавишу, которая выполняет <cmd>HopWord<cr>. После первого нажатия — плагин загружен и клавиша работает.

Событие VeryLazy – это специальное событие lazy.nvim, которое означает: загрузиться как можно позже, но до первого использования.

require("lazy").setup({
   spec = { ... },
   install = { ... },
   -- Загрузится как можно позже:
   event = "VeryLazy"
})

vim.cmd('colorscheme habamax')

Плагины – в отдельный файл

В отдельном файле мы должны вернуть список плагинов (у нас только один плагин):

-- ~/.config/nvim/lua/plugins/init.lua

return {
   {
      'phaazon/hop.nvim',
      branch = 'v2',
      -- event = { "InsertEnter", "BufRead" },
      cmd = { "HopWord", "HopChar1" },  -- загрузить только при вызове команды
      keys = { "hw" },
      config = function() 
         -- you can configure Hop the way you like here; see :h hop-config
         require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
      end
   }
}

А здесь мы импортируем все плагины из папки plugins:

-- ~/.config/nvim/init.lua

-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
  local lazyrepo = "https://github.com/folke/lazy.nvim.git"
  local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
  if vim.v.shell_error ~= 0 then
    vim.api.nvim_echo({
      { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
      { out, "WarningMsg" },
      { "\nPress any key to exit..." },
    }, true, {})
    vim.fn.getchar()
    os.exit(1)
  end
end
vim.opt.rtp:prepend(lazypath)

require("lazy").setup({
   spec = {
      { import = "plugins" },   -- Импорт всех плагинов из модуля
   },
})

vim.cmd('colorscheme habamax')

Разделить плагины по файлам

-- ~/.config/nvim/lua/plugins/hop.lua

return {
   {
      'phaazon/hop.nvim',
      branch = 'v2',
      -- event = { "InsertEnter", "BufRead" },
      cmd = { "HopWord", "HopChar1" },  -- загрузить только при вызове команды
      keys = { "hw" },
      config = function() 
         -- you can configure Hop the way you like here; see :h hop-config
         require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
      end
   }
}

Импортируем hop из папки plugins:

-- ~/.config/nvim/init.lua

-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
  local lazyrepo = "https://github.com/folke/lazy.nvim.git"
  local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
  if vim.v.shell_error ~= 0 then
    vim.api.nvim_echo({
      { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
      { out, "WarningMsg" },
      { "\nPress any key to exit..." },
    }, true, {})
    vim.fn.getchar()
    os.exit(1)
  end
end
vim.opt.rtp:prepend(lazypath)

require("lazy").setup({
   spec = {
      { import = "plugins.hop" },   -- Импортируем hop из папки plugins
   },
})

vim.cmd('colorscheme habamax')

Ставим Treesitter

Вот так выглядит сам плагин:

-- ~/.config/nvim/lua/plugins/treesitter.lua

return {
   'nvim-treesitter/nvim-treesitter',
   lazy = false,
   build = ':TSUpdate',
   config = function()
      require'nvim-treesitter'.install { "javascript", "typescript", "html", "css", "lua" }
   end
}   

И импортируем Tree-sitter в главный init.lua:

-- ~/.config/nvim/init.lua

require("lazy").setup({
   spec = {
      { import = "some_plugin" },
      { import = "plugins.treesitter" },
   },
})

-- Запускаем Tree-sitter:
vim.treesitter.start()

При первом запуске nvim treesitter запустится. Но если мы в этом же сеансе откроем ещё один файл, то treesitter в нём не запустится.

Если мы хотим в самом nvim включить или отключить подсветку tree-sitter, то это можно сделать так:

-- Включить treesitter:
:lua vim.treesitter.start()

-- Выключить treesitter:
:lua vim.treesitter.stop()

Проверить для текущего буфера, включён ли treesitter:

:lua print(vim.treesitter.highlighter.active[vim.api.nvim_get_current_buf()] ~= nil)

  # true → Tree-sitter сейчас включён для этого буфера
  # false → не включён

ВАЖНЫЙ МОМЕНТ!!! Для Lua treesitter по умолчанию включён ВСЕГДА!! Можно не прописывать vim.treesitter.start().

Запускать treesitter для определённых типов файлов:

vim.api.nvim_create_autocmd('FileType', {
  pattern = { 'javascript', 'typescript', 'html', 'css', 'lua' },
  callback = function() vim.treesitter.start() end,
})

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

Второй способ запустить treesitter для определённых типов файлов. Создаём в ~/.config/nvim/ftplugin/ файл с именем типа файла и пишем в него:

-- ~/.config/nvim/ftplugin/html

vim.treesitter.start()
-- ~/.config/nvim/ftplugin/javascript

vim.treesitter.start()

При таком раскладе подсветка treesitter будет активирована для файлов html и javascript.

Neo-tree

Вот так добавляем плагин:

~/.config/nvim/lua/plugins/neotree.lua

return {
  {
    "nvim-neo-tree/neo-tree.nvim",
    branch = "v3.x",
    dependencies = {
      "nvim-lua/plenary.nvim",
      "MunifTanjim/nui.nvim",
      "nvim-tree/nvim-web-devicons", -- optional, but recommended
    },
    lazy = false, -- neo-tree will lazily load itself
  }
}

Lualine

Прикольные темы


    lala