NeoVimのinit.luaの書き方について

NeoVimのinit.luaの書き方 アイキャッチ
目次

はじめに

今回はinit.luaの書き方について考えて行こうと思います。とりあえず、基礎的な書き方から始めていきます。
あわせて、NeoVimの設定ファイルを書こうと思った際に迷う「init.luaでlua言語を使用するか、init.vimでvimスクリプトを使用するか」についても、この記事でまとめて考えてみます。というか私自身が設定ファイルを書くたびに迷っています。

init.luaかinit.vimか

NeoVimの設定ファイルは、Vimスクリプトで書く「init.vim」か、Luaで書く「init.lua」のどちらかです。公式ドキュメントにもある通り、どちらか一方しか使えないので、両方置くとエラー(E5422)になります。

init.viminit.lua
言語VimスクリプトLua
置き場所(Linux/macOS)~/.config/nvim/init.vim~/.config/nvim/init.lua
Vimの設定の流用.vimrcの内容をほぼそのまま使えるLuaに書き直す必要がある
ファイル分割source / runtime で読み込むrequire で lua/ 以下のモジュールを読み込む
Vimスクリプトとの併用–vim.cmd() でVimスクリプトも書ける
init.vimとinit.luaの比較

どちらを選ぶ?

Luaのほうが読み込みが速いと言われることが多く、私はinit.lua一択だと思っています。

ただ、もともとVimを使用していて、vimスクリプトに慣れている人は、一旦そのままinit.vimを使用し、段階的に移行していくほうが良さそうです。
特段NeoVimから入ってきた人たちは、init.luaで問題ないと思います。最初は設定ファイルを小さくしようと思ってやっていてもだんだん大きくなりますし。

迷ったら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
~/.config/nvim のディレクトリ構成:init.luaからlua/setting/main_setting.lua、main_keymap.lua、プラグイン設定をrequireで読み込む関係図

設定ファイルの記載方法

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の記事でまとめていますので、あわせて読んでみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

以前はWindowsサーバーの構築・運用が中心で、いまは社内エンジニアとしてSREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次