2013-12-08 53 views
1

如果我有一個C++函數來實現,像這樣在源文件中:用於「部分」單詞搜索的Vim鍵?

void ClassName::foo() 
{ 
    if (true) 
    { 
     while (true) 
     { 
     fork(); 
     1/0; 
     } 
     foo(); 
    } 
} 

而且我把3號最後一行foo()我的光標,然後按*,它抱怨「搜索觸底,繼續在TOP 」。換句話說:

/\<foo\> 

不匹配

ClassName::foo 

反正是有覆蓋默認的搜索功能

回答

5

那是因爲你的'iskeyword'設置爲C++文件包括:字符。 ClassName::foo標識符上的*命令將突出顯示整個標識符。

您可以使用g*命令(不執行整個單詞搜索,但也將匹配例如pfooey),或通過

:setlocal iskeyword-=: 

更改的選項(但請注意這有像w運動的後果,甚至可能破壞語法高亮顯示。)

+0

謝謝,我會堅持'g *' – puk

+0

請注意,如果不更改'iskeyword',仍然不可能通過'g *'或'g#'從更大的關鍵字類名:: foo'。此外,即使你做了像'nnoremap * g *'和'nnoremap g * *'這樣的'gd'和'gD',也會一直搜索整個關鍵字限制。 –

+0

@NikitaKouevda提出了一個有效的限制;您可以使用我的[SearchHighlighting插件](http://www.vim.org/scripts/script.php?script_id=4320)或其頁面上列出的某些其他資源將'*'命令擴展到視覺選擇。這可以讓你從任何地方搜索任意字符串。 –

0

wrapscan選項默認是開啓的,所以你應該得到與光標跳到了foo在相同的消息如預期的那樣,ClassName::foo

執行:verbose set wrapscan?查看默認值已更改的位置。

此外,你在標題中提到n,但不在身體中,什麼?

+1

如果沒有'wrapscan',Vim就不會說'搜索擊中BOTTOM,繼續在TOP',如問題所述。 –

+0

@IngoKarkat,你是對的。 – romainl