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 = truevim.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
、水平分割で開きたいならconfirm
かedit_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
の方がタイプ数も少ないし、見た目もスッキリして実行できるので好きです。