vim
では、常にyy
とp
を使用して、行をヤンクして貼り付けます。ただし、ファイル内の1つの行を複数の場所で置き換える場合、yy
がクリップボード/レジスタへの行を削除するため、p
dd
p
dd
を使用できません。レジスタの使い方をもっとよく知っているはずですが、現在の行を置き換えるp
への方法があると思います。
デフォルトでは、貼り付けコマンドは "
(「名前なし」)レジスタ を使用します。事実上、レジスタに書き込むコマンドは名前のないレジスタにも書き込むため、ヤンク、削除、および変更のすべてに影響します。これがyank-delete-pasteシーケンスがヤンクテキストの代わりに削除されたテキストを貼り付ける理由です。
0
register は、ここで役立ちます。レジスタを指定しないヤンクコマンドは、ヤンクテキストをレジスタ0
に追加します("
に加えて)。削除や変更の操作の影響を受けないため、途中で削除や変更を行った場合でも、ヤンクした行を複数回貼り付けることができます。
yy
:レジスタ0
と"
の両方にヤンクラインが追加されました。dd
:レジスタ"
には削除された行がありますが、レジスタ0
にはまだヤンクされた行があります。"0P
:レジスタ0
から最初にヤンクされた行を貼り付けます。dd"0P
(上記と同じ)(バッファの最後の行を置き換えるときのカーソルの配置方法により、"0p
ではなく"0P
を使用する必要があります。)
これは Bruce Edigerの回答 に非常に似ていますが、最初にヤンクするときにレジスタを指定する必要がない点が異なります。 (たとえば)一部の行をAAA
に置き換え、他の行をBBB
に置き換える必要がある場合(ただし、レジスタにAAA
を置く)、1つ以上の名前付きレジスタを使用すると非常に便利です。 a
、およびBBB
をレジスタb
に(またはそれらの1つをレジスタ0
に残してから、適宜貼り付けます)。
行ごとのビジュアルモード(V
)で0
から貼り付けて、キーストロークを保存することもできます:V"0p
。
"0
を入力する必要がない場合は、マッピングの方が便利です。
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
別の方法は、 _
(「ブラックホール」)レジスタ を削除することです。削除しても、"
レジスタは影響を受けないため、yank-delete-pasteシーケンスは、名前のないレジスタからのヤンクテキストを引き続き貼り付けることができます。
yy
:Register 0
と"
の両方にヤンクラインが追加されました。"_dd
:レジスタに変更はありません。P
:レジスタ"
から最初にヤンクされたテキストを貼り付けます。この場合も、マッピングの方が便利な場合があります。
noremap <Leader>d "_d
ケビンはかなり良い答えをしているように見えますが、削除して置き換えた各行に目を向けたい場合は、少し異なる解決策が存在します。
1. Find line to copy in some select number of places.
2. Put cursor on it.
3. "ayy copies that line into register 'a'.
4. Find line to replace. Put cursor on it.
5. dd deletes that line. "aP inserts the copied line above where the cursor now lies.
6. Repeat steps 4 and 5.
この種のレシピを使用すると、パターンマッチングを使用して、削除および置換する行を検索できます。また、ファイルの先頭(1G)に戻って、好きなだけ前方に検索できます。 2つ以上の行を集めて繰り返し配置する場合、最初の行には"ayy
、2行目には"byy
、3行目には"cyy
を使用します。私は自分の精神的負担を減らす習慣をつけました(レシピの一般性を減らします)。
:s
を使用してこれを行う方法は2つあり、入力するタイピングの量によって異なります。最も簡単な方法は、単純な検索と置換です。
:%s/find this line/replace with this/
%
はファイル全体を検索し、すべての出現箇所を置き換えます。
入力が多すぎる場合は、宛先文字列(yy
)をヤンクし、"
(デフォルト)レジスタを使用して、 Ctrl+r":
:%s/<ctrl+r><">/replacement/
または、置換文字列のコピーがある場合、"ayy
および"byy
を使用して2つを別々のレジスタにヤンクして、a
およびb
レジスタにヤンクすることができます。 、それぞれ(レジスターには任意の文字を使用できます)。次に使用します Ctrl+ra そして Ctrl+rb それらを検索に貼り付けてフィールドを置き換えます。
1対1のBruceではありませんが、置き換える前に行をチェックしたい場合は、c
オプションを追加するだけです。
:%s/find this line/replace with this/c
V
を使用して、ビジュアルモードで置き換える行を強調表示し、pp
を押してその行に貼り付けることができます。
これはキーストロークを1つだけ追加するので、かなり良い解決策のようです。
この種のことには、通常の検索と組み合わせてc
、 "change"、コマンドを頻繁に使用します。関心のあるテキストの各行/部分についてファイルを検索し、連続したn.
コマンドを使用できます(次の場合はn
、次に.
を使用して最後の変更を繰り返します)。
/^hello
-helloで始まる行を検索します。c$goodbye
-行をさようならに変更します。n.
-検索を繰り返し、変更を繰り返し
行をファイル内の既存の行に変更する場合は、入力バッファーにコピーして(GUIで許可されている場合)、貼り付けて最初の変更コマンドの内容を取得します。
すべてのviと同様に、どのような編集を行うかに応じて、多くのオプションをポケットに入れておくことをお勧めします。