vim:検索モードでforループイテレータ変数を使用する

vim:検索モードでforループイテレータ変数を使用する

vim検索モードでforループイテレータ変数を使用して、一連の単語がファイルに表示される回数を確認しようとしています。これまで私がしたことは次のとおりです。

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

i%s/S\iTg//gnforループで囲まれたパターンからイテレータ変数を取得する必要があります。 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値を:s/a/\=g:integer."a"/g追加します。ag:integer

関連情報