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
相关产品推荐
相关产品推荐

