如何切换Vim的搜索突出显示可见性而不禁用它

Ein*_*Ein 20 vim search highlighting highlight

我想是绘制一个关键,例如F4,以便按F4将切换搜索亮点的知名度,让开始新的搜索能够知名度,无论现在的知名度.

我尝试过的:

  1. 映射可F4:nohlsearch不关闭hlsearch设置的情况下暂时禁用高亮显示,但不会再次切换可见性.
  2. 映射F4:set hlsearch!打开/关闭,但我不想切换hlsearch设置,只是切换可见性设置.如果hlsearch关闭则不会自动返回新搜索.

似乎没有相反的形式,:nohlsearch并且命令本身在从函数调用时存在问题.

我发现了类似的问题,但他们没有提供答案.

更新:
第一条评论提供了我要求的内容,转载如下:

let hlstate=0
nnoremap <F4> :if (hlstate == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=1-hlstate<cr>
Run Code Online (Sandbox Code Playgroud)

(对于任何使用此功能的人来说都是这样的 - 将地图填充到一行而不是使用功能是必要的,因为您无法对功能内部的突出显示进行更改.)

相关问题略有不同的功能:https: //stackoverflow.com/a/16750393/1176650

Chr*_*ndt 15

注意,最近的Vims(7.4.79)有v:hlsearch可用的变量.这意味着您可以改进映射到:

:nnoremap <silent><expr> <Leader>h (&hls && v:hlsearch ? ':nohls' : ':set hls')."\n"
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的选择,因为像 `/`、`?`、`n`、`N` 等任何搜索操作都会重新启用高亮显示,并且不需要重新映射它们中的任何一个。 (2认同)

tru*_*ktr 13

" ctrl+c to toggle highlight.
let hlstate=0
nnoremap <c-c> :if (hlstate%2 == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=hlstate+1<cr>
Run Code Online (Sandbox Code Playgroud)

现在只需按ctrl + c切换高亮显示.只有怪癖是你必须在搜索之后按两次才能切换高亮显示,因为搜索不会增加计数器.


Bat*_*thz 9

我想要的是映射一个键,例如F4,以便按下F4将切换搜索突出显示的可见性,以便无论当前可见性如何,启动新搜索都可以实现可见性.

刚试过这个,似乎就是这样做的:

" switch higlight no matter the previous state
nmap <F4> :set hls! <cr>
" hit '/' highlights then enter search mode
nnoremap / :set hlsearch<cr>/
Run Code Online (Sandbox Code Playgroud)


Yix*_*ing 5

突出显示所有搜索模式匹配中,我们可以映射一个键来切换突出显示状态。与 trusktr 的答案不同,这里我们使用变量来存储状态。

“如果您希望能够快速启用/禁用突出显示,您可以映射一个键来切换 hlsearch 选项”:

" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>
Run Code Online (Sandbox Code Playgroud)

“或者,按回车键暂时退出突出显示的搜索”:

:nnoremap <CR> :nohlsearch<CR><CR>
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以切换:set invhlsearch