はじめに
普段neovimを使っていて、たまにPluginの見直し等をしているのですが…。
組み込まれた luaの状態を確認したり、Plugin関連のコードを少し試してみたりすることがあります。
このときに :lua ...
として luaのコードを実行するのは、入力が面倒だったり、結果が見にくい等で使いにくく、いろいろ試すのが苦痛でした。
楽な方法はないものかと、探してみたところ nvim-luadev という pluginを見つけました。
その設定等についての記事になります。
Plug-inの導入
私は Packer を使っていますので、Packerを使ってInstallします。
-- install a plugin for nvim embbedded lua
use { "bfredl/nvim-luadev" }
設定ファイルに上を追加後に nvim -c PackerInstall
して完了です。
キーバインドする
Plugin読み込み後、ここでは適当に 以下のようにアサインしてみます1。
vim.keymap.set('n', '<Leader>l', '<Plug>(Luadev-RunLine)', {silent = true})
vim.keymap.set('n', '<Leader>r', '<Plug>(Luadev-Run)', {silent = true})
vim.keymap.set('v', '<Leader>r', '<Plug>(Luadev-Run)', {silent = true})
vim.keymap.set('n', '<Leader>e', '<Plug>(Luadev-RunWord)', {silent = true})
insert modeでの global変数補完は 私の環境ではうまく動かなかったので使っていません。
使い方
vimを起動したら :Luadev
として Scrachpadを開きます。
Luadevを通じた出力は、このBufferに書かれます。
適当なバッファに luaの環境で試してみたいコードを書きます。
print("Hello nvim-luadev.")
カーソルをこの行の上にのせて、<Leader>
(defaultは ¥・バックスラッシュ) に続けて l
を押す事で、この一行が実行されて結果がScratchpad側に出力されます。
複数行の実行
今度は複数行のLuaを実行してみます。
for k,v in pairs(vim) do
print(k)
end
適当なバッファで入力したら、Visualモードで実行したい範囲を選択します。
<Leader>
に続けて r
を押す事で、選択した範囲が実行されて結果がScratchpad側に出力されます。
Normal ModeにもBindしてあるので、Visual Modeでなくても、カーソルの下二行までを実行したい場合、最初の行にカーソルを置いて <Leader>r2j
としてもOKです。
global変数の参照
global変数を参照して表示したい場合は
vim.g.vsnip_snippet_dirs
変数の上にカーソルを置いて <Leader>e
とします。
Luadevのprintは、inspect.lua 使い、展開・整形して出力してくれます。このため、テーブルの中身も簡単に確認することができます。ただし、残念ながら、metatableで __indexに関数が設定されているような table (例えば vim.g)は展開されません。
Plugin等からScratchpadに書き込む
ここまでの例の様に interactive な呼出しは、print()
するだけで Scratchpadに書き込まれます。それ以外の場面で、例えば開発中のPluginのちょっとしたPrint debug等、Scratchpadに書き込みたい場合には、luadevのモジュール内の print()
を使う必要があります。
一行で書くなら
require'luadev'.print("Hi nvim-luadev")
何回か使うならこんなコードに。
local debug_print = require'luadev'.print
-- lua code... --
debug_print("Hi nvim-luadev")
おわりに
他にもっと良いやり方があるのかもしれませんが、これのおかげで設定ファイルの編集がめっちゃ楽になりました。
-
Plugin側で
<silent> <Plug>
と定義されているので、こちらでsilent = true
は不要? ↩