2

2 つのテキスト ブロックがあるとします。1つは私のクリップボードにあります:

one
two
three

もう 1 つは、vim で編集しているファイルにあります。

AAA
BBB
CCC

これを取得するには、最初のブロックを2番目のブロックの前に挿入するにはどうすればよいですか:

oneAAA
twoBBB
threeCCC

vimでこれを行う方法があることを願っています(ビジュアルブロックモードを含むものですか?)が、別の(* nix)ツールでこれを行うことができれば、それにも興味があります.

この質問を書き終えたとき、Googleスプレッドシートを使用してブロックを隣接する列として貼り付け、それらをファイルに貼り付けることで、探しているものを達成できることに気付きました。ただし、vimで可能かどうかはまだ知りたいです。

4

3 に答える 3

3

まず、クリップボードにあるものをファイルに貼り付けて、ファイルを次のようにします。

AAA
BBB
CCC

one
two
three

次に、ctrl-vブロックごとに1つ、2つ、3つを選択し、またはを押しxますd

最後にカーソルを最初に移動しA、 を押しますP

私はテストしませんでしたが、動作するはずです

于 2013-05-01T18:04:36.510 に答える
2

レジスタ内のテキストにはline-wise、 、character-wise、またはのいずれかのタイプがありますblock-wise。テキストをレジスタにヤンクして貼り付けると、「タイプ」が保持されます。したがって、 で行をヤンクしyyてから貼り付けるとp、テキストは行単位になります。これは通常は完璧ですが、レジスタのタイプを別のものに変更すると便利な場合があります。あなたの例では、テキストを行ごとにコピーしたが、ブロックごとに貼り付けたいと思います。関数を介してレジスタを「再キャスト」できsetreg()ます。

レジスタaをブロック単位にキャストする例

:call setreg('a', @a, "b")

名前のないレジスタをブロック単位にキャストする例

:call setreg('"', @@, "b")

レジスターを再キャストした後、通常のpまたはP. l行単位、c文字単位、bブロック単位で使用できます。

ただし、何かを行ごとに貼り付けたいだけの場合は、単に使用する方が簡単なことがよくあります:put

日常のワークフローで多くのレジスタ キャストを行っていることに気付いた場合は、Ingo Karkat のUnconditionalPasteプラグインを使用すると役立つ場合があります。

于 2013-05-01T18:26:44.170 に答える
1

私のUnconditionalPaste プラグインを使用すると、カーソルをテキストの最初に置き、クリップボード ( )Aから貼り付けることができます。これはプラグインによって提供される特別なマッピングの 1 つで、視覚的なブロック単位の選択から Vim でヤンクしたかのように、貼り付けソースを強制的に blockwise にします。"+"+gbPgbP<C-V>

于 2013-05-01T18:19:36.573 に答える