Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 如何切换Vim';s搜索高亮显示可见性而不禁用它_Search_Vim_Highlighting_Highlight - Fatal编程技术网

Search 如何切换Vim';s搜索高亮显示可见性而不禁用它

Search 如何切换Vim';s搜索高亮显示可见性而不禁用它,search,vim,highlighting,highlight,Search,Vim,Highlighting,Highlight,我想要的是映射一个键,例如F4,这样按F4将切换搜索高光的可见性,并且启动新的搜索将启用可见性,无论当前可见性如何 我所尝试的: 将F4映射到:nohlsearch暂时禁用高亮显示可见性,而不关闭hlsearch设置,但不会再次切换可见性 将F4映射到:设置hlsearch确实会打开/关闭,但我不想关闭hlsearch设置,只想关闭可见性设置。如果hlsearch处于关闭状态,则不会自动返回新的搜索 似乎没有相反形式的:nohlsearch,命令本身在从函数调用时出现问题 我发现了类似的问题,但

我想要的是映射一个键,例如F4,这样按F4将切换搜索高光的可见性,并且启动新的搜索将启用可见性,无论当前可见性如何

我所尝试的:

  • 将F4映射到
    :nohlsearch
    暂时禁用高亮显示可见性,而不关闭
    hlsearch
    设置,但不会再次切换可见性
  • 将F4映射到
    :设置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>