2015-10-06 17 views
4

我可以做<CO>:NOH<CR>當我在插入模式,但它不工作時自動完成:執行:nohlsearch上InsertEnter

autocmd InsertEnter * :nohlsearch 

這有效,但其行爲有所不同:

autocmd InsertEnter * :set nohlsearch 

爲了澄清,wha T I想是運行:nohlsearch,如果我進入插入節點,但我還是想繼續做/<CR>ň搜索其他項目的能力。

+2

它在autocmds中不起作用,因爲高亮狀態在執行自動對齊時保存並重新調用。 (根據':help:noh')。我知道沒有解決方法。 (除了重新映射每個可以進入不合理的插入模式的密鑰) – FDinoff

+0

@FDinoff謝謝..看起來我必須將它綁定到某個東西並習慣它! –

回答

1

你應該寫一個函數調用:nohl然後redraw

function DisableHL() 
    nohl 
    redraw 
endfunction 

然後autocmd InsertEnter * :call DisableHL()

+1

爲什麼一個函數? 'autocmd InsertEnter *:nohl |重繪'似乎工作。 – melpomene

+0

這實際上並不奏效。如果您按下進入或退出插入模式,所有突出顯示都會顯示備份。 – FDinoff

+0

正如在上面的評論中提到的那樣,在自動命令內部運行時無法修改外部。 –

1

我想,你要可以通過直接設置搜索寄存器來實現的:

:autocmd InsertEnter * :let let @/='' 

如果您想要在從插入模式返回時恢復突出顯示,您需要保存並恢復模式,這樣的事情應該這樣做:

:autocmd InsertEnter * :let b:[email protected]/|let @/='' 
:autocmd InsertLeave * :let @/=get(b:,'_search','') 

這個保存和恢復在緩衝區本地變量b當前的搜索模式:_search。