1

たとえば、if ブロック内の $1 の値をチェックして、最初の後方参照を取得できるようにしたいと考えています。ただし、vimscript は perl ではありません。

これを行う方法はありますか?正規表現内で \1、\2 などを使用できる可能性があることは承知していますが、perl や php などで可能なように、値を一致させて後続のステートメントで使用したいと考えています。

たとえば、g// コマンドの評価された部分にあると非常に便利なので、次のようなことができます。

:g/number: \(\d\+\)/b:number += v:matches[1] " or whatever the syntax is/could be

ファイル内のある数値の値を合計します。

これはできますか?

そうでない場合、正当な理由はありますか?

4

2 に答える 2

2

さらなる啓示の中で、私が実行:lhelpgrep submatch | lopeし、少なくとも 1 つの他の便利な機能を発見しました。それは、コマンドsubmatch({nr})の評価側から使用できます。substitute例えば

:s/there a\(r\)e n\(o \)stupid questions, on\(ly\) stupid people/\=toupper(submatch(2).submatch(1).submatch(3)."?")/

以前にこのアプローチを試しましたが、/backref/ を検索していて、探していた情報が得られなかったと思います。

于 2010-01-04T19:03:40.790 に答える
1

matchlist({expr}, {pat}[, {start}[, {count}]])

{pat}で検索したときに見つかった \1、\2、\3 などを返します。{expr}

例:

echo matchlist('acd', '(a)\?(b)\?(c)\?(.*)')

結果: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']

于 2010-01-03T18:05:58.950 に答える