2013-12-08 64 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