Search for string and get count in vi editor

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

145678 次浏览

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

你需要 n标志。计算单词使用:

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

还有一个特别的词:

:%s/the/&/gn

See count-items documentation section.

如果你只是简单地输入:

%s/pattern/pattern/g

then the status line will give you the number of matches in vi as well.

:g/xxxx/d

这将删除所有带有模式的行,并报告删除了多少行。撤消操作后返回这些行。

就是这样

:% s/pattern//gn

使用

:% s/pattern/0/g

当模式字符串太长,你不喜欢再次输入它。

(与古斯塔沃说的相似,但另外:)

对于任何 前情提要搜索,你可以简单地做:

:%s///gn

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

“%”-在整个文件中执行 s/
“ g”-搜索全局(在一行中有多个命中)
“ n”-防止任何取代 s/-什么都没删除!没有什么必须撤消!
(详情请参阅: :help s_flag)

(通过这种方式,它可以完美地与“ 搜索视觉选定的文本”一起工作,如 Vim-wikia tip171所述)

I suggest doing:

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

我真的可以找到一个插件,它可以在每次搜索时提供“ match N of N1 on N2 lines”的消息,但是,唉。

注: 不要被输出的复杂措辞所迷惑。前一个命令可能提供类似于 4 matches on 3 lines的内容,而后一个命令可能提供 3 matches on 3 lines。虽然 technically准确,后者是误导,应该说’3行匹配’。因此,正如您所看到的,确实没有必要使用后一种(仅仅是’n’)形式。您可以通过使用“ gn”表单获得相同的信息,更清楚地获得更多信息。

简短的回答 :

:% s/string-to-be-search//gn

为了学习 :

There are 3 modes in VI editor as below enter image description here

  • 你正在从 Command进入到 Command-line模式。现在,无论你在 :之后写什么都在命令行接口上
  • %s指定所有行。将范围指定为 %意味着在整个文件中进行替换。所有事件替换的语法是 :%s/old-text/new-text/g
  • g specifies all occurrences in the line. With the g flag , you can make the whole line to be substituted. If this g flag is not used then only first occurrence in the line only will be substituted.
  • n指定输出出现次数
  • 双斜杠表示遗漏了 replacement text。因为我们只想找到。

一旦得到出现的次数,您可以按 N键,看到出现一个接一个。

用于查找和计算行号1至10的特定范围:

: 1,10 s/hello//gn

  • 请注意,整个文件的 %被分隔的 ,行号所取代。

用于查找和替换行号1至10的特定范围:

: 1,10 s/helo/hello/gn