vim:在搜索模式中使用 for 循环迭代器变量

vim:在搜索模式中使用 for 循环迭代器变量

我试图在 vim 搜索模式中使用 for 循环迭代器变量来确定一系列单词在文件中出现的次数。到目前为止我所做的是:

for i in range(1,40) | %s/SiTg//gn | endfor

i我需要搜索模式中的迭代器变量%s/S\iTg//gn由 for 循环绑定。我怎样才能在vim中实现这一点?

答案1

Vimscript 的评估与在命令行中键入的 Ex 命令完全相同:。中没有变量ex,因此无法指定它们。以交互方式键入命令时,您可能会用来<C-R>=插入变量内容:

:sleep <C-R>=timetowait<CR>m<CR>

...但在脚本中,:execute必须使用。 Ex 命令的所有文字部分都必须用引号引起来(单引号或双引号),然后与变量连接:

execute 'sleep' timetowait . 'm'

在您的示例中,您希望将i变量放入命令中:%s

for i in range(1,40) | execute '%s/S' . i . 'Tg//gn' | endfor

答案2

如果您不将for循环用于其他目的,您可以随时扩展正则表达式以覆盖整个数字范围:

:%s/S\([1-4]0\|[1-3]*[1-9]\)Tg//gn

答案3

您可以使用\=<subexpression>修饰符,例如::s/a/\=g:integer."a"/g← 它将在所有字母前面加上asg:integer值。

相关内容