ファイルの 10 ~ 20、22、24 ~ 30 行など、特定の行をコピーして、別のファイルに貼り付ける方法を教えてください。誰かが指摘したように、このスタックオーバーフローの投稿を見ましたが、別の質問をしています
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 "
ビジュアルモードを使用するか、直接:
: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
これは、Registers を使用した簡単なソリューションです。
提供したシナリオを使用して、行 10-20、22、24-30 をヤンクする必要があります
各グループを「A」でヤンクするだけです。
:10,20年A
:22歳A
:24,30年A
この時点で、これらの行の各セットが「A」レジスターにコピーされます。p
これで、通常どおりに貼り付けることができます。または"Ap
、(二重引用符、Letter of Register をp
使用して、ヤンクしたものだけを A Register に貼り付けることができます。
レジスターの詳細については、こちらとこちらをご覧ください
両方のファイルを開いて、コマンド ラインから直接呼び出すvim fileone filetwo
か、vim を開いてから:e file
. その後、2 つのファイルに対してバッファ コマンドを使用してそれらを切り替えることができ、それら:bn
は:bp
同等です (次のバッファ、前のバッファ)。次に、行をコピーするだけです。
これは非常に簡単に行うことができます: 10 行目10G
に移動しy10y
、次の 10 行をコピーし、それ:bn
をp
別のファイルに貼り付けます。