3

ファイルの 10 ~ 20、22、24 ~ 30 行など、特定の行をコピーして、別のファイルに貼り付ける方法を教えてください。誰かが指摘したように、このスタックオーバーフローの投稿を見ましたが、別の質問をしています

4

4 に答える 4

4

ここに楽しいアイデアがあります。これを ~/.vimrc に貼り付けます:

command! -nargs=* Y :call YankList(<f-args>)
fun! YankList(...)
   let yanklist = []
   for i in a:000
      if match(i, "-") != -1
         let split = split(i, "-")
         let yanklist = yanklist + range(split[0], split[1])
      else
         let yanklist = yanklist + i
      endif
   endfor
   call setreg('"', "")
   for i in yanklist
      call setreg('"', getline(i), "al")
   endfor
endfun

名前のないレジスタにヤンクする行を指定できるようになりました。そうする:

:Y 10-20 22 24-30

を使用pして、好きな場所に貼り付けます。(包括的)

これを行うためのより「vimmy」な方法を提案するのは古いですが、この投稿を編集したいと思います. を参照してください:help usr_10 | 131

あなたがすることができます:

10GV20G"ay
22G"AY
24GV30G"Ay
G"ap

また、これらの各行に特定のパターンが含まれている場合は、そのパターンでそれらを取得できます。たとえば、「foo」という単語を含むすべての行をヤンクしたいとします。

:g/foo/y "
于 2012-07-13T18:03:00.923 に答える
2

ビジュアルモードを使用するか、直接:

:10,20yank

新しいファイルにコピーします。

:new | put | 0d

pattern通常、以下を含むすべての行を最後に移動するなど、基準があります。

:g/pattern/m$

コピーするには (:copy または :t)

:g/pattern/t$

レジスターにヤンクするには:

:let @a="" | g/pattern/y A

"aPこれで、貼り付けなど、好きな場所で使用できます。

使用するようなパターンがない場合は、テキスト モーションを使用してください。たとえば}:y A、登録する次の空の行まで行のブロックを追加するaなどです。


PS編集。最後に移動することに言及した理由をもう少し説明したいと思いm$ました(私の個人的なお気に入りです):

行をファイルの最後に移動/コピーすることを選択した場合 ( m$)、それらを別のファイルに一度に書き込むことができます。例えば

 :$mark a
 :g/pattern/t$
 :'a,$w newfile.txt

一致する行を file にコピーしますnewfile.txt。次に、ソース ファイルからコピーを削除します。

 :'a,$d
于 2012-07-13T15:54:47.093 に答える
2

これは、Registers を使用した簡単なソリューションです。

提供したシナリオを使用して、行 10-20、22、24-30 をヤンクする必要があります

各グループを「A」でヤンクするだけです。

:10,20年A

:22歳A

:24,30年A

この時点で、これらの行の各セットが「A」レジスターにコピーされます。pこれで、通常どおりに貼り付けることができます。または"Ap、(二重引用符、Letter of Register をp使用して、ヤンクしたものだけを A Register に貼り付けることができます。

レジスターの詳細については、こちらこちらをご覧ください

于 2013-12-21T12:43:20.887 に答える
1

両方のファイルを開いて、コマンド ラインから直接呼び出すvim fileone filetwoか、vim を開いてから:e file. その後、2 つのファイルに対してバッファ コマンドを使用してそれらを切り替えることができ、それら:bn:bp同等です (次のバッファ、前のバッファ)。次に、行をコピーするだけです。

これは非常に簡単に行うことができます: 10 行目10Gに移動しy10y、次の 10 行をコピーし、それ:bnp別のファイルに貼り付けます。

于 2012-07-13T15:55:22.083 に答える