NeovimのコマンドラインTips `:lua print()`は使うな

Neovimのコマンドラインで知っていると便利なことを紹介します。今回はLuaとヘルプ関連です。

:lua print():lua vim.print()を使っている人はぜひ読んでください。

Luaの実行結果の表示

:lua 〇〇でLuaの処理を実行できます。結果を表示するためにprint()を使っている人もいるでしょう。

:lua print('hello ' .. 1 + 1)

単純なテキストならこれでいいですが、次のようにテーブルを表示したい場合は不便です。

:lua print(vim.api.nvim_get_hl(0, { name = 'Normal' }))

メモリアドレスが表示されてしまいます。

出力
table: 0x7f4a53baef88

vim.print()とは

そこで登場するのがvim.print()です。

vim.print()は引数として渡した内容を読みやすく整形してから表示してくれます。

:lua vim.print(vim.api.nvim_get_hl(0, { name = 'Normal' }))
出力
{
bg = 1385768,
fg = 15133418
}

でも入力が面倒なあなたへ

:lua vim.print(expr)ってタイプ数多くて面倒じゃないですか?

実は:lua=exprでも同じことができます。

:lua=vim.api.nvim_get_hl(0, { name = 'Normal' })

もっとタイプ数を減らせます。

:=vim.api.nvim_get_hl(0, { name = 'Normal' })

つまり:lua vim.print(expr):=expr省略して書けるのです。

:=exprであれば括弧で囲う必要も無いので楽です。

じゃあvim.print()は不要か?というとそうではありません。設定を書くときのちょっとした確認でprintデバッグ的に使えます。

ちなみに:=exprではなく:=だけを実行すると最終行の行番号が表示されます。

ヘルプ

ヘルプ関連で筆者がやっている設定を紹介します。

ヘルプを左右分割で開く方法

ヘルプを開くと画面が上下に分割されます。筆者の画面の使い方としては横に余りがちなため、ヘルプを右に開きたいことが多いです。

そこで、次のように設定しています。

vim.cmd("cabbrev H belowright vertical help")

:cabbrevコマンドラインの短縮入力を設定するコマンドです。

:Hと入力すると、自動的にbelowright vertical helpへ展開されます。

ヘルプとは関係ないですが「画面分割時、新しいウィンドウがどこに開かれるか」も設定してます。

vim.opt.splitbelow = true
vim.opt.splitright = true

noice.nvimでの表示を整える

noice.nvimを使っている場合、併せて次の設定もやっておくと便利です。

require("noice").setup({
cmdline = {
format = {
myhelp = {
pattern = "^:%s*belowright vertical help%s+",
icon = "",
title = "help (open to the right)",
},
},
},
})

belowright vertical helpの部分が隠れてくれます。

Snacks.pickerを使った効率的なヘルプ検索

snacks.nvimを入れてからは、コマンドよりもSnacks.pickerを使ってヘルプを開くことが多くなりました。
Snacks.pickerを知らない方は別の記事爆速Fuzzy FinderプラグインSnacks.pickerの使い方をご覧ください。

以下、:lua Snacks.picker.help()でのメリットを挙げておきます。

  • あいまい検索が可能
  • プレビュー付き
  • まだ読み込んでいないプラグインの検索もできる
  • ヘルプを開く際のレイアウトが自由

ヘルプを垂直分割で開きたいならedit_vsplit、水平分割で開きたいならconfirmedit_splitを設定したキーバインドを使えばいいです。

筆者はデフォルトを垂直分割にしたいので次のように設定しています。

function()
picker.help({
win = { input = { keys = {
["<CR>"] = { "edit_vsplit", mode = { "i", "n" } },
} } },
})
end,

以上、コマンドラインのTipsでした。:=exprを知る前は次のように書いてました。

vim.cmd("cabbrev L lua vim.print( )<Left><Left>")

:=exprの方がタイプ数も少ないし、見た目もスッキリして実行できるので好きです。