You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vim配置需求:实现带高亮和无高亮的两种搜索映射

解决方案

要实现g/回车后保留高亮、/回车后取消高亮,同时保证输入过程中始终高亮的需求,你可以通过标记搜索触发方式的思路修改现有配置,具体如下:

1. 添加全局搜索的状态标记映射

先为g/和g?设置映射,按下时标记当前为全局搜索:

-- 标记g/和g?的全局搜索状态
vim.keymap.set('n', 'g/', function()
  vim.g.global_search_active = true
  return '/'
end, { expr = true, remap = true })

vim.keymap.set('n', 'g?', function()
  vim.g.global_search_active = true
  return '?'
end, { expr = true, remap = true })

2. 修改自动命令的回调逻辑

将原来CmdlineLeave事件的固定命令替换为条件判断的回调,根据标记决定是否关闭高亮:

-- 搜索高亮自动命令组
vim.api.nvim_create_augroup("vimrc_incsearch_highlight", { clear = true })

-- 进入搜索命令行时强制开启高亮
vim.api.nvim_create_autocmd("CmdlineEnter", {
  pattern = { "/", "\\?" },
  command = "set hlsearch",
  group = "vimrc_incsearch_highlight",
})

-- 离开搜索命令行时,根据搜索类型决定是否关闭高亮
vim.api.nvim_create_autocmd("CmdlineLeave", {
  pattern = { "/", "\\?" },
  callback = function()
    -- 普通搜索(/或?)关闭高亮,全局搜索(g/或g?)保留高亮
    if not vim.g.global_search_active then
      vim.cmd("set nohlsearch")
    else
      -- 重置标记,避免影响下一次搜索
      vim.g.global_search_active = false
    end
  end,
  group = "vimrc_incsearch_highlight",
})

逻辑说明

  • 按下g/或g?时,会先设置全局标记为true,再进入搜索模式,输入过程中保持高亮;
  • 按下普通/或?时,标记保持默认的false;
  • 离开搜索命令行时,若为普通搜索则取消高亮,若为全局搜索则保留高亮并重置标记。

这套配置既不破坏你原有的普通搜索行为,又实现了全局搜索保留高亮的需求,同时满足输入过程中始终高亮的核心要求。

内容的提问来源于stack exchange,提问作者subtleseeker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:22:47