1

Vimで私は数行を貼り付けようとしています:

PROC SQL;
   CONNECT TO DB2(DSN=test);
   CREATE TABLE test AS SELECT *
   FROM CONNECTION TO DB2 (

「select」で始まるすべての行の上に

);
quit;

「FORFETCHONLY」で終わるすべての行の下

ペーストバッファーを使用する方法はありますか?好き

%s/^select/(a!)\rselect/

コマンドを入力すると、!のような貼り付けバッファが開きます。コマンド、そしてそれを代用として使用しますか?

ありがとう、ダン

4

2 に答える 2

3

PROC SQLレジスタaにブロックがあり、レジスタbにブロックがある場合quit;は、次のようにするだけです。

:g/^select/put! a
:g/FOR FETCH ONLY$/put b

:gは、指定されたパターンに一致するすべての行を検索し、それらの行に対して指定されたexコマンドを実行します。この場合、:putを使用して、指定されたレジスタの内容を貼り付けます。

于 2010-03-03T17:02:02.140 に答える
1

行の上または下にテキストテキストを挿入する問題については、jamessanのを使用するソリューションを使用し:g/.../put aます。ただし、置換の一部としてaaレジスタを使用することについての質問に答えるには、\=で開始することで置換の式を使用できます。したがって、「PROC SQL; ...」テキストがレジスタにあると仮定すると、これも必要な処理を実行する必要があります。

:%s/^select/\=@a."\n".submatch(0)/

式では、@ aはレジスタaの内容に評価され、submatch(0)は正規表現に一致する文字列に評価される関数です。

置換全体が式として扱われることに注意してください。したがって、通常のテキストを含める場合は、それを引用符で囲み、文字列を。で連結する必要があります.

于 2010-03-03T21:50:47.980 に答える