dein→lazyへお試し移行
dppができて、それを使うまえにShougowareじゃないプラグインマネージャも経験してみたいので、lazyを試す
順序としては
- dein
- lazy
- dpp
みたく順に移行していきたい
dppを有効活用するための†経験†
現状
init.vim + dein(toml)構成なので
- init.vim(lua << EOFで少しづつlua化) + dein(toml)
- init.lua + dein(toml)
-
init.lua + dein(toml内部の処理で
lua_source
等を多用) - init.lua + lazy
の順でやってく
いったん
ここまでで手元ubuntuはdein周りとかをきれいにさせた
init.vimのdein使う処理周りをlua化させてく
dein周りで面倒なショリ
" install dir {{{
let s:dein_dir = expand('~/.cache/dein/nvim')
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
let g:github_dir = s:dein_dir . '/repos/github.com'
" }}}
" dein installation check {{{
if &runtimepath !~# '/dein.vim'
if !isdirectory(s:dein_repo_dir)
execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir
endif
execute 'set runtimepath^=' . s:dein_repo_dir
endif
" }}}
" begin settings {{{
" In windows, auto_recache is not disabled. It is too slow.
let g:dein#auto_recache = !has('win32')
if dein#load_state(s:dein_dir)
call dein#begin(s:dein_dir)
" .toml file
let s:rc_dir = expand('~/.config/nvim')
if !isdirectory(s:rc_dir)
call mkdir(s:rc_dir, 'p')
endif
let s:toml = s:rc_dir . '/dein.toml'
let s:ddu_toml = s:rc_dir . '/ddu.toml'
let s:ddc_toml = s:rc_dir . '/ddc.toml'
let s:lazy_toml = s:rc_dir . '/dein_lazy.toml'
" read toml and cache
call dein#load_toml(s:toml)
call dein#load_toml(s:ddu_toml, #{ lazy: 1})
call dein#load_toml(s:ddc_toml, #{ lazy: 1})
call dein#load_toml(s:lazy_toml, {'lazy': 1})
" end settings
call dein#end()
call dein#save_state()
" Required:
filetype plugin indent on
syntax enable
endif
" }}}
" plugin installation check {{{
if dein#check_install()
call dein#install()
endif
" }}}
" plugin remove check {{{
let s:removed_plugins = dein#check_clean()
if len(s:removed_plugins) > 0
call map(s:removed_plugins, "delete(v:val, 'rf')")
call dein#recache_runtimepath()
endif
" }}}
" }}}
↑これがいっちゃんでかいdein周りの処理
chat gptくんに丸投げしたら返ってきたので、一旦試す
lua化したver
-- Install dir
local dein_dir = vim.fn.expand('~/.cache/dein/nvim')
local dein_repo_dir = dein_dir .. '/repos/github.com/Shougo/dein.vim'
local github_dir = dein_dir .. '/repos/github.com'
-- Dein installation check
if not vim.fn.exists('g:dein#auto_recache') then
vim.g['dein#auto_recache'] = not vim.fn.has('win32')
end
if not vim.fn.glob(dein_repo_dir) ==# '' then
vim.fn.system('git clone https://github.com/Shougo/dein.vim ' .. dein_repo_dir)
end
if not vim.fn.index(vim.fn.split(vim.o.runtimepath, ','), dein_repo_dir) ==# -1 then
vim.o.runtimepath = dein_repo_dir .. ',' .. vim.o.runtimepath
end
-- Begin settings
if vim.fn['dein#load_state'](dein_dir) then
vim.fn['dein#begin'](dein_dir)
-- .toml file
local rc_dir = vim.fn.expand('~/.config/nvim')
if not vim.fn.isdirectory(rc_dir) then
vim.fn.mkdir(rc_dir, 'p')
end
local toml = rc_dir .. '/dein.toml'
local ddu_toml = rc_dir .. '/ddu.toml'
local ddc_toml = rc_dir .. '/ddc.toml'
local lazy_toml = rc_dir .. '/dein_lazy.toml'
-- Read toml and cache
vim.fn['dein#load_toml'](toml)
vim.fn['dein#load_toml'](ddu_toml, { lazy = 1 })
vim.fn['dein#load_toml'](ddc_toml, { lazy = 1 })
vim.fn['dein#load_toml'](lazy_toml, { lazy = 1 })
-- End settings
vim.fn['dein#end']()
vim.fn['dein#save_state']()
-- Required
vim.cmd('filetype plugin indent on')
vim.cmd('syntax enable')
end
-- Plugin installation check
if vim.fn['dein#check_install']() then
vim.fn['dein#install']()
end
-- Plugin remove check
local removed_plugins = vim.fn['dein#check_clean']()
if #removed_plugins > 0 then
for _, plugin in ipairs(removed_plugins) do
vim.fn.delete(plugin, 'rf')
end
vim.fn['dein#recache_runtimepath']()
end
deinのhelpみてみたら、lua用にも関数が生えてるので、それ使うようにしたい
if not vim.fn.exists('g:dein#auto_recache') then
vim.g['dein#auto_recache'] = not vim.fn.has('win32')
end
こことかvim.fn.existsの返り値が0 or 1でluaだとこれ全部true扱いだから、not反転で絶対falseになるマンになってて永遠詰んでた
うんち過ぎる
他にも色々修正必要
ひとまず変換させたver
lua << EOF
-- Install dir
local dein_dir = vim.fn.expand('~/.cache/dein/nvim')
local dein_repo_dir = dein_dir .. '/repos/github.com/Shougo/dein.vim'
local github_dir = dein_dir .. '/repos/github.com'
vim.api.nvim_set_var('github_dir', github_dir)
-- In windows, auto_recache is not disabled. It is too slow.
if vim.fn.exists('g:dein#auto_recache') ~= 1 then
vim.api.nvim_set_var('dein#auto_recache', vim.fn.has('win32') ~= 1)
end
-- dein installation check
if not vim.fn.glob(dein_repo_dir) == '' then
vim.fn.system('git clone https://github.com/Shougo/dein.vim ' .. dein_repo_dir)
end
local function check_table(T, V)
local ret = false
for _, v in ipairs(T) do
if v == V then
ret = true
end
end
return ret
end
if not check_table(vim.fn.split(vim.o.runtimepath, ','), dein_repo_dir) then
vim.o.runtimepath = dein_repo_dir .. ',' .. vim.o.runtimepath
end
-- use dein
local dein = require('dein')
-- register plugin via dein
if dein.load_state(dein_dir) == 1 then
dein.begin(dein_dir)
local rc_dir = vim.fn.expand('~/.config/nvim')
local toml = rc_dir .. '/dein.toml'
local ddu_toml = rc_dir .. '/ddu.toml'
local ddc_toml = rc_dir .. '/ddc.toml'
local lazy_toml = rc_dir .. '/dein_lazy.toml'
dein.load_toml(toml)
dein.load_toml(ddu_toml, { lazy = true })
dein.load_toml(ddc_toml, { lazy = true })
dein.load_toml(lazy_toml, { lazy = true })
dein.end_()
dein.save_state()
end
-- plugin installation check
if dein.check_install() then
dein.install()
end
-- plugin remove check
local removed_plugins = dein.check_clean()
if #removed_plugins > 0 then
for _, plugin in ipairs(removed_plugins) do
vim.fn.delete(plugin, 'rf')
end
dein.recache_runtimepath()
end
EOF
luaに慣れてないのもあって、これだけなのにめちゃかかったし、これで全部しっかり動いてるかは正直分からん
ひとまずこれで動くこととする
luaとvimscriptが混在するとハイライトが絶望になっちゃう
→いったん:luafile
使って別luaファイルから読み出すようにする
現状のinit.vimが:luafile ~/unko.lua
だけになったら、unko.luaをinit.luaに書き換えて、init.vimを消せば良さそう
あとせっかく.luaファイル用意しても
undefined global 'vim'
とか表示されるので、
masonでの設定で、lua_lsにvimをグローバル登録
mason_lspconfig.setup_handlers({ function(server_name)
local opts = {
on_attach = function(client, bufnr)
if client.server_capabilities.documentSymbolProvider then
navic.attach(client, bufnr)
end
end,
capabilities = capabilities
}
if server_name == "tsserver" then
opts.root_dir = nvim_lsp.util.root_pattern("package.json", "tsconfig.json")
elseif server_name == "denols" then
opts.root_dir = nvim_lsp.util.root_pattern("deps.ts", "deno.json")
elseif server_name == "lua_ls" then
opts.settings = {
Lua = {
diagnostics = { globals = { "vim" } },
}
}
end
nvim_lsp[server_name].setup(opts)
end })
をした
init.vim→init.luaにするとき
↑これめちゃ便利
vim.cmd.colorscheme("edge")
vim.cmd.highlight({ "DduPreview", "guifg=#d6deeb", "guibg=#38507a" })
vim.cmd.highlight({ "DduCursor", "guibg=#38507a" })
色設定周りはこんな感じにするとか書いてる
これでひとまずinit.lua化はできた
- init.vim(lua << EOFで少しづつlua化) + dein(toml)
- init.lua + dein(toml)
- init.lua + dein(toml内部の処理でlua_source等を多用)
- init.lua + lazy
あとはtoml内部のhook_add→lua_addみたくしてく
ddc・ddu周りをlua化するのが現状一番のお荷物かなぁ
これを気にnvim-cmpとかも触ってみるのありかもしれん(こっちはlazyに移すときでいかな)
deinのtomlをlua化していくスレ
copilotのキーマップをlua化させる際にハマりまくった
↑
これ参考にして助かった、ありがたや
keymapのキーもところどころ参考になりそう
ここで一旦dein.tomlだけをlua化させた
あとは面倒なddc・dduのlua化
いったんこれでjsonで設定してた箇所をlua化した
Luaっぽく†モジュール化†でもしてみたさあるが、現状あくまで、deinの上でlua化するので、今はしないでおく
Luaで-
がついた文字列をtableのkeyとしたい時は
{
["ai-review-request"] = {
defaultAction = "open"
},
}
みたく書くらしい
tabを>---
で表示させてるのもあって、コメントと繋がって見えて、見やすいかも
とりあえず
これでdduの一番面倒な箇所のlua化が終わった
あとはこれを参考にfiletypeごとのkeymapとか設定したり、ddcの設定とかをしよう
う~ん疲れた
これでdduの設定周りは全部luaにできた:tada-:
tomlでfiletype pluginの設定をluaにしたverの読み込み方法が分からんかった(lua_source
とかのddu-ff
版)ので、訳分からん設定になってる
まぁ、luaで書いてたら、lazyにした時コピペだけで終わりそうなんで、ヨシ
ここでskkeletonのautocmdをlua化する時に詰まったので載っけとこう
autocmd User skkeleton-enable-pre echo "enable pre"
をluaにすると
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "skkeleton-enable-pre",
callback = function()
vim.fn.echo("enable pre")
end
})
みたくなる
User
がイベント名として扱われて、skkeleton-enable-preがパターンとして認識されるっぽいのがツボ
nvim-lspソースでスニペットを登録する時はfunction
でくるんでおく
引数もこれで取れるみたい
いったんこれでdeinのlua化が全て終わったことにする
- init.vim(lua << EOFで少しづつlua化) + dein(toml)
- init.lua + dein(toml)
- init.lua + dein(toml内部の処理でlua_source等を多用)
- init.lua + lazy
あとはlua化したdeinからlazyへ移行するだけ!
設定を全部lua化(hook_→lua_)してるから、コピペをちまちまやるだけでlazyへ移行できるはず...
現状プラグインとかの整理はしてないけど、deinをlua化した時の現状の時間計測を載っけとく
チューニングとかしてないからめちゃ遅いけど、気にしない
こんな感じにdein or lazyのプラグインマネージャそのものをneovimに読み込ませる箇所を分離して、簡単に切り替えられるようにした
普段はdein側のコメントを外して、ちょっとづつ移行する事ができるようになったぜ
...dppはdeinのtomlがそのまま使えるかもしれないらしいから、tomlファイル自体はlazyに移行できてもそのままにしておこうかしら
dppに移行する時までにはluaのモジュールを利用した設定にも慣れてそうだからそっちのが良さそう