NvChadでNeoVimの開発環境を整える
プラグイン
- NeoVimをIDEのように機能させるためのプラグイン、設定のプリセット
- 起動速度ときれいなUIに拘っているらしい
- 使用されているPluginなどもNeoVim向けをベースにして、いい感じのものが揃っている
- Dockerで試してみて良さげだったので、使ってみる
ドキュメント
- 詳細な設定方法というよりは、大まかな構成などが載っている
- 各プラグインに対する設定は、デフォルトの設定ファイルなどを参照したがわかりやすい
インストール
~/.config/nvim/
がまっさらな状態で以下のコマンドを実行。
NeoVimが起動したあとは:PackerSync
を実行し、再起動する。
git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1 && nvim
dotfilesリポジトリでNeoVimの設定を管理している場合
NvChadはGitを利用してバージョンの管理を行っているため、dotfilesリポジトリの中にNvChadをインストールした場合、Gitリポジトリの中にGitリポジトリが存在する状態になってしまう。
また、NvChadの設定をカスタマイズする場合は、NvChadリポジトリの中にカスタマイズ用の設定ファイルを配置する必要がある(詳細は事項を参照)。
これらの問題は、NvChadリポジトリをsubmoduleとして扱い、設定ファイルはシンボリックリンクを貼ることで解決した。
git submodule add -b main https://github.com/NvChad/NvChad .config/nvim
mkdir -p nvchad/custom
ln -s ~/dotfiles/nvchad/custom ~/.config/nvim/lua/
参考までに、自分のディレクトリツリーを示す。
dotfiles
├── .config
│ └── nvim # submodule
│ ├── ...
│ ├── lua
│ │ ├── core
│ │ ├── custom -> /home/user-name/dotfiles/nvchad/custom
│ │ └── plugins
│ └── ...
├── .gitmodules
├── nvchad
│ └── custom
│ ├── chadrc.lua
│ └── init.lua
└── README.md
特に指定がない場合、以降のカレントディレクトリは ~/.config/nvim
であることを前提でパスを記載する。
アップデート
NvChadはノーマルモードのときに<leader>uu
と入力することで、アップデートされる。
それ以外のプラグインは:PackerSync
を実行することで、アップデートされる。
カスタマイズ方法
./lua/custom/
に設定ファイルを配置していく。
init.lua
と chadrc.lua
だけ、NvChad本体から呼び出される仕組みになっている。
詳細はリンク先を参照。
exmaples
ディレクトリにサンプルが入っているので、それを使用すれば良い。
cp ./examples ./lua/custom
また、chadrc.lua
でplugins
などのプロパティを設定したオブジェクトはreturn
する必要がある。
local M = {}
M.plugins = {
// プラグインに関する設定
}
M.mappings = {
// キーマッピングに関する設定
}
return M
プラグインを追加
hop.nvimを例に示す。
M.plugins = {
user = {
["phaazon/hop.nvim"] = {
branch = "v2",
config = function ()
require("hop").setup()
end
},
},
}
hop.nvimはデフォルトでキーバインドを提供していないので、対応するキーマップを設定する。
M.mappings = {
hop = { -- 自由な名前を付けれる
n = {
["<leader>s"] = {"<cmd> HopChar1 <CR>", "type a key and hop to the char"}
},
},
}
マッピングを設定
インサートモードでかんたんに移動できるキーマッピングが、デフォルトで準備されている。
Emacsのキーマッピングに慣れているため、デフォルトを無効化しつつ、自分向けの設定を入れる。
M.mappings = {
-- 無効化するデフォルトのキーマッピング
disabled = {
i = { -- インサートモードに関するキーマッピング
["<C-b>"] = "", -- { "<ESC>^i", "beginning of line" },
["<C-e>"] = "", -- { "<End>", "end of line" },
["<C-h>"] = "", -- { "<Left>", "move left" },
["<C-l>"] = "", -- { "<Right>", "move right" },
["<C-j>"] = "", -- { "<Down>", "move down" },
["<C-k>"] = "", -- { "<Up>", "move up" },
},
n = { -- ノーマルモードに関するキーマッピング
["<C-s>"] = "", -- { "<cmd> w <CR>", "save file" },
},
},
-- 追加するキーマッピング
general = {
i = {
["<C-a>"] = { "<Home>", "beginning of line" },
["<C-e>"] = { "<End>", "end of line" },
["<C-b>"] = { "<Left>", "move left" },
["<C-f>"] = { "<Right>", "move right" },
["<C-n>"] = { "<Down>", "move down" },
["<C-p>"] = { "<Up>", "move up" },
},
},
}
LSP周りの設定
様々なプラグインが登場して役割がややこしいが、この記事の説明がわかりやすかった。
LSP
基本的に、公式ドキュメントにしたがって設定を行えば問題ない。
mason.nvimのensure_installed
の設定方法がちょっと分かりづらかったので補足。
ensure_installed
はデフォルトの設定が存在するため、chadrc.lua
のM.plugins.override
に対して設定する必要がある。
M.plugins = {
user = require "custom.plugins",
override = require "custom.override",
}
return {
["williamboman/mason.nvim"] = {
ensure_installed = {
-- lua stuff
"lua-language-server",
"stylua",
-- web dev
"css-lsp",
"html-lsp",
"typescript-language-server",
"deno",
"emmet-ls",
"json-lsp",
-- shell
"shfmt",
"shellcheck",
},
},
}
Format & lint
ここも公式ドキュメントにしたがって設定を行えばよい。
dotfiles内に構築している場合
NvChadには.stylua.toml
が準備されているが、./lua/custom
ディレクトリをシンボリックリンクで準備した場合、デフォルトのスタイル設定でフォーマットされてしまう。
:LspInfo
を確認するとroot directory
がdotfiles
となっており、シンボリックリンクの実体があるdotfiles/nvchad/custom
を基準に.stylua.toml
を探しているのが原因と思われる。
なので、.stylua.toml
のシンボリックリンクをdotfiles
直下に準備した。
cd ../..
ln -s .config/nvim/.stylua.toml ./
Go言語の設定
LSP周りの設定がうまくいっているか、Go言語の開発環境の設定を追加して確認する。
開発関連ツールのインストール
mason.nvimでGoの開発関連ツールを以下のように設定し、:MasonInstallAll
を実行する。
その際、インストールするツールがどのカテゴリ (LSP, DAP, Linter, Formatter) に属するかによって設定方法が変わるため、それぞれ把握しておく。
["williamboman/mason.nvim"] = {
ensure_installed = {
-- 他の言語の設定
-- go
"goimports", -- Formatter
"gopls", -- LSP
},
},
LSPの設定
mason.nvimでインストールしたツールのうち、カテゴリがLSPのものは、nvim-lspconfigに対して設定を追加する。
...
local servers = { "html", "cssls", "clangd", "gopls" } -- インストールしたLSPを追加
...
Formatter、Linterの設定
mason.nvimでインストールしたツールのうち、カテゴリがFormatter、Linterのものは、null-ls.nvimに対して設定を追加する。
カテゴリがFormatterのものはb.formatting.<formatter-name>
、Linterのものはb.diagnostics.<linter-name>
でそれぞれ設定する。
local sources = {
-- webdev stuff
b.formatting.deno_fmt,
b.formatting.prettier,
-- Lua
b.formatting.stylua,
-- Shell
b.formatting.shfmt,
b.diagnostics.shellcheck.with { diagnostics_format = "#{m} [#{c}]" },
-- Go
b.formatting.goimports
}
DAPの設定
設定後
いろいろ補完が表示されるようになり、fmt
を選択した際にimport
文も自動で保管される。
その他
ダッシュボード
NvChadでは、alpha.nvimのダッシュボードも準備されている。
ただし最初は設定で無効化されているので、使用したい場合は以下の設定で有効化する必要がある。
詳しくは以下のリンク先を参照。
ダッシュボードで表示されるロゴを変更したい場合は、以下のように設定する。
["goolord/alpha-nvim"] = {
header = {
val = {
" ",
" ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
" ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ",
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ",
" ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
" ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
" ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
" ",
},
},
},
参考までに、ここまで設定した自分のdotfilesを貼っておく。