Search 如何切换Vim';s搜索高亮显示可见性而不禁用它
我想要的是映射一个键,例如F4,这样按F4将切换搜索高光的可见性,并且启动新的搜索将启用可见性,无论当前可见性如何 我所尝试的:Search 如何切换Vim';s搜索高亮显示可见性而不禁用它,search,vim,highlighting,highlight,Search,Vim,Highlighting,Highlight,我想要的是映射一个键,例如F4,这样按F4将切换搜索高光的可见性,并且启动新的搜索将启用可见性,无论当前可见性如何 我所尝试的: 将F4映射到:nohlsearch暂时禁用高亮显示可见性,而不关闭hlsearch设置,但不会再次切换可见性 将F4映射到:设置hlsearch确实会打开/关闭,但我不想关闭hlsearch设置,只想关闭可见性设置。如果hlsearch处于关闭状态,则不会自动返回新的搜索 似乎没有相反形式的:nohlsearch,命令本身在从函数调用时出现问题 我发现了类似的问题,但
:nohlsearch
暂时禁用高亮显示可见性,而不关闭hlsearch
设置,但不会再次切换可见性:设置hlsearch
确实会打开/关闭,但我不想关闭hlsearch
设置,只想关闭可见性设置。如果hlsearch
处于关闭状态,则不会自动返回新的搜索:nohlsearch
,命令本身在从函数调用时出现问题
我发现了类似的问题,但它们并没有提供答案
更新:第一条评论完全符合我的要求,转载如下:
let hlstate=0
nnoremap <F4> :if (hlstate == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=1-hlstate<cr>
让hlstate=0
nnoremap:if(hlstate==0)\\ nohlsearch\\ else\\设置hlsearch\\ endif\\让hlstate=1-hlstate
(注意:对于任何使用此功能的人来说——将地图塞进一行而不是使用函数是必要的,因为你无法从函数内部改变高亮显示。)
功能稍有不同的相关问题:Hmm,
:set-hlsearch
是否与:nohlsearch
相反
第一个选项打开“匹配突出显示”,第二个选项暂时关闭“匹配突出显示”
我不明白你所说的“我不想切换‘hlsearch’设置本身,只想切换可见性设置”是什么意思。::set hlsearch
及其挂件只处理搜索匹配的可见性(“突出显示”),其他什么都不做
如果您想在每次搜索时突出显示匹配项,只需添加:将hlsearch
设置为~/.vimrc
如果您想在搜索后关闭高亮显示功能,只需将F4
映射到:nohlsearch
,高亮显示将在下次搜索时返回。好的,尝试以下操作:
:map <F12> :set nohls<CR>:let @/ = ""<CR>:set hls<CR>
:map:set nohls:let@/=“”:set hls
然后,如果您点击F12,它将打开higlighting,然后将最后一个搜索字符串设置为空字符串(即:清除),并重新打开高亮显示
或者,如果要保存搜索字符串,则可以执行以下操作:
:map <F12> :set nohls<CR>:let @s = @/<CR>:let @/ = ""<CR>:set hls<CR>
:map <SHIFT><F12> :let @/=@s<CR>
:map:set-nohls:let@s=@/:let@/=“”:set-hls
:map:let@/=@s
现在,按下SHIFTF12键后,原始搜索字符串将返回并高亮显示
如果您仍然不满意,您仍然可以这样做:
:map <F12> :highlight Search term=None ctermfg=None ctermbg=None guifg=None guibg=None<CR>
:map <SHIFT><F12> :highlight Search term=OV1 ctermfg=OV2 ctermbg=OV3 guifg=OV4 guibg=OV5<CR>
:map:highlight Search term=None charactermfg=None charactermbg=None guifg=None guibg=None guibg=None
:映射:突出显示搜索项=OV1 ctermfg=OV2 ctermbg=OV3 guifg=OV4 guibg=OV5
其中OVx
是原始值,您可以在发出:突出显示搜索时将其记录下来。通过这种方式,它可以先关闭,然后再打开,但需要两个键盘快捷键。如果您希望它与一个,您应该为切换它的函数创建一个函数,然后为该函数创建一个映射
我想要的是映射一个键,例如F4,这样按F4将
切换搜索高光的可见性,以便启动新的
无论当前可见性如何,搜索都会启用可见性
刚刚尝试了这个,似乎做到了:
" switch higlight no matter the previous state
nmap <F4> :set hls! <cr>
" hit '/' highlights then enter search mode
nnoremap / :set hlsearch<cr>/
“无论前一种状态如何,都要打开HIGHLIGHT
nmap:设置hls!
“点击“/”突出显示,然后进入搜索模式
nnoremap/:设置hlsearch/
“按ctrl+c组合键切换高亮显示。
设hlstate=0
nnoremap:if(hlstate%2==0)\\ nohlsearch\\ else\\设置hlsearch\\ endif\\让hlstate=hlstate+1
现在只需按ctrl+c切换高光。唯一的怪癖是,搜索后必须按两次以关闭高光,因为搜索不会增加计数器。我使用的是trusktr的这个稍微改进的版本。请注意,trusktr示例中使用的ctrl+c在默认情况下已映射为转义,这非常方便
" Toggle highlight search
let hlstate=0
nnomap <Leader>b :if (hlstate%2 == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=hlstate+1<CR>:echo "toggled visibility for hlsearch"<CR>
inomap <Leader>b <ESC>:if (hlstate%2 == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=hlstate+1<CR>:echo "toggled visibility for hlsearch"<CR>a
“切换突出显示搜索
设hlstate=0
nnomap b:if(hlstate%2==0)\\ nohlsearch\\ else\\设置hlsearch\\ endif\\让hlstate=hlstate+1:echo“切换hlsearch的可见性”
inomap b:if(hlstate%2==0)\\124; nohlsearch\\124else\\124; set-hlsearch\\ endif\\让hlstate=hlstate+1:echo“切换了hlsearch的可见性”a
从中,我们可以映射一个键来切换高亮显示状态。与trusktr的答案不同,这里我们使用一个变量来存储状态
“如果希望能够快速启用/禁用高亮显示,可以映射一个键以切换hlsearch选项:”
“按F4键打开/关闭高亮显示,并显示当前值。
:noremap:set hlsearch!hlsearch?
或者,按return暂时退出突出显示的搜索:
:nnoremap:nohlsearch
其他答案需要切换突出显示搜索,这不太好
实际上你只需要
let @/ = ''
我编写了一个小函数来实现这个特性,并突出显示当前单词(就像*星键),但不跳转到下一个匹配的单词,也不触摸跳转列表
function! HLtoggle()
if (@/ == '')
let @/ = expand("<cword>")
else
let @/ = ''
endif
endfunc
function!HLtoggle()
如果(@/='')
让@/=展开(“”)
其他的
让@/='
恩迪夫
endfunc
这很简单,但我在谷歌上找不到
享受vim的乐趣!:)注意,最近的vim(7.4.79)提供了v:hlsearch
变量。这意味着您可以改进映射到:
:nnoremap <silent><expr> <Leader>h (&hls && v:hlsearch ? ':nohls' : ':set hls')."\n"
:nnoremap h(&hls&&v:hlsearch?':nohls':':set hls')。“\n”
您可以使用进行切换:设置invhlsearch
为了实现这一点,我在my.vimrc中添加了这一简单的行:
nmap <LEADER>h /xxxxx<CR>
nmap h/xxxxx
我使用以下方法:
augroup onsearch
autocmd!
autocmd VimEnter * set hlsearch
augroup END
nnoremap <leader>/ :set hlsearch!<CR>
augrouponsearch
:nnoremap <silent><expr> <Leader>h (&hls && v:hlsearch ? ':nohls' : ':set hls')."\n"
nmap <LEADER>h /xxxxx<CR>
augroup onsearch
autocmd!
autocmd VimEnter * set hlsearch
augroup END
nnoremap <leader>/ :set hlsearch!<CR>