vim取消高亮




Vim清除上次搜索高亮顯示 (20)

在Vim中搜索後,我突出顯示了所有的事件。 我該如何禁用? 我現在再次搜索一些無法找到的亂碼。

有沒有辦法暫時禁用突出顯示,然後在需要時重新啟用?


永久禁用搜索高亮顯示

無論何時使用/執行搜索,匹配都不會突出顯示,

:set nohlsearch

清除高亮顯示,直到下一次搜索

:noh

或者:nohlsearch (清除,直到按下nN

按下ESC清除高亮顯示

nnoremap <esc> :noh<return><esc>

按另一個鍵或自定義地圖清除高亮顯示

  • 按下\ (反斜杠)清除高亮顯示

    nnoremap \ :noh<return>
    
  • 清除高亮顯示兩次ESC

    nnoremap <esc><esc> :noh<return>
    

針對VIM和GVIM的Janus為我這樣的新手準備了許多烘焙產品,其中包括

<leader>hs - toggles highlight search

這正是你需要的。 只需在正常模式下輸入\hs 。 (默認情況下,領導者鍵被映射到\ )。

HTH。


你可以做

:noh

或者:nohlsearch暫時禁用搜索突出顯示,直到下一次搜索。


來自http://twitter.com/jonbho/status/2194406821

" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[

第二行是映射到轉義鍵所需的,因為Vim內部使用轉義來表示特殊鍵。


基於@ baruch-even回答,您可以在正常模式下使用ESC雙擊刪除搜索項:

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[

如果您安裝了incsearch.vim插件 ,則會有一個設置在搜索後自動清除高亮顯示:

let g:incsearch#auto_nohlsearch = 1


安裝vim-cool 。 它是為解決這個特定問題而創建的。 只要移動光標,它就會關閉突出顯示。 但要警告,它需要最近的vim版本!


幾年前我在vim.org上找到了這個答案:

將以下內容添加到.vimrc中:

"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>

因此,在搜索之後,只需在命令模式下再次返回,高亮消失。


我只使用下面的簡單nohl,不需要插件。

:nohl


我在~/.vimrc使用了以下內容

nnoremap <Leader><space> :noh<Enter>

這使得清除當前突出顯示的搜索變得非常簡單快捷。 我的領導者鍵被映射到\所以這使得我的右手小指和拇指很容易執行操作。


我的猜測是,最初的問題不是關閉搜索高亮顯示,而是簡單地清除上次搜索中的高亮顯示。 搜索原始海報中提到的亂碼字符串的解決方案是我一直使用一段時間來清除之前搜索中的突出顯示的解決方案,但它很醜並且很麻煩。

我發現將nnoremap ...添加到〜/ .vimrc的幾個建議在啟動時會將vim置入替換模式,這並不是我想要的。 我找到的最簡單的解決方案是添加該行

nmap <esc><esc> :noh<return>

到我的〜/ .vimrc。 這種方式符合KISS原則,並且不會干擾使用單個<esc>的箭頭鍵。 在命令模式下(或者插入或替換模式下的triple- <esc>)需要double- <esc>來清除先前搜索中的突出顯示,但是從UI角度來看,這會使操作盡可能簡單。


我認為混合@ ShaunBouckaert和2009年3月19日在16:22答案是一個很好的妥協:

" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>

Enter鍵 ,突出顯示的文本不再突出顯示,而搜索突出顯示仍處於啟用狀態。


提出的答案:noh:nohlsearch (例如,Matt McMinn's)對於暫時停用搜索突出顯示是正確的 - 正如原始問題中所述。

我想我會貢獻一個映射,我覺得在正常模式下很有用:

nnoremap <C-L> :nohlsearch<CR><C-L>

默認情況下,Vim中的Ctrl L清除並重新繪製屏幕。 許多命令行程序(主要是那些使用GNU Readline庫的程序 ,例如Bash)使用相同的組合鍵清除屏幕。 當在後台運行的進程打印到終端時,此功能非常有用,可覆蓋前台進程的部分內容。

此正常模式映射還會在重新繪製屏幕之前清除最近搜索詞的高亮顯示。 我發現這兩個功能相輔相成,並且使用一個Ctrl L來同時執行兩個操作,而不是為禁用搜索高亮顯示創建單獨的映射。

NB:使用 noremap而不是map ,否則映射將是遞歸的。

提示:我通常將Caps Lock重新映射到Ctrl ,以便於鍵入這些組合鍵; 這樣做的細節取決於你選擇的操作系統/窗口系統(而且這個答案是無關緊要的)。 以下提示都包含有關將Caps Lock映射到Ctrl以及Esc的信息


搜索不太可能的字符序列(混搭主頁上的鍵):

/;alskdjf;

這在vim和更少的情況下工作,並且比@ ShaunBouckaert的邏輯清理解決方案“清除上次使用的搜索模式”更容易記住/輸入:

:let @/ = ""

一個潛在的缺點是它會將垃圾添加到您的搜索歷史中。


結合2個最佳答案的另一個解決方案是:

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>

而不是依賴一些編程到你的.vimrc文件中的鍵盤映射(它不適用於其他安裝),只需使用下面的方法:重新搜索一些不太可能的東西:

/asdfsddsdf

這是我使用的(從很多不同的問題/答案中提取):

nnoremap <silent> <Esc><Esc> :let @/=""<CR>

用“double” Esc刪除突出顯示,但只要再次搜索,突出顯示就會再次出現。

另一種選擇:

nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>

根據vim文檔:

clearmatches()

    Clears all matches previously defined by |matchadd()| and the

    |:match| commands.

這會在更新時間毫秒之後清除搜索加updatetime

updatetime默認為4000ms或4s,但我將其設置為10s。 請注意,更新時間不僅僅是這樣,所以在更改之前閱讀文檔。

function! SearchHlClear()
    let @/ = ''
endfunction
augroup searchhighlight
    autocmd!
    autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END

關閉突出顯示直到下一次搜索

:noh


nnoremap <cr> :noh<CR><CR>:<backspace>

這樣我就擺脫了:noh命令行中顯示的:noh ,在搜索後按Enter時。

就像開始輸入新命令一樣, Backspace清除它並將焦點放回編輯器窗口。





highlight