はじめに
今回はinit.luaの書き方について考えて行こうと思います。とりあえず、基礎的な書き方から始めていきます。
あわせて、NeoVimの設定ファイルを書こうと思った際に迷う「init.luaでlua言語を使用するか、init.vimでvimスクリプトを使用するか」についても、この記事でまとめて考えてみます。というか私自身が設定ファイルを書くたびに迷っています。
init.luaかinit.vimか
NeoVimの設定ファイルは、Vimスクリプトで書く「init.vim」か、Luaで書く「init.lua」のどちらかです。公式ドキュメントにもある通り、どちらか一方しか使えないので、両方置くとエラー(E5422)になります。
| init.vim | init.lua | |
|---|---|---|
| 言語 | Vimスクリプト | Lua |
| 置き場所(Linux/macOS) | ~/.config/nvim/init.vim | ~/.config/nvim/init.lua |
| Vimの設定の流用 | .vimrcの内容をほぼそのまま使える | Luaに書き直す必要がある |
| ファイル分割 | source / runtime で読み込む | require で lua/ 以下のモジュールを読み込む |
| Vimスクリプトとの併用 | – | vim.cmd() でVimスクリプトも書ける |
どちらを選ぶ?
Luaのほうが読み込みが速いと言われることが多く、私はinit.lua一択だと思っています。
ただ、もともとVimを使用していて、vimスクリプトに慣れている人は、一旦そのままinit.vimを使用し、段階的に移行していくほうが良さそうです。
特段NeoVimから入ってきた人たちは、init.luaで問題ないと思います。最初は設定ファイルを小さくしようと思ってやっていてもだんだん大きくなりますし。
ディレクトリ構成について
NeoVimの設定をinit.luaで設定を書く場合、ファイルを分割することができます。init.lua一つで管理することもできますが、記載する量が増えてくると管理が大変になるので、ファイルを分割したほうが後々楽になると思います。ファイルを分割できるので、ディレクトリ構成を考える必要が出てきます。
まず、最初に作成するinit.luaのディレクトリはLinuxだと次のパスに作成します。
【~/.config/nvim/init.lua】
そして、ディレクトリを分割する場合、下記のパスに作成します。
【~/.config/nvim/lua/ファイルやディレクトリ】
まだ作成途中ですが、私は現状下記のようなディレクトリ構成で作成しています。今後増えていく予定なので、参考までにしといてください。
下の構成は、最初にvim-plugを使っていたころのものです。
nvim
├── init.lua
└── lua
├── setting
│ ├── main_keymap.lua
│ └── main_setting.lua
└── vim-plug
└── vim_plug_setting.lua
設定ファイルの記載方法
init.luaには基本的に他のファイルを読み込む設定のみ書いています。設定を読み込みたくなくなったら、コメントアウトするだけで読み込まなくなるので便利です。
luaディレクトリの下に更にディレクトリを作っているので読み込み方は下記の様になります。
ちなみにコメントはハイフン2つ「–」で書きます。
-- main_setting.luaを読み込む。(.luaは省略する)
require("setting/main_setting")requireはlua/ディレクトリからの相対パスで指定します。「setting.main_setting」のようにドット区切りで書くこともできます。
オプションの設定
main_setting.luaには基本的なオプションを書いていきます。オプションの記載方法は下記の様になります。
-- 行番号を表示
vim.opt.number = trueただし、vim.optを毎回書くのが面倒なので、下記の様にテーブルにしてループで回すと管理が楽です。
local options = {
number = true, -- 行番号を表示
wrap = false, -- 画面の右端で改行しない
expandtab = true, -- タブをスペースに置き換える
shiftwidth = 2, -- インデントの幅
tabstop = 2, -- タブの表示幅
ignorecase = true, -- 検索で大文字小文字を区別しない
smartcase = true, -- 大文字を含む場合は区別する
clipboard = "unnamedplus", -- OSのクリップボードを使う
}
for k, v in pairs(options) do
vim.opt[k] = v
endキーマップの設定
main_keymap.luaにはキーマップを書きます。Luaではvim.keymap.setを使います。
-- リーダーキーをスペースにする
vim.g.mapleader = " "
-- ノーマルモードで <Space>w で保存
vim.keymap.set("n", "<leader>w", "<cmd>w<CR>")
-- インサートモードで jj を Esc の代わりにする
vim.keymap.set("i", "jj", "<Esc>")Vimスクリプトを混ぜたいとき
init.luaにしても、Vimスクリプトで書きたい設定がある場合はvim.cmdで書けます。init.vimから段階的に移行するときに便利です。
vim.cmd("colorscheme habamax")プラグイン管理
プラグインマネージャーはいくつか選択肢があります。私は最初vim-plugを使っていましたが、今から始めるなら、NeoVim向けのlazy.nvimか、標準で入っているvim.packがおすすめです。
- vim-plug:Vimでも使える定番のプラグインマネージャー。NeoVimでも使えます。
- lazy.nvim:Luaで書かれたNeoVim向けのプラグインマネージャー。遅延読み込みが得意です。
- vim.pack:NeoVim 0.12から標準で入ったプラグインマネージャー。追加のインストールが不要です。
例えば、vim.packの場合は次のように書くだけでプラグインがインストールされます(リポジトリは例です)。
vim.pack.add({
'https://github.com/user/plugin1',
})プラグインの設定はlua/以下に分けておくと、init.luaからrequireで読み込むだけになるので管理が楽です。
おわりに
まだ全然設定ファイルを作れていないので、作り終わったら設定ファイルの内容を記載して説明していこうと思います。
NeoVimの基本操作はNeoVim入門者向けガイド、VimとNeoVimの違いはVim vs Neovimの記事でまとめていますので、あわせて読んでみてください。

コメント