🎍
久しぶりにNeovimの設定を見直してみる
動機
ここしばらくプライベートで技術的に何かをする余裕を失っていて、
久々にNeovimの設定をメンテナンスしたので記事化。
tl;dr
-
vim.keymap.set
が素敵 -
lua
のフォーマッタはStyLua
が非常にいい感じ -
galaxyline.nvim
の後継はfeline.nvim
が良さそう
vim.keymap.set いいぞ
--- a/nvim/lua/my-telescope.lua
+++ b/nvim/lua/my-telescope.lua
@@ -50,60 +50,61 @@ end
-- Keymaps =================================================================================
+local builtin = require("telescope.builtin")
-vim.api.nvim_set_keymap(
+vim.keymap.set(
"n",
"<leader>ff",
- '<cmd>lua require("telescope.builtin").find_files()<cr>',
+ builtin.find_files,
{noremap = true, silent = true}
)
-vim.api.nvim_set_keymap(
+vim.keymap.set(
"n",
"<leader>f:",
- '<cmd>lua require("telescope.builtin").command_history()<cr>',
+ builtin.command_history,
{noremap = true, silent = true}
)
よき… 地味だけど、このluaの中でluaを呼び出すvim scriptを書かなくていい!
(本質的ではないんでしょうけど)
StyLuaは良いぞ
telescope.nvimのソースを何気なく眺めていて気づきましたが、
luaのformatterは色々あった中で StyLua
がいい感じのようですね。
どのformatterも中途半端だったのに、StyLuaはprettier
なみにかゆいところへ手が届く、良いformatterです。
- ブレがちなところをきちんとフォローしてくれる
- 関数呼び出しのカッコや、文字列のクォーテーションなど
- stylua.tomlによる設定をサポート
- rust製
ステータスラインプラグイン
前提: どんな使い方をしているか
ステータスにやたらと色々と表示するのは、めったに役に立たない割にリソースや領域を消費するので、
できるだけモノを減らすようにしています。
削りに削って今の所
- モード
- CWD
- ファイル名・種類・編集済フラグ
- Diagnostics
だけは私のNeovim生活スタイルにおいては無いと厳しいようです。
今までは?
galaxyline.nvim を使ってたのですが、原作者のglepnirが音信不通になってしまって以降、
まともに引き継ぐ人も現れず、危険な香りがしていました。
選択肢は?
新しく探した範囲では
- lightline.vim に戻す
- nvim-lualine/lualine.nvim
- tjdevries/express_line.nvim
- feline-nvim/feline.nvim
あたりが引っかかりましたが、
- lightline.vim
- 相変わらずミニマルで軽くて素敵
- 個人的にvim scriptに飽きているので今は良いや、という気持ちに。
- vim9 本格的に使おうという気持ちになったら 選択肢の筆頭
- ドキュメントがとても丁寧
- lualine.nvim
- 比較的軽い
- airline系の血を感じる
- 変なところで固定されたフレームワークに閉じ込められがちで却下
- ドキュメントが丁寧
- express_line.nvim
- telescopeと作者が同じ?
- wipらしい
- telescopeと思想がよく似ている…
- ちょっと重い
- telescopeの設定部分が深いところでドキュメンテーションされてなくてきっついので、今回は忌避
- ドキュメントが難解
- feline.nvim
- 比較的軽い。lualineよりはちょっとモサるかも?
- galaxyline.nvim みたいなカスタム性
- 作者が謙虚 。READMEの書き味、ドキュメントの書き味、好き。
- ネーミングセンスが好き。
- ドキュメントが丁寧(USAGE.md)
といったところです。
feline.nvim どんな感じ?
設定のカスタム範囲が割とわかりやすいのが良いですね。
...
local component_file = {
provider = function()
return vim.fn.fnamemodify(vim.fn.getcwd(), ":t")
end,
hl = {
fg = 'black',
bg = 'lightmagenta',
},
right_sep = {
str = '>',
hl = {
fg = 'red',
bg = 'white',
},
},
}
...
require("feline").setup({
components = {
active = {{
-- left
component_mode,
component_cwd,
component_file,
}, {
-- mid
...
}, {
-- right
'diagnostics_errors',
'diagnostics_warnings',
...
}},
inactive = {
...
},
})
コンポーネント内の各プロパティは、それと同じ形の値を返すfunctionで置き換え可能、ってのも大変わかりやすいですね。
ただ、component単位で非同期化したいとか、どこぞのイベントに応じて一部のcomponentを書き換えたい、
みたいな要求がある場合は結構工夫を要求されそうです。
そういう複雑な制御をしたい場合はexpress_line.nvimの方が良いかもしれません。
Discussion