【Vim】マクロを使って変数を上から順に連番に変換する手順

スポンサードリンク

動機

Oracle の PL/SQL に書かれている、動的 SQL を PostgreSQL で動かしたいですの♪

パラメータ値は、:paraA、:paraB、といった形ですわ。

によりますと、パラメータ値は $1、$2 といった形に変換する必要があるそうですの!

したがいまして、:paraA → $1、:paramB → $2 と変換する必要がございます。

1つ2つなら手作業で問題ありませんが、100、200となりますと手作業では行なえませんの><。

今回、Vim のマクロ機能を使いましてこの問題を解決できましたのでノートいたします♪

変換したい対象コード

変換したいのは、INSERT の VALUES 句の次のようにな記述です。

INSERT INT table1 (
    ... 略 ...
) VALUES (
    :paramA,
    :paramB,
    FUNC_HOGE(:paramC),
    :paramC,
    :paramD,
    :paramE,
    :paramF,
    :paramG,
    :paramH,
    :paramI,
    :paramJ
)';

作業完成後に得たいコード

INSERT INT table1 (
    ... 略 ...
) VALUES (
    $1,
    $2,
    FUNC_HOGE($3),
    $4,
    $5,
    $6,
    $7,
    $8,
    $9,
    $10,
    $11
)';

Vim マクロの作成、手順の概要

  1. 1つ目を手作業で修正
  2. マクロ記録で 2 つ目を修正
  3. マクロ実行で 3 つ目以降全てを修正

Vim マクロを使った作業の詳細

  1. /: で : を検索し、n で次の : へジャンプできるようにする。
  2. :param1 を $1 へ修正する。
  3. ビジュアルモードで $1 を選択肢、ヤンクする。
  4. qqnP^Awvedgevgeyq、とマクロを記録する。
    マクロの内容は次のとおり。

    1. qq: マクロを q に割り当てて記録開始する。
    2. n: 次の検索位置に移動する。
    3. P: カーソルの直前に貼り付ける。
    4. ^A: 数字を 1 増加する。操作としては、Ctrl + a。
    5. w: 数字の次の単語の先頭に移動する。
    6. ved: 単語全体を選択して削除する。
    7. ge: 前の単語($3 の 3 など)の末尾に戻る。
    8. vgey: 単語を後ろから前に選択しヤンクする。b を使用して移動すると、FUNC_HOGE( の場合は ( まで戻ってしまい余計な文字をヤンクしてしまうため、ge で : まで戻るようにした。
    9. q: マクロを終了する。
  5. 8@q でマクロを実行する。

おわりに

以前の投稿、本が今回のきっかけとなりました!

そして、次のページが参考になりました。ありがとうございます!

手作業で行うと、ほぼ間違いなくどこかで間違えますし、完成したところで大きな成果でもございません。。。

そんな作業が自動化できますと、とてもうれしいですわ♪

以上です。


スポンサードリンク

コメントを残す