選択を別のファイルに移動する


11

vimを使用して、テキストを新しいファイルに移動するにはどうすればよいですか?今のところ、私はこれを行います:

  • テキストを選択
  • つかいます :w new_file
  • もう一度テキストを選択します
  • テキストを削除する

これを行うためのより効率的な方法はありますか?

a.txt

sometext
some other text
some other other text
end

a.txt

sometext
end

b.txt

some other text
some other other text

回答:


4

これらのカスタムコマンドはどうですか。

:command! -bang -range -nargs=1 -complete=file MoveWrite  <line1>,<line2>write<bang> <args> | <line1>,<line2>delete _
:command! -bang -range -nargs=1 -complete=file MoveAppend <line1>,<line2>write<bang> >> <args> | <line1>,<line2>delete _

1
これは非常にいですが、ちょっと、私が要求したこと(試してみました)を正確に1つのステップで行うようです。+1、受け入れられます。私はこれを迅速に行うためのネイティブな方法を探していましたが、そうではないので、あなたの方法はうまくいきます。ありがとう!
greg0ire

美しさは見る人の目にある。これはかなりエレガントです。(.vimrcに)1回入力するだけです。
インゴカルカット

あなたは正しい、「非常にい」叫びは「非常になじみのない」ものでした。あなたのコマンドは非常に便利です、そして私は間違いなく私の.vimrcでそれを刻むつもりだと思う
-greg0ire

7

「テキストを新しいファイルに移動する」とは、現在のファイルからそのテキストを切り取り、そのテキストのみを含む新しいファイルを作成することを意味すると仮定します。

さまざまな例:

  • :1,1 w new_file 行番号1のテキストのみを含む新しいファイルを作成するには
  • :5,50 w newfile 5行目から50行目までのテキストを含む新しいファイルを作成するには
  • :'a,'b w newfileマークからマークaへのテキストを含む新しいファイルを作成するにはb
    • 使用maしてmb、好きな場所でマークを設定します

上記はテキストのみをコピーし、そのテキストを含む新しいファイルを作成します。その後、削除する必要があります。

これは、同じ範囲とdコマンドを使用して実行できます。

  • :5,50 d 5行目から50行目までのテキストを削除するには
  • :'a,'b dマークからテキストを削除するためにaマークしますb

またはdd、単一行の場合に使用します。

代わりに、ビジュアルモードを使用してテキストを選択:し、テキストが選択されているときにヒットすると、コマンドラインに次のように表示されます。

:'<,'>

選択したテキストを示します。その後、コマンドを次のように展開できます。

:'<,'>w >> old_file

どちらます追加、既存のファイルにテキストを。次に、上記のように削除します。


1つのライナー:

:2,3 d | new +put! "

内訳:

  • :2,3 d -2行目から3行目を削除します
  • | -技術的には、これは最初のコマンドの出力を2番目のコマンドにリダイレクトしますが、最初のコマンドは何も出力しないため、単にコマンドを連鎖させています。
  • new -新しいバッファを開きます
  • +put! "-名前のないレジスタ(")の内容をバッファに入れます
    • バン(!)があるので、コンテンツは現在の行のに配置されます。これにより、ファイルの最後に空行が生じます。これがないと、ファイルの上部に空の行があります。

あなたの仮定は正しいです。これはよさそうだ、テストします。もう少し説明してもらえますか?私は範囲にあまり詳しくありません。編集:2行目でこれを試してみると、1行目は2行目ではなく他のファイルに書き込まれます。
greg0ire

@私は後方のビットが、私はより良い説明して編集しましょうということだgreg0ire
embedded.kyle

質問を明確にするために例を追加しました。
greg0ire

@ greg0ire答えを修正しました。まだ2つのステップです。最初のコピーと書き込み。2番目は削除します。
embedded.kyle

わかりました。わかりますが、トリックは範囲を使用して同じコマンドを選択して書き込むことです。それは私がやったことに非常に似ています。詳細な説明については+1ですが、「:」を押すトリックは今のところ何をするかなので、これはより効率的ではないと思います。
greg0ire

1

@ embedded.kyleの回答とこのQ&Aに基づいて、ファイルに選択範囲を追加し、現在のファイルから削除するこの1つのライナーになりました。でいくつかの行を選択した後Shift+V、ヒット:して実行します。

'<,'>w >> test | normal gvd 

最初の部分は、選択した行を追加します。2番目のコマンドは通常モードに入り、実行gvdして最後の選択を選択してから削除します。


0

ビジュアルモードでテキストを選択し、を押しyてバッファに「ヤンク」(コピー)またはバッファdに「削除」(カット)します。

次に:split <new file name>、vimウィンドウを分割し、を押しpてヤンクしたテキストを貼り付けます。通常どおりファイルを書き込みます。

スプリットを再び閉じるには、閉じたいスプリットを渡します:q


1
今のところ、選択、書き込み、選択、削除の4つのステップがあります。あなたの方法では、選択、削除、分割、貼り付け、書き込み、閉じるの6つのステップがあります。私はもっ​​と効率的なものを求めました:P
greg0ire

さて、:x代わりに分割を渡す場合、書き込みと終了を1つにまとめて、5つのステップにすることができます。:P
Xyon

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