init.lua?
久しぶりにNeovimを導入したら、Neovim 0.5からはinit.vimの代わりにinit.luaが使えるらしいと知りました。
ちなみに私の環境は以下の通り:
- Windows11
- Neovim 0.6.1(chocolatey経由でインストール)
利用条件は満たしてそうなので、使ってみることにしました。
ファイルの設置場所はinit.vimと同様。Linix/Unix等では~/.config/nvim/
、Windowsでは~\AppData\Local\nvim\
。
ちなみにinit.vimとinit.luaは共存できないので注意。
ちなみにGetting started using Lua in Neovimによくまとまってるので、まずはここを見るといいと思います。日本語版もあるし。
:set xxxx
とりあえずvim.opt.xxxx = true
とか書いておけば良さそう。
うまく動かなかったりよく分からないときはVimscriptやEXコマンドを実行できるvim.cmd()
を利用すると良さそう。
vim.o
とかvim.bo
とかあるみたいだけど正直よく分からなかったので使ってない。
これらには、Luaで設定するのに便利なより洗練されたラッパーとしてvim.optがあります。
(Getting started using Lua in Neovim(日本語版)より引用。)
ガイドにもこう書いてあるのでよく分からなければvim.opt
を使う、でもいいはず。
引っかかったところ
set noswapfile
の動作を期待してvim.opt.noswapfile = true
と書いたら次のようなエラーが出た。
E5113: Error while calling lua chunk: vim/_meta.lua:659: Not a valid option name: noswapfile
stack traceback:
[C]: in function 'assert'
vim/_meta.lua:659: in function 'make_option'
vim/_meta.lua:723: in function '__newindex'
vim.opt.swapfile = false
にしたらエラーが消えた。init.vimおよび.vimrcでset noXXXX
と記載するところはvim.opt.XXXX = false
にしないといけないらしい。ブーリアン値で設定するのだから当然といえば当然。
また、Luaの文法にのっとるので当然、set mouse=a
みたいなのはvim.opt.mouse = a
ではなくvim.opt.mouse = 'a'
としなくてはいけない。クオーテーションで囲み忘れるとエラーが吐くので注意。
init.lua晒し
最後に、今使っているinit.luaを晒します。設定事項はだいたい「init.vim」とか「.vimrc」とかでググって出てきたやつです。
mapの設定とかはしてません。ぜんぶinit.vimだとset
からはじめて書いてたやつです。
毎行vim.opt
を書くのは面倒なのでlocal opt = vim.opt
を最初に宣言しています。
local opt = vim.opt
-- マウス有効化
opt.mouse = 'a'
opt.title = true
-- 全角文字表示設定
opt.ambiwidth = 'double'
opt.swapfile = false
opt.backup = false
opt.hidden = true
opt.clipboard:append({unnamedplus = true})
opt.number = true
opt.list = true
opt.listchars = 'tab:>-', 'trail:*', 'nbsp:+'
opt.smartindent = true
opt.visualbell = true
opt.showmatch = true
opt.expandtab = true
opt.tabstop = 4
opt.shiftwidth = 4
opt.ignorecase = true
opt.smartcase = true
opt.wrapscan = true
opt.whichwrap = 'b', 's', 'h', 'l', '<', '>', '[', ']'
opt.backspace = 'start', 'eol', 'indent'
-- Windows環境なのでdosが最初
opt.fileformats = 'dos', 'unix', 'mac'
opt.helplang = 'ja', 'en'
opt.updatetime = 300
opt.showtabline = 2
Githubにも置いてます。↓の最初のコミットと上に貼ったコードは同一です。
追記(2022年2月17日)
上のinit.luaのopt.listchars = 'tab:>-', 'trail:*', 'nbsp:+'
という設定の仕方は誤りです。
opt.listchars = {tab = '>-', trail = '*', nbsp = '+'}
とするのが正しいやり方のようです。
上の誤った設定を書いても設定が反映されないだけでエラーは出てこなかったので気付きませんでした。申し訳ありません。
正しい書き方についてはneovimの公式ドキュメント(下記リンク)を見て知りました。Vimscriptの場合との比較つきで説明があるので非常にわかりやすいです。
(はじめにちゃんと読んでおくんだった……)
これから
そのうちプラグインとか導入していくと思うので、たぶんinit.luaを複数のファイルに分割していくことになると思います。
現状、Luaにした恩恵はあまり感じてない(気持ち起動が速くなった気がする?くらい)のですがやっぱり新しいことをするのは新鮮で楽しいですね。
参考