web-dev-qa-db-ja.com

上書きせずにvimレジスタに行を追加する方法

レジスタの行をヤンクしたい:"{register}yですが、以前はレジスターにあったものを上書きしません。レジスタ内の連続していない行をコピーする必要があることが多く、スタックのようにレジスタを使用したい場合があります。

例:

line1
line2
line3

コピーしたいline1、カーソルを置いて"ay、続いてline3 そして、やります "ay。次に、"ap、 両方とも line1 AND line3を貼り付けます。

プラグインなしでこれは可能ですか?プラグインで?

76
Mapad

名前付きレジスタに追加したい場合は、対応する大文字を使用します。つまり、あなたの例では:

 "ayy 
" Ayy 
 "ap 
120
MarkB

MarkBの応答を拡張するために、マーカーを使用してヤンクのテキストのブロックを選択できることをご存知ですか?

ヤンクするブロックの最初の行に移動し、マーカーとして文字を選択した後、マークコマンドを入力します。

ma  (entered in command mode, i.e. no colon)

次に、ヤンクするブロックの下部に移動して、次のコマンドを入力します。

:'a,.ya A

このコマンドは、aと呼ばれる私のマーカーを含む行から現在の行までのテキストブロックを取り、それをバッファーaにヤンクします。 MarkBと同じ規則が適用され、小文字のバッファー名を使用してバッファーを上書きします。大文字のバッファ名を使用して、バッファに追加します。したがって、この場合、これはバッファーaの内容に追加されます。

N.B.マーカーに使用される「a」は、レジスターの選択に使用される「a」とは関係ありません。 (AFAIKですがYMMV)

BTW 'a(アポストロフィa)は、マーカーaを含む行を指します。 `a(バッククォートa)は、maを入力したときのカーソルの下の文字を指します。

`ad`b (also entered in command mode)

これは、マーカーaでマークされた文字から文字直前マーカーbでマークした文字までのテキストを削除するので便利です。

11
Rob Wells