2013-07-11 108 views
4

Notepad ++具有這個功能非常簡潔的功能,如果選擇一個單詞,則會自動突出顯示該單詞的每個其他字符,如下所示(僅第一個autocmd由我突出顯示):Vim:自動突出顯示所選字的所有出現

N++ highlighting screenshot

據我所知,類似的事情已是asked,但我希望有不需要人工交互的解決方案。

+1

你是什麼意思的手動交互?你想讓vim總是突出匹配嗎? – pkacprzak

+0

我同意它不清楚OP想要什麼。你用鼠標選擇單詞嗎? – jahroy

+0

抱歉不清楚。通過選擇我的意思是突出顯示一個單詞。如果光標在單詞的開頭,shift + ctrl(在mac上的alt)+右箭頭。如果我用第一個單詞做這個事情,那麼所有其他的事件立即被突出顯示,並且以不同的顏色顯示。 – Nicolas

回答

2

我的SearchHighlighting plugin有一個<Leader>*映射和:SearchAutoHighlighting命令來啓用此功能。它可以突出顯示光標下的當前單詞/ WORD /整個單詞/線條/精確線條。

1

像這樣的東西可以工作。

set updatetime=10 

autocmd! CursorHold,CursorHoldI * let @/='\<'.expand('<cword>').'\>' 

這使用CursorHold事件來設置/光標下注冊的單詞。爲了使CursorHold事件更頻繁地啓動,updatetime被降低到10(從4000)。

問題:

  1. 您需要手動:set hlsearch。出於某種原因,它本身並不會啓動。
  2. 這會干擾正常搜索。由於您在光標移動時正在更改/寄存器。

總的來說我不會使用它,因爲我覺得搜索比這個功能更重要。

+2

你可以使用':match'而不是在搜索寄存器上跺腳,但方法是一樣的。這可能是完成OP想要的最好方法。 –

11

如果您按* Vim將搜索光標下所有出現的單詞。

如果您打開搜索高亮顯示,它們將被高亮顯示。

你可以把這個在您的.vimrc打開搜索高亮:

set hlsearch 

一個不錯的加是你沒有選擇的話了......你剛纔打*關鍵。

你可以把它映射到另一個鍵,使之更方便


如果你不喜歡的方式,光標移動,當你按下*可以防止它用一個簡單的製圖:

nnoremap * *N 

把它放到你的.vimrc

當您按*時,這會將光標保持在當前位置。

+0

選擇將在視覺模式下突出顯示一個詞。當光標位於第一個字母時,v e就是vim鍵。 *與hlsearch結合很好,只是它移動了光標。是否可以在不改變光標位置的情況下進行操作? – Nicolas

+0

...查看我答案的後半部分。它建議禁用光標移動的映射。 – jahroy

1

我會做這樣的:

:au CursorHold,CursorHoldI * :try | exe "call matchdelete(w:my_match)" | catch | finally | let w:my_match = matchadd('IncSearch', expand('<cword>')) | endtry 

如果你不喜歡的高亮顯示,選擇從:hi輸出一個不錯的一個,並用它來代替IncSearch。注意:這可能會顯着降低Vim的速度。