Vimで削除する(切り取らない)方法は?


145

行をデフォルトのバッファーに入れずに削除するにはどうすればよいですか?

例:

line that will be copied.

line that I want to be substitued with the previous one.

私がやろうとしていること:

yy
dd
p

しかし、Vimは最近コピーされた文字列を削除された(切り取られた)文字列に置き換えます。私は、私は次のようにバッファを使用することができることを知って"1yyddそして"1p私がしたいことを、私はいつもバッファにコピーされた文字列を置くことを忘れて、私は最初に(コピーされますラインを)私の内容を貼り付け、その後、私が欲しいものを削除する必要があります(ライン以前のものと置き換えます。)

Vi(m)のテキストをコピーせずに本当に削除するにはどうすればよいですか?

もう1つの関連する質問は、挿入モードで単語を転送削除する方法です。Ctrl+のようなものが欲しいw


回答:


130

「ブラックホールレジスタ」を使用して、"_実際に何かを削除します"_d
使用"_dP何かを貼り付け、さらに貼り付けのために利用できるそれを維持します。

2番目の質問では、を使用できます<C-o>dw挿入モードを終了<C-o>せずに通常のコマンドを実行するために使用されます。

もちろん、独自のマッピングを設定して、タイピングを省くことができます。私はこれらを持っています:

nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP

thx、あなたは私の両方の質問に答えます。しかし、私はこれらのnoremapコマンドがどのように役立つか理解していませんでした。私はカット機能を失っていますか?
MaikoID 2012

3
いいえ、dまだ「カット」およびp「貼り付け」します<leader>dが、実際に<leader>pは削除し、選択したテキストを破棄して、デフォルトのレジスターの内容を貼り付けます。<leader>p名前付きレジスタを使用せずに、同じテキストを複数回貼り付けることができます。
romainl 2012

119

ブラックホールのレジスタは、 "_トリックを行いますが、よりよい解決策があります:

pコマンドを使用してこの行を入力すると、によって上書きされた(揮発性の)デフォルトレジスタの 内容が貼り付け""られddます。ただし、(非揮発性の)yankレジスター から貼り付けることはできます"0。これは、deleteコマンドによって上書きされませんdd

したがって、これらはあなたの例に従って使用したいコマンドです:

yy
dd
"0p

1
すばらしい、これは受け入れられる答えになるはずです。何かを削除するたびにレジスターを指定し続けるよりも、貼り付けたいときにいつでも手動でレジスターを指定する方がはるかに簡単です。
JShorthouse、

43

これは、vimで嫌いなことの1つです。結局dd、.vimrcのブラックホールレジスタにマッピングすることになりました。

nnoremap d "_d
vnoremap d "_d

6
次に、どのようにカットしますか?
VitalyB 2016年

11
v/Vxカットです。また、すべてのOS xでの切断も一貫しCtrl + xています。
WesternGun、2016年

22

次のマッピングが生成されます:

  • d => "削除"
  • リーダーd => "カット"
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d

nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d

また、「リーダー」キーをカンマに設定するのは良い習慣です。例えば:

let mapleader = ","
let g:mapleader = ","

これらの2つのスニペットにより、 "、d"が新しいカットコマンドになります。

これらのマッピングを共有システムクリップボード構成と一緒に使用する場合は、https://github.com/pazams/d-is-for-deleteで詳細を参照してください。


この回答を2回以上賛成できればいいのにと思います。kprobstの回答を使用してyyddいましたが、線を切るために、指で少し持続可能でないものを使用する必要がありました;-)
Tahir Hassan、

1
intellijのアイデアは、この後に奇妙に振る舞います。ddは何もしません。、dは何もしない
s1n7ax

私はこのソリューションがとても好きです。私にとってうまくいかなかったことの1つは、で線を切ること,ddです。追加後、動作nnoremap <leader>dd ""ddを開始しました
Alexey

8

を使用"_dして、ヤンクしたテキストが上書きされるのを防ぐことができます。あなたはヤンク格納またはあなたが望むものは何でも登録でテキストを削除することができ"、そして_、あなたが気にしないというものを送る「ブラックホール」レジスタ、です。

詳細については、入力:help "_または:help deleting


-1
yy
Vx
p

ビジュアルモードの場合、xは選択を削除するため、行全体を削除する場合は、を押しVてビジュアルモードで行を選択し、次にを押しxて選択を削除します。


3
これにより、削除された行がクリップボードにコピーされます。これは、OPが回避したいものです。
aVeryStableGenius

ありがとう!どういうわけか、これはEmacsのEvilプラグインで完全に機能します
Pedro Penna
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.