vim:在搜索模式中使用 for-loop-iterator-variable

lor*_*age 2 scripting vim text-processing

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

for i in range(1,40) | %s/SiTg//gn | endfor
Run Code Online (Sandbox Code Playgroud)

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

Ing*_*kat 8

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

:sleep <C-R>=timetowait<CR>m<CR>
Run Code Online (Sandbox Code Playgroud)

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

execute 'sleep' timetowait . 'm'
Run Code Online (Sandbox Code Playgroud)

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

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