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駅伝はまだまだ参加者を募集中です!