Vim:複数行の最後にテキストブロックを貼り付ける方法は?


32

次のようなテキストブロックがあるとします。

// Comment1
// Comment2
// Comment3

そして、これらの各行を、対応する3行のコードの最後に追加します。

foo = 1;
バー= 2;
baz = 3;

その結果、最終結果は

foo = 1; // Comment1
バー= 2; // Comment2
baz = 3; // Comment3

Vimでこれを行う簡単な方法はありますか?


@Flimzy、残念ながらいいえ。時々 、あなたのようなコメントは、Vimの質問に表示されますが、このチェック:meta.stackexchange.com/q/25925/160504
sidyll

この質問のより良いコミュニティはvi.stackexchange.com
thinwybk

回答:


36

視覚ブロックモード(Ctrl+ v)を使用して、1セットの行を選択してから、いずれかyまたはdそれらを選択します。

あなたがバー、FOOを選択した場合次に、バズラインは、コメント行の最初の列を選択するために、もう一度、ビジュアルブロックモードを使用して、Shift+ pそれらの場所に(またはあなたがコメント行を選択した場合、fooのバーバズの最後の列を選択します線とpそれらを配置します。

ポジショニングのコツをつかむには少し練習が必要かもしれませんが、コツをつかめば飛ぶでしょう。ブロックを選択したら、Shift+ Aを使用して、たとえばブロックにスペースを追加することもできます(追加すると、新しいテキストは最上行にのみ表示されますが、escを押すと、選択されたすべての行に表示されます) 。同様に、Shift+ iは各行の選択されたブロックの先頭で同じことを行います。

ただし、後で空の行をクリーンアップする必要があります。

これらのテクニックをより詳細に示す素晴らしいvimcastsエピソードもあります。


1
このソリューションは:set ve=all非常に用途が広いと思います。個人的にはUnconditionalPasteプラグイン(vim.org/scripts/script.php?script_id=3355)を使用していますが、これは私のニーズに少し合っているためです。
ピーターリンカー

1

まあ、それが簡単かどうかは、教えてください。に移動し// Comment 1、ヒットddして削除します。で行に移動しfoo = 1;、を押して、行のp下に貼り付けます。foo再び上に移動し、ヒットJして行に参加します。多田。


0

以下は、あなたが説明したとおりに行います。

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@

実際に行う必要があるものに応じて(例とは対照的に)、実際には、「// Comment1」などをブロック選択する方が簡単です。ブロック(Ctrlv)、ヤンク(y)、コードの最後に移動しますブロックして貼り付けます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.