インクリメントしながらヤンクアンドペースト


13

Vimで.sqlファイルを編集しています:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),

私がやろうとしているのは、(1, 1),行をヤンクして137回貼り付けることです。ただし、カッコ内の2番目の数値は、毎回インクリメントされるようにします。出力は次のようになります。

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),
(1, 2),
(1, 3),
...
(1, 137),

Vimでそれを行う方法はありますか?その場合、どのコマンドを使用しますか?

ありがとう!

回答:


10

(1, 1),行にカーソルを置いて、次のように入力します。

qaVypt)<C-a>q135@a

説明 :

qaレジスタa内のマクロの記録を開始します(別の文字を選択できます)。

Vyp 行全体を選択して(V)、コピーして(y)、次に下に貼り付けて(p)、現在の行を複製します。

t) 次の閉じ括弧の直前にカーソルを移動して、2番目の数字に合わせます。

<C-a>Ctrlおよびa)番号を増やします。

q マクロの記録を終了します。

135@aレジスタに格納されたマクロ再生し135回。

編集:ピーター・リンカーのコマンドは短い:

qqYpW<c-a>q135@q

違いは次のとおりです。

レジスタqを使用してマクロを保存し(同じキーであるため入力qqよりも高速qa)、
1回のキーストロークY(2回ではなくVy)で行をコピーし、1回のキーストロークで2
番目の数字にカーソルを移動しますW(代わりにのt))。


4
Vimゴルフ:qqyypW<c-a>q135@q。のY代わりに使用する場合はさらに短くなりますyy
ピーターリンカー

9

最近のVimsは、視覚的に選択された領域のインクリメントとシーケンスの作成について学びました。したがって、行を137回貼り付けた後にこれを行うことができます。

1)Ctrl-V3行目から2番目の1を視覚的にブロック選択()します。

2)を押す gCtrl-A

ここでスクリーンキャストを記録しまし

免責事項:これにはVim 7.4.900が必要です。


Debian / sidのVim 7.4.826でテストに成功しました。
ドゥブ

スクリーンキャストは消えましたが、この方法はすばらしいです!ありがとう。
david_nash

2

他の状況にそれを行う方法を適応させることは容易/覚えやすい/理解しやすい:使いVisIncrのあなたではなく扱うとは対照的に、実際にこの世紀からパッケージマネージャで素敵を果たしていることが、バージョンを使用したい場合(プラグインをvimball複数可、GitHubから取得できます)。それと:

  • (1, 1),行に移動して、ヤンクします。Vy
  • 136回貼り付けます。 136p
  • の2列目に移動し、1垂直にマークします。C-vGf)h
  • インクリメントを実行します: :II
  • マニュアルを読んで、他の利点について調べてください:help visincr

1

で遊ぶよg^a

試してください137i0^v137kg^a


1
ViとVimへようこそ!マークダウンを使用して回答をフォーマットしました。これがOPの質問にどのように答えるかを説明するために編集するとさらに良いでしょう。
D.ベンKnoble
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.