web-dev-qa-db-ja.com

Vimで(カットではなく)削除する方法は?

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

例:

line that will be copied.

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

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

yy
dd
p

しかし、Vimは最近コピーされた文字列を削除された(カットされた)文字列に置き換えます。 "1yydd"1pなどのバッファを使用できることは知っていますが、コピーした文字列をバッファに入れることを忘れてしまい、最初に内容を貼り付ける必要があります(行コピーされます)してから、必要なもの(以前のものと置き換えたい行)を削除します。

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

別の関連する質問は、挿入モードでWordを削除する方法です?似たようなものが欲しい Ctrl+w

107
MaikoID

「ブラックホールレジスタ」"_を使用して、本当に何かを削除します:"_d
"_dPを使用して何かを貼り付け、さらに貼り付けできるようにしておきます。

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

もちろん、入力を保存するために独自のマッピングをセットアップできます。私はこれらを持っています:

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

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

pコマンドを使用して行を入力すると、(volatile)default register""、これはddによって上書きされました。ただし、(不揮発性)ヤンクレジスタ"0は、削除コマンドddによって上書きされません。

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

yy
dd
"0p
76
cutemachine

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

nnoremap d "_d
vnoremap d "_d
32
kprobst

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

  • 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

15
pazams

"_dを使用して、ヤンクしたテキストが上書きされないようにすることができます。 "を使用すると、ヤンクまたは削除したテキストを任意のレジスタに保存できます。また、_は「ブラックホール」レジスタです。

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

6
Alex
yy
Vx
p

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

1
Atemu