Neovimの設定ファイルをinit.luaに書き換えた話。ついでにNeovimのプラグイン管理もdein.vimからLua製のPacker.nvimに移行。
ディレクトリ戦略
init.vim時代は1つのファイルに全ての設定を書いてたけど、せっかくLuaに移行するのでモジュール分割しました。
$HOME/.config/nvim/
init.lua ... init.vimを置き換え
lua/ ... 設定をモジュール分割して管理
commons.lua ... 共通設定
plugins.lua ... プラグイン管理
plugin_telescopete.lua ... プラグイン個別設定
...
Packer.nvim
Packer.nvimはgit cloneするだけで導入できるのでdein.vimと比べて比較的楽。
$ git clone --depth 1 https://github.com/wbthomason/packer.nvim\
~/.local/share/nvim/site/pack/packer/start/packer.nvim
プラグイン管理はこんな感じ。導入したいプラグインを定義して :PackerInstall するだけで外部プラグインをcloneしてくれます。
vim.cmd [[packadd packer.nvim]]
return require('packer').startup(function(use)
-- Packer can manage itself
use 'wbthomason/packer.nvim'
use 'nvim-lua/plenary.nvim'
use 'nvim-telescope/telescope.nvim'
use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make' }
end)
init.lua
init.luaは基本的に分割したLuaモジュールのインポートをするだけに。 共通設定はcommons.luaに記述してプラグイン固有の設定はモジュール分割しました。
require('commons')
require('plugins')
require('plugin_telescope')
require('plugin_vim_table_mode')
require('plugin_mason')
-- require('plugin_nvimtreesitter')
require('plugin_symbols_outline')
require('plugin_nvim_tree')
require('plugin_aerial')
require('plugin_venn')
Vim script API
Luaに移行してVim scriptの記述をLuaにどう変換するか少し調べる必要があったので忘備録的に。
キーマップ
ノーマルモードのキーマップ作成。タブ移動をQとSHIFT+Tabに設定する例。
vim.keymap.set('n', 'Q', '<cmd>tabp<CR>', {noremap = true})
vim.keymap.set('n', '<S-Tab>', '<cmd>tabn<CR>', {noremap = true})
グローバル変数
Vim scriptでlet g:python3_host_prog = ...
と宣言していたものはLua流だと以下。
vim.g 経由でvimのグローバル変数を操作する。
vim.g.python3_host_prog = vim.env.PYENV_ROOT .. '/versions/neovim/bin/python'
環境変数
環境変数はvim.envにエクスポートされている。
vim.g.python3_host_prog = vim.env.PYENV_ROOT .. '/versions/neovim/bin/python'
任意のVim script実行
Vim scriptをそのまま解釈させる方法。vim.cmd() を使う。 Vim scriptで独自の設定を書いている場合は重宝しそうです。
vim.cmd([[
if &compatible
set nocompatible
endif
]])
最終成果物
Githubにアップしました。 仕事でもプライベートでも同じ環境に統一します。