Enhance Your Nvim Life With Plugins!
Nvimはとても多くの拡張機能が開発されており、それを管理するのも非常に簡単です。
Nvimの真髄を味わうために、プラグインを入れられるようになりましょう。
Split Your Config File into Separate Files
プラグインの管理をし始めると、設定ファイルの行数が増えていき管理がしづらくなってしまいます。 そのため、設定ファイルを複数に分けそれぞれの設定をどこに書いたか見つけやすくしましょう。
それらすべてのファイルは init.vim / init.lua からimportしていきます。
How to Import Separate Files
Importの仕方は言語によって異なります。
vimscriptをimportするにはsource <file-name>をし、luaファイルをimportするにはrequire("<file-name>")をします。luaの場合は ~/.config/nvim/lua/ がランタイムパスになっていて、そこからの相対パスをrequireします。
仮にこういうフォルダ構造になっていたとすると、
📂 ~/.config/nvim
├── 📂 general
│ └── 🇻 settings.vim
├── 📂 lua
│ └── 📂 00-general
│ └── 🌑 settings.lua
├── 🌑 init.lua
└── 🇻 init.viminit.vim-> vimscript files, lua files
" import vimscript file
source ~/.config/nvim/general/settings.vim
" import lua files
lua require('00-general.settings')init.lua-> vimscript files, lua files
-- import vimscript file
vim.cmd([[
source ~/.config/nvim/general/settings.vim
]])
-- import lua files (one of the followings)
require('00-general.settings')
require('00-general/settings') -- requireのパスは/か.で階層を区切る (.が一般的)
require '00-general.settings' -- かっこは省略可能
require "00-general.settings" -- 文字列は "" もありPacker.nvim
今回はプラグインマネージャとして packer.nvim について書きます。ほかにもいろいろあって、どれも基本的に使い勝手は変わりません。
- packer.nvim : Luaで書かれていて速い。みんな使ってる
- dein.vim : 作者が日本人なので日本語の記事多め
- vim-plug : 古くからあるのでどのチュートリアルでもこれが載ってることが多い
基本的な使い方は以下の通りで、これを設定ファイルにコピペしてください。ただし、この記事では設定を書きやすくするためにちょっと書き方を変えます。そのままこの記事に従っていく場合は ## Automatically Install Packer.nvim までスキップ。
vim.cmd [[packadd packer.nvim]]
return require('packer').startup(function(use)
-- Packer can manage itself
use 'wbthomason/packer.nvim'
-- Simple plugins can be specified as strings
use 'lunarvim/colorschemes'
use 'folke/tokyonight.nvim'
-- Post-install/update hook with neovim command
use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' }
end)Automatically Install Packer.nvim
Packer.nvimに関する設定を書くファイルを用意します。 ~/.config/nvim/lua/00-plug-config/init.lua を作ってください。
Packer.nvimを使用するには別途インストールが必要ですが、それを自動的に行なってくれるスクリプトを最初に書きます。
また、デフォルトではプラグインの読み込みのキャッシュを ~/.config/nvim/plugin/packer_compiled.lua に作成します。これがdotfilesを汚してしまうので作成先を変更しています。
local install_path = vim.fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim"
if vim.fn.empty(vim.fn.glob(install_path)) > 0 then
local git_path = "https://github.com/wbthomason/packer.nvim"
PACKER_BOOTSTRAP = vim.fn.system({ "git", "clone", "--depth", "1", git_path, install_path })
print("Installing packer close and reopen Neovim...")
vim.cmd([[packadd packer.nvim]])
end
local compile_path = string.format("%s/%s", vim.fn.stdpath("cache"), "plugin/packer_compiled.lua")
local packer = require("packer")
packer.reset()
packer.init({
compile_path = compile_path,
display = { open_fn = require("packer.util").float },
autoremove = true,
})
if vim.fn.filereadable(compile_path) ~= 0 then
vim.cmd(string.format("luafile %s", compile_path))
endManage Multiple Plugins
管理するプラグインの数が多くなってくるとファイルの数が膨大になってしまうので、機能別でフォルダに分けます。この記事もそのフォルダごとに章を分けて書いています。
最終的なフォルダストラクチャはこんな感じになります。それぞれ解説するページがあるので興味があるものを読んでください。
~/.config/nvim/lua/
├── 00-plug-config/ <- イマココ
├── 10-color-config/
├── 10-ts-config/
├── 11-uiline-config/
├── 20-register-config/
├── 20-utility-config/
├── 25-telescope-config/
├── 30-git-config/
├── 40-terminal-config/
├── 50-command-config/
├── 50-operations-config/
├── 60-lang-config/
├── 70-cmp-config/
├── 70-lsp-config/
└── 80-debug-config/それぞれのフォルダを順番に読み込んでいくスクリプトを書きます。これを順番に読み込むコードを~/.config/nvim/lua/00-plug-config/init.lua に追記してください。
このスクリプトの使い方は 次回 に書いてあります。
return packer.startup(function(use)
-- stylua: ignore start
local function load_sub_dirs(dir_name)
local load_ok, plugin_table = pcall(require, dir_name)
if not load_ok then return false end
for _, plugin in ipairs(plugin_table.install or {}) do use(plugin) end
for _, plugin in ipairs(plugin_table.setup or {}) do
if type(plugin) ~= "table" then plugin = { plugin } end
plugin.config = string.format([[require("%s.%s")]], dir_name, plugin[1]:gsub(".*/([^.]*)%.?.*$", "%1"))
use(plugin)
end
end
-- stylua: ignore end
use({ "lewis6991/impatient.nvim" })
require("impatient")
use({ "wbthomason/packer.nvim" }) -- Have packer manage itself
use({ "nvim-lua/popup.nvim" }) -- An implementation of the Popup API from vim in Neovim
use({ "nvim-lua/plenary.nvim" }) -- Useful lua functions used lots of plugins
-- 今は全部コメントアウト
-- load_sub_dirs("10-color-config")
-- load_sub_dirs("10-ts-config")
-- load_sub_dirs("11-uiline-config")
-- load_sub_dirs("20-utility-config")
-- load_sub_dirs("20-register-config")
-- load_sub_dirs("25-telescope-config")
-- load_sub_dirs("30-git-config")
-- load_sub_dirs("40-terminal-config")
-- load_sub_dirs("50-operations-config")
-- load_sub_dirs("50-command-config")
-- load_sub_dirs("60-lang-config")
-- load_sub_dirs("70-cmp-config")
-- load_sub_dirs("70-lsp-config")
-- load_sub_dirs("80-debug-config")
if PACKER_BOOTSTRAP then
packer.sync()
end
end)impatient.nvim ~ plenary.nvimは必須プラグインなのですでにインストールしてしまいましょう。
init.vim or init.luaでこのファイルを読み込みます。ちなみにinit.luaはpythonでいう__init__.pyと同じ意味で、フォルダ名だけrequireすればいいです。
lua require '00-plug-config'require("00-plug-config")いったんNvimを閉じて、再度開いてください。そこで:PackerSync<CR>というコマンドを実行するとimpatient.nvim ~ plenary.nvimのインストールが始まるはずです。下の写真のように、popup.nvimやplenary.nvimがインストールされない場合はNvimを再起動するなど試してみてください。
無事インストールが完了したら、次回はcolorscheme (色の設定) をしていきましょう。 このどぎつい色からおさらばしましょう。