0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

neovimで :lua ... に疲れたときに使うプラグイン nvim-luadev

Last updated at Posted at 2024-02-11

はじめに

普段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側に出力されます。

image.png

複数行の実行

今度は複数行のLuaを実行してみます。

for k,v in pairs(vim) do
    print(k)
end

適当なバッファで入力したら、Visualモードで実行したい範囲を選択します。
<Leader>に続けて r を押す事で、選択した範囲が実行されて結果がScratchpad側に出力されます。

image.png

Normal ModeにもBindしてあるので、Visual Modeでなくても、カーソルの下二行までを実行したい場合、最初の行にカーソルを置いて <Leader>r2j としてもOKです。

global変数の参照

global変数を参照して表示したい場合は

vim.g.vsnip_snippet_dirs

変数の上にカーソルを置いて <Leader>e とします。

image.png

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")

おわりに

他にもっと良いやり方があるのかもしれませんが、これのおかげで設定ファイルの編集がめっちゃ楽になりました。

  1. Plugin側で <silent> <Plug>と定義されているので、こちらで silent = true は不要?

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?