我试图在 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
← 它将在所有字母前面加上a
sg:integer
值。