Vim中的“查找下一个”


535

要在Vim中向前搜索cake,我会输入/cake,但是当我按回车键时,光标会跳到第一个匹配项。有没有类似于“查找下一个”的Vim命令?


33
习惯使用:help:help /会显示有关搜索的帮助,并且您的问题的答案仅出现在页面下方。
克里斯·摩根

Answers:


876

这是n明年和N对以前。

而且,如果您使用反向搜索?(例如?cake)代替/,则相反。

如果您的系统上安装了它,则应尝试vimtutor从终端运行命令,这将启动有关Vim基本命令的教程。

罗布井的建议有关*,并#也很中肯。



有没有办法跳到下一场比赛(不在当前行中)?
user13107 2014年

@ user13107:n和N在整个缓冲区/文件上工作。您不仅限于当前行。
Xavier T.

@XavierT。任何想法,我怎么能跳固定数目的搜索结果。我的意思是,例如,跳到第10条匹配线
GP机器人2015年

@GPcyborg:n像大多数vim运算符一样,可以在其前面加上数字以重复该命令。如果键入10n,它将移至第10个结果(在第一个结果之后)。它也适用于所有3j需要下降3行的运动控制器。
Xavier T.

210

Vim中最有用的快捷键,恕我直言,是*关键。

将光标放在一个单词上,然后按下*键,您将跳至该单词的下一个实例。

#键的作用相同,但是会跳到该单词的上一个实例。

它确实节省了时间。


6
而在情况下,它并不明显,n并且N带你向前和向后通过*比赛,一旦你按下*。(或者,您可以一直按*以前进或#后退,但是使用这些Shift键通常不是最佳选择。)
Herbert Sitz 2011年

3
@Herbert,实际上n和N不会让您“向前”和“向后”。如上文@Xavier所述,n为下一个,N为前一个。通过使用“ /”键和“?”表示搜索来控制向前和向后搜索 键或使用“ *”键和“#”键。
罗伯·威尔斯,

我不认为*有用吗...大多数时候,我都是在寻找单词的一部分(例如,函数名的一部分)。我不想/Func,有它带我去SomeFunc,然后按“*”去的下一个实例SomeFunc时的下一个实例FuncSomeOtherFunc
weberc2 2013年

更糟糕的是,对于C ++,我发现它不会从方法调用转到方法实现,因为/\<foo\>它不匹配"className::foo()"
puk 2013年

84

当我刚开始的时候,我需要观看一个演示

如何在Vim中搜索

  1. 类型 /
  2. 输入搜索词,例如“ var”
  3. enter
  4. 对于下一个实例,请按n(对于上一个 N

2
键入*不正确。即一个文件aa aaa。搜索/aa,您必须匹配。在第一个比赛中,按*更改搜索词。
Bernhard 2014年

1
n不是“ next”,而是“ repeat last search”。因此,输入?var将开始从您当前的位置向上搜索'var'。“ N”实际上是“在相反方向上重复最后一次搜索”,因此对于此示例,它将从当前位置向下搜索“ var”。
罗伯·威尔斯



13

如上所述,有几种搜索方法:

/pattern
?pattern
* (and g*, which I sometimes use in macros)
# (and g#)

另外,使用N和浏览上一个/下一个n

您也可以通过拉动搜索提示,/然后用C-p/ 循环来编辑/调用搜索历史记录C-n。甚至更有用q/,它带您进入一个窗口,您可以在其中浏览搜索历史记录。

同样重要的是要考虑的'hlsearch':hls要启用的类型)。这使查找模式的多个实例变得容易得多。您甚至可能希望通过以下方式使您的比赛更加明亮:

hi Search ctermfg=yellow ctermbg=red guifg=...

但随后,您可能会在屏幕上不断出现黄色匹配,从而发疯。因此,您经常会发现自己使用:noh。这是如此普遍,以至于按顺序进行映射:

nmap <leader>z :noh<CR>

我很容易记住这一点,z因为我以前经常打字/zz<CR>(这是一种快速键入的罕见事件)以清除突出显示的内容。但是:noh映射方式更好。


2
如果您受到启发q/,也应该玩q:。两者都很方便!(不过,与这个问题并不真正相关。)
Micah Elliott

谢谢,米卡。我已经知道'q:'了,尽管我使用的并不多。但是在我的vim教育中,“ q /”被完全忽略了,我认为它将得到很多使用。
稳定狗2015年

2

如果在按“ / wordforsearch”之类的内容后按Ctrl+ Enter,则可以在当前行中找到单词“ wordforsearch”。然后按n进行下一场比赛;按下N进行上一场比赛。


1
“当我们执行搜索时,Vim从当前光标位置向前扫描,直到找到的第一个匹配项都停止。”正如实用Vim指出的那样。
bass chuck,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.