我想搜索一个字符串并使用 vi 编辑器查找文件中出现的次数。
8 回答
方法是
:%s/模式//gn
你需要n
国旗。要计算单词,请使用:
:%s/\i\+/&/gn
和一个特定的词:
:%s/the/&/gn
请参阅count-items
文档部分。
如果您只是输入:
%s/pattern/pattern/g
那么状态行也会为您提供 vi 中的匹配数。
:%s/string/string/g 会给出答案。
(类似于古斯塔沃所说,但另外:)
对于任何以前的搜索,您可以简单地执行以下操作:
:%s///gn
不需要模式,因为它已经在搜索寄存器 ( @/
) 中。
"%" -s/
在整个文件中执行
"g" - 全局搜索(一行中有多个命中)
"n" - 防止任何替换s/
--没有任何内容被删除!什么都不能撤消!
(请参阅::help s_flag
了解更多信息)
(这样,它与“搜索视觉选择的文本”完美配合,如vim-wikia tip171中所述)
:g/xxxx/d
这将删除所有带有模式的行,并报告删除了多少。撤消后将它们取回。
采用
:%s/模式/\0/g
当模式字符串太长并且您不想再次输入时。
简短的回答:
:%s/待搜索字符串//gn
学习:
:
您正在进入 fromCommand
toCommand-line
模式。现在,无论你写什么:
都在 CLI(命令行界面)上%s
指定所有行。将范围指定为%
意味着在整个文件中进行替换。所有出现替换的语法是:%s/old-text/new-text/g
g
指定行中的所有匹配项。使用g
flag ,您可以替换整行。如果g
未使用此标志,则仅替换该行中的第一次出现。n
指定输出出现次数//
双斜线代表省略replacement text
。因为我们只想找到。
获得出现次数后,您可以按N
键逐个查看出现次数。
在行号 1 到 10 的特定范围内查找和计数:
:1,10s/你好//gn
- 请注意,
%
整个文件由,
单独的行号代替。
查找和替换行号 1 到 10 的特定范围:
:1,10s/helo/hello/gn
我建议这样做:
- 搜索要么
*
对光标下的内容进行“有界搜索”,要么进行标准/pattern
搜索。 - 用于
:%s///gn
获取出现次数。或者您可以使用:%s///n
来获取出现的行数。
**我真的可以找到一个插件,每次搜索都会给出“ N 2行上的 N 1匹配 N”消息,但是唉。
注意:不要被输出的棘手措辞所迷惑。前一个命令可能会给你一些类似于4 matches on 3 lines
后者可能给你的东西3 matches on 3 lines
。虽然在技术上是准确的,但后者具有误导性,应该说“3 行匹配”。因此,正如您所看到的,实际上永远不需要使用后者(仅“n”)形式。通过使用“gn”表格,您可以获得相同的信息、更清晰、更多。