2010-11-18 13 views
2

ビジュアルブロックを使用して、一部の範囲(行xy)の特定の列をコピーします。私は同じタスクを達成するためのより簡単な方法があるのだろうかと思います。VIM行xからyへ列nを選択/コピーする方法

また、これらの行をコピーした後、それらを横に切り取りて貼り付けたいと思います。出来ますか? Jを実行するのは迷惑なことです。特に行数が多い場合は迷惑です。例えば

ファイルは(ところで両方のファイルが分割されたウィンドウで開いている)がある

............ 
sadsa asds dog 
sadsa asds cat 
sadsa asds me 
sadsa asds you 
........... 

そして私は、 ファイルBに3列に4行をコピーする既にかもしれませんデータを含む。

............... 
    29. other data 
    30. dog cat me you 
    31. other data 
    ................ 

答えて

1

私はそれを貼り付けるとどのように多くの行があるに応じてなど4J、5J、20Jを使用します。私は(行番号は推測に基づくもの)、ライン30上で、このように、このデータをコピーしたいと言います。これはまだやりすぎですか?

EDIT:これはかなり痛いでしょう。私はこれで少し遊んで、痛みをかなり緩和するマクロを作りました。基本的にMBOが提案するものを自動化します。

moGo^[pVGJdd'op 

vimのバッファに、デフォルトのキーバインドでは、実際のエスケープ文字(、挿入モード、プレスCTRL-Vに行くと^[を置き換える貼り付け、その後、Escキーを押します。

今そのマクロを強調表示し、プレス"py

今、あなたは "私はあなたの犬猫の他に行くとしたいカーソルを置き、一つのファイルから@p

コピーした文字列を縦にマクロを再生することができますそれから@pを押すとうまくいくはずです!

RE-EDIT: Peter Rinckerの回答は私のものよりはるかに優れており、受け入れられる回答でなければなりません。

+0

一つの問題は、それは私があなた@vehomzzz – vehomzzz

+1

を望んでいない古いデータをマージしていますファイルの末尾に貼り付けて、結合してから貼り付けることができます。 – MBO

+0

はい、それを行う方法の1つです=)thxどうやってそれらの行をコピーしますか? – vehomzzz

5

テキストチャンクの左上隅にCtrl-Vと打ってから、テキストチャンクの反対側の角にカーソルを移動してからyを押して、ファイルAのテキストをビジュアルボックモードでコピーします。その後、次のコマンドを実行し、テキストのあなたのチャンクを貼り付けるBを提出する移動:

:put 
:'[,']join 

:putは、視覚ブロックヤンクテキストなど、ラインモードでのレジスタからのテキストを貼り付けます。

:joinは、Jコマンドのように行を結合します。

'[および']は、変更の開始時および終了時に設定されるマークです。

:'[,']joinは、貼り付けテキストの先頭から貼り付けテキストの最後まで結合します。詳細については

は、以下を参照してください。私はすでに他のデータを含むファイルの途中でペーストする必要がある場合、これと

:h :put 
:h :j 
+0

+1は非常に過小評価されたコマンドモードの範囲を行使する – sehe

関連する問題