Vimで削除してから改行せずに貼り付ける


11

vimでは何度も行を完全に削除したいので、ddを使用します。ただし、その行を行内の別の位置に貼り付ける必要がありますが、これにより貼り付け前に改行が挿入されるため、目的の結果を得ることが非常に難しくなります。例えば、

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

上記のコードでこれを行うと、次のようになります。

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

希望する結果とはかけ離れています...この改行の動作を抑制する方法、または非常に効率的な別の方法を使用する方法はありますか。行頭に行かなければならないのでd $は良いとは思いませんが、空の行も削除したい場合は、別のレジスターで削除する必要があるので、もっと簡単な方法があるはずです!ありがとう。



1
それは私がより効率的な方法は、その後も、私は実際には改行文字と完全なライン....ラインだけではなく内容を削除する、行の先頭に行くたく言ったように、重複していない
のfyre

ああ、私はあなたが今何を言っているのか分かります。あなたが何を成し遂げようとしていたのか、私にははっきりしていませんでした。
EvergreenTree

1
0D改行以外の行を削除します。そして、gJ行を結合するよりも。これで、改行なしで空行なしでテキストを配置できます。
Alex Kroll

回答:


9

削除する行の上の行のどこにでも移動できます。次に、目的のポイントでJDそれを押して貼り付けpます。

  • J2行を結合し、削除するテキストの先頭に移動します。これにより、改行文字と移動する行のインデントが削除されます。
  • D 現在のカーソル位置から行末まで削除しますが、改行文字は保持します。

ヒント:で:pu削除しDたり、ヤンクしy$たりして、新しい行を貼り付けたい場合に使用できます。


3

それほど単純ではありませんが、少し効率的です。また、両方のシーケンスのノーマルモードマップを作成することもできます。

  • ヤンキング:移動したい行に移動し、 ^D"_dd
  • 貼り付け:置き換えたい単語に移動して、 viwp

2

で非常にうまく機能する何かを実現できimapます。次のものをに追加しますvimrc

inoremap <c-a> <c-r>1<esc>k$Jxi

これによりCTRL-a、最後に削除されたテキスト(ddまたは同様のもの)を貼り付けるマッピングが作成されます。もちろん、マッピングに別のキーを使用することもできます。

参照:

:h i_CTRL-R
:h quote1
:h J

1

これも少し気になりますが、これまで最適化することは考えていませんでしたが、このマッピングは機能します。

nmap dil ^d$

dil同様に、「行の削除」であるdiwdi"など、


1

改行なしで貼り付け

これを.vimrcファイルに入れます:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

例:

<span style="color:">danger</span>

今、あなたが入力することができますgp挿入するように#D51B3Fした後、color:私のカーソルがにある間に:ノーマルモードで。

改行なしのヤンク

flukusの答えを使う:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

delete inner lineの頭字語として。これにより、先頭のインデントもなくなります。


0

を押してコピーするテキストを選択し、を押しvてそれをバッファに取り込み、を押しyて任意の場所に貼り付けることができますp。新しい行は挿入されません。


確かに、しかしこれはまだ空白行を残します。
muru、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.