【Neovim】検索ハイライトを Esc でサクッと消す ( nohlsearch ) 【小ネタ】

2025-10-31T12:08:33+09:00 | 1分で読めます | 更新日時 2025-10-31T12:08:37+09:00

@

cover

結論

vim.keymap.set("n", "<ESC>", function()
  if vim.v.hlsearch == 1 and vim.fn.searchcount().total > 0 then
    return "<CMD>nohlsearch<CR>"
  else
    return "<ESC>"
  end
end, { expr = true, desc = "Clear search highlight" })

背景

もともとは <Esc><Esc> で消すキーマップを設定していました。

こんな感じ。

vim.api.nvim_create_autocmd("FileType", {
  pattern = "*",
  callback = function(event)
    if event.file ~= "TelescopePrompt" and event.file ~= "DressingInput" then
      vim.api.nvim_buf_set_keymap(event.buf, "n", "<ESC><ESC>", "<CMD>nohlsearch<CR>", {})
    end
  end,
})

単に <Esc><Esc> のマッピングを登録すると、<Esc> の入力後に待機が発生してしまいます。 そのため、一部のファイルタイプではマッピングを登録しないようにしていました。

これでもなんとかなっていたのですが、たまにストレスを感じることがあり、見直して見ることにしました。

結果は上で示したとおりですが、地味ですが良い改善ができたと思います。

ちょっと解説

  • vim.v.hlsearch とは

    検索による強調表示がオンになっているかどうかを示す変数。

  • vim.fn.searchcount() とは

    最後の検索数の取得もしくは更新をする。

    ハイライトの有無に限らず、現在のバッファにおける最後の検索結果の数を取得できます。


上記の2つを組み合わせることで、ハイライトがある場合にのみ <Esc> でハイライトを消すようにできます。

それ以外の場合は、通常の <Esc> として動作するため <Esc> のキーバインドがあるプラグインとも競合しません。

快適!!

© 2024 - 2025 nabekou29 Blog

🌱 Powered by Hugo with theme Dream.

About Me

ソフトウェアエンジニア5年目。 主に Web のフロントエンドの開発をしています。

個人では Neovim の拡張や Chrome の拡張を作ったりして遊んでます。 一時期電子工作にもハマってましたが最近はあまりできてない。