Vim清除上次搜索的高亮显示

2340
在 Vim 中进行搜索后,所有出现的内容都会被高亮显示。如何关闭这个功能?我现在搜索一些无意义的内容以使其取消高亮显示。
是否有一种方法可以暂时禁用高亮显示,并在需要时重新启用它?

7
如果已经高亮显示,:set invhlsearch 命令将取消高亮显示;如果没有高亮显示,则会开启高亮显示。你可以将其映射为 Shift-H。 - puffadder
1
@StewartJohnson 在我的 .vimrc 文件中这样做似乎会干扰/破坏 :set mouse=a。你有什么想法吗?这个错误只在 iTerm2 中发生。 - Charlie Parker
多年来,我打了很多无意义的东西来清除那个高亮(对于多GB文本文件来说真的非常低效)。这种无意义的搜索实际上是第二次搜索,浪费了计算时间。好问题! - Megatron
24
@StewartJohnson小心!你的最受欢迎的评论与映射会导致错误和意外行为,就像下面评论中对https://dev59.com/3HRB5IYBdhLWcg3wV116#1037182所述的那样。 - skywinder
@StewartJohnson,不知何故这个“nnoremap”会破坏鼠标滚动(iTerm,vim8)。但如果手动输入“:noh”,它就能正常工作。 - vigilancer
12
@StewartJohnson 建议使用 nnoremap <esc> :noh<return><esc> 在 GUI Vim 中能够很好地解决问题,但是在终端中运行 Vim 时,会导致箭头键和其他 ESC 编码键出现问题。如果不在 ~/.vimrc 中加入 if has('gui_running') ... end 的包装,请勿将其放入其中。 - jbyler
33个回答

1
你可以在你的 .vimrc 文件中添加映射,如下所示:

nmap <C-N> :nohlsearch

然后你可以随时按 Ctrl+N 来清除高亮文本。

请修改您的答案,以确保它比已经存在于此问题中的其他答案更好。 - hongsy

1
我把这段代码添加到了我的vimrc文件中。 command! H let @/="" 当你进行搜索并想要清除搜索结果的高亮时,只需执行:H命令。

0
如果你正在使用 Neovim,这是一个我有的有用的函数,它可以在按下非搜索/滚动键时切换 hlsearch。
-- Clear search highlight
vim.on_key(
    function(char)
        if vim.fn.mode() == "n" then
            -- ignore these literal keys
            local new_hlsearch = vim.tbl_contains({
                "", "", "", "", -- literal <C-u>, <C-d>, <C-f>, <C-b> (e.g. ctrl+v, ctrl+u)
                "H", "L",
                "z", "v", "t", "m", "b",
                "n", "N",
                "*", "?", "/",
                "<ScrollWheelUp>", "<ScrollWheelDown>",
            }, vim.fn.keytrans(char))

            if vim.opt.hlsearch:get() ~= new_hlsearch then
                vim.opt.hlsearch = new_hlsearch
            end
        end
    end,
    vim.api.nvim_create_namespace "auto_hlsearch"
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接