最初VimからNeovimに移行した際に、.vimrc
をinit.vim
にコピーして利用していたがinit.lua
のほうが柔軟な書き方ができるということなので、
設定ファイルの刷新も兼ねてinit.lua
で設定ファイルを記載する。
新規作成に近い形で実施していく。
ヘルプ
まずはヘルプの引き方。
Luaで設定ファイルを書くことに関するヘルプは以下の通り。
:help lua-guide
設定ファイル
Nvim supports using init.vim or init.lua as the configuration file, but
:help lua-guide
not both at the same time
設定ファイルだが、init.vim
とinit.lua
は共存できないため、init.vim
を一旦退避させてinit.lua
を新規作成する。
$ mv ~/.config/nvim/init.vim ~/.config/nvim/_init.vim
$ touch ~/.config/nvim/init.lua
luaの実行方法
:lua
コマンドを利用することで、任意のluaコードを実行することができる。
init.lua
に書く際には、:lua
を外した状態で書けば良い。
:lua print("Hello.")
これで簡単にluaの実行を検証することができる。
luaでvimのコマンドを実行する方法
書かれているヘルプは以下の通り。
:help lua-guide-vim-commands
ヘルプを読むと、大きく分けて3通りの実行方法があることがわかる。
① vim.cmd()をそのまま利用する
このコマンドは、luaコードの中で任意のvimコマンドを実行できる書き方。
colorscheme habamax
.vimrc
などに↑のように書かれていた場合
以下のコマンドを実行すると、カラースキームが変更されることが分かる。
:lua vim.cmd("colorscheme habamax")
ただし、この実行方法は特別な文字についてはバックスラッシュによるエスケープが必要な点に注意。
② リテラル文字列を使う
エスケープが必要なコマンドで、エスケープなしで書きたい場合や
複数行にまたいで書きたい場合は、[[]]
を使ったリテラル文字列の書き方が良い。
vim.cmd([[%s/\Vfoo/bar/g]])
vim.cmd([[
highlight Error guibg=red
highlight link Warning Error
]])
③ vimコマンドが用意されている場合は、関数のように使える
先程のカラースキームを変更した書き方は、以下のように書くこともできる。
vim.cmd.colorscheme("habamax")
設定値の変え方
ウィンドウの左側に行数を表示する以下のvimコマンド
set number
これは、luaで書く場合はopt
を利用することで以下のように記述できる。
vim.otp.number = true
カンマ区切りで設定する系
コード中にある、タブやスペースを可視化する設定をVimで行う場合、以下のように設定する。
" スペースは「_」で表示、タブは「>~」で表示
set listchars=space:_,tab:>~
これをluaで書く場合は以下のようになる。
vim.opt.listchars = { space = '_', tab = '>~' }
変数の設定
グローバル変数などを設定している場合は、以下のように変換する
vimscriptの書き方
" プレビューウィンドウを垂直分割で表示する
let g:netrw_preview=1
luaの書き方
vim.g.netrw_preview = 1
まとめ
これらのvimscript→luaの置換方法がわかっていれば、シンプルな.vimrc
であれば簡単に移行することができる。
- コマンド実行は「
vim.cmd("vimコマンド")
」 or 「vim.cmd([[vimコマンド]])
」 - オプション系の設定は「
vim.opt.オプション名 = 値
」
プラグインなしで、最小限で移行した結果、init.lua
はこの様になった。
vim.opt.number = true -- 行番号を表示
vim.opt.title = true -- ファイル名を表示
vim.opt.smartcase = true -- 小文字で検索時、大文字小文字を無視する
vim.opt.wrap = false -- 行の折返しを無効にする
-- 括弧
vim.opt.showmatch = true -- 括弧入力時の対応する括弧を表示
vim.opt.matchtime = 1 -- 対応括弧に飛ぶ時間を0.1×1秒に設定
-- タブ、インデント
vim.opt.tabstop = 2 -- タブの文字幅
vim.opt.shiftwidth = 2 -- 自動インデントの幅
vim.opt.smartindent = true -- 一つ前の行に基づくインデントを有効
vim.opt.expandtab = true -- タブ入力を空白にする
vim.opt.list = true -- listオプションを有効にする
vim.opt.listchars = { tab = '»-' , trail = '-' } -- タブと行末空白を可視化する
-- ハイライト
vim.opt.hlsearch = true -- 検索ワードのハイライトを行う
-- netrw
vim.g.netrw_preview = 1 -- プレビューウィンドウを垂直分割で表示する