LoginSignup
7
4

More than 1 year has passed since last update.

init.luaでNeovimの設定を書いてみた

Last updated at Posted at 2022-02-04

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を最初に宣言しています。

init.lua
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にした恩恵はあまり感じてない(気持ち起動が速くなった気がする?くらい)のですがやっぱり新しいことをするのは新鮮で楽しいですね。

参考

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4