Neovimで検索文字の入力中にvery magicをトグルする
この記事はVim駅伝の2025年7月28日の記事です。
前回(2025年7月25日)AmaさんのPartedit で Neovim LSP が起動しないでした。
筆者は今まで、/
を/\v
として登録していました。/
は検索、\v
はvery magicです(:help /magic
)。ただvery magicをトグルできたほうがいろいろと都合がよかったため、それ用のキーマップを設定しました。
どういう動作?
設定したキーを押すと\v
の有無がトグルできます。
very magicって何がうれしいの?
?
や()
などの正規表現がエスケープなしで書けます。
キーマップ
実装は単純で、検索文字の最初に\v
があるなら\v
を削除、ないなら付与しているだけです。
vim.keymap.set("c", "<C-v>", function() local cmdtype = vim.fn.getcmdtype() if cmdtype == "/" or cmdtype == "?" then local cmdline = vim.fn.getcmdline() local pos = vim.fn.getcmdpos()
if cmdline:sub(1, 2) == "\\v" then -- \vを削除 vim.fn.setcmdline(cmdline:sub(3)) vim.fn.setcmdpos(pos - 2) else -- \vを追加 vim.fn.setcmdline("\\v" .. cmdline) vim.fn.setcmdpos(pos + 2) end return "" end -- 検索モード以外では通常の<C-v>の動作 return "<C-v>"end, { expr = true, desc = "検索モードでvery magicをトグル" })
なぜ生み出されたのか
筆者はblink.cmpを使っているのですが、blink.cmpだと\v
がある時にv
の部分が消えてしまいます。Issueが挙がってはいるものの、複雑なようでまだ未解決です。
(この問題を解決するのが一番ですが、)とりあえず今回は応急処置としてこのキーマップを作ったのでした。
以上、自作キーマップの紹介でした。Vim駅伝はまだまだ参加者を募集中です!