112

我想搜索一个字符串并使用 vi 编辑器查找文件中出现的次数。

4

8 回答 8

198

方法是

:%s/模式//gn

于 2010-10-13T18:20:26.157 回答
123

你需要n国旗。要计算单词,请使用:

:%s/\i\+/&/gn   

和一个特定的词:

:%s/the/&/gn        

请参阅count-items文档部分。

如果您只是输入:

%s/pattern/pattern/g

那么状态行也会为您提供 vi 中的匹配数。

于 2009-04-03T20:42:07.330 回答
42

:%s/string/string/g 会给出答案。

于 2009-04-03T20:41:55.987 回答
24

(类似于古斯塔沃所说,但另外:)

对于任何以前的搜索,您可以简单地执行以下操作:

:%s///gn

不需要模式,因为它已经在搜索寄存器 ( @/) 中。

"%" -s/在整个文件中执行
"g" - 全局搜索(一行中有多个命中)
"n" - 防止任何替换s/--没有任何内容被删除!什么都不能撤消!
(请参阅::help s_flag了解更多信息)

(这样,它与“搜索视觉选择的文本”完美配合,如vim-wikia tip171中所述)

于 2013-08-28T12:02:53.197 回答
5
:g/xxxx/d

这将删除所有带有模式的行,并报告删除了多少。撤消后将它们取回。

于 2009-04-03T20:43:11.337 回答
3

采用

:%s/模式/\0/g

当模式字符串太长并且您不想再次输入时。

于 2011-02-18T02:27:05.660 回答
3

简短的回答

:%s/待搜索字符串//gn

学习

VI编辑器有3种模式如下 在此处输入图像描述

  • :您正在进入 from CommandtoCommand-line模式。现在,无论你写什么:都在 CLI(命令行界面)上
  • %s指定所有行。将范围指定为%意味着在整个文件中进行替换。所有出现替换的语法是:%s/old-text/new-text/g
  • g指定行中的所有匹配项。使用gflag ,您可以替换整行。如果g未使用此标志,则仅替换该行中的第一次出现。
  • n指定输出出现次数
  • //双斜线代表省略replacement text。因为我们只想找到。

获得出现次数后,您可以按N键逐个查看出现次数。

在行号 1 到 10 的特定范围内查找和计数:

:1,10s/你好//gn

  • 请注意,%整个文件由,单独的行号代替。

查找和替换行号 1 到 10 的特定范围:

:1,10s/helo/hello/gn

于 2020-04-22T06:53:39.490 回答
0

我建议这样做:

  1. 搜索要么*对光标下的内容进行“有界搜索”,要么进行标准/pattern搜索。
  2. 用于:%s///gn获取出现次数。或者您可以使用:%s///n来获取出现的行数。

**我真的可以找到一个插件,每次搜索都会给出“ N 2行上的 N 1匹配 N”消息,但是唉。

注意:不要被输出的棘手措辞所迷惑。前一个命令可能会给你一些类似于4 matches on 3 lines后者可能给你的东西3 matches on 3 lines。虽然在技术上是准确的,但后者具有误导性,应该说“3 行匹配”。因此,正如您所看到的,实际上永远不需要使用后者(仅“n”)形式。通过使用“gn”表格,您可以获得相同的信息、更清晰、更多。

于 2017-01-11T17:12:06.267 回答