改行以外の行全体を削除できますか?


33

私は強迫観念で、ファイルに空白を入れないようにするので、vimで私にとってかなり一般的な操作は、行自体ではなく行全体の内容を削除することです(つまり、改行ではありません)。

これを行うための組み込みのvim方法はありますか?おそらくd<movement command>手術?

これまでのところ、私が持っている最高のものは(問題の行で)0d$です。もっと速い方法はありますか?


2
空白を手動でトリミングする代わりに、末尾の空白を強調表示するvim-better-whitespaceなどのプラグインを使用できます。このプラグインは、すべてを一度に削除するコマンドを提供し、保存時に自動的に行うこともできます。
-deltab


3
でも、プラグインなしで、検索と置換を使用して空白のことができます。世界的に削除末尾、例えば:%s/\s*$//
カイルストランド

回答:


34

0Dこれを使用して、行の最初の文字に移動し、行の最後まで削除できます。^D先行する空白をそのまま残したい場合に使用できることに注意してください。また、を使用してこれらの操作を繰り返すことはできません..コマンドで繰り返すことができる操作が必要な場合は、David Lordの答えを参照してください。

ヘルプトピックス:

  • :help 0
  • :help D
  • :help ^

4
これは直接的なものであり、要点であり、(おそらく)最少のキーストロークですが、.コマンドを使用して再現することはできません。そのため、私は考えるcc<Esc>か、S<Esc>あなたが繰り返し心配している場合、より魅力的です。
tommcdo

それは本当です。ただし、マクロとして記録し、を使用して繰り返し.ます。
エバーグリーン

一般に、マクロをで繰り返すことはできません.。それらは、それらのキーストロークがインタラクティブに入力されたかのように機能するため、個々のコマンドは個別に扱われます。を使用.すると、マクロの最後のコマンドのみが繰り返されます。
-tommcdo

私はそれをテストしましたが、それは私にとってはうまくいかない方法です。マクロを記録する場合は、を使用してマクロを使用し、その後で@{reg}繰り返します.
エバーグリーン

1
マクロの最後のコマンドを繰り返しているだけですD0D操作後、カーソルは列0に残ります。カーソルがすでに行の先頭にある場合(別の行に移動した後)、マクロが適切に繰り返されたように見えます。カーソルを行内で前方に移動して入力してみてください.-繰り返しだけが表示されますD
tommcdo

20

cc <Esc>あなたが求めるようになりますが、のキーストロークよりも多くなり0Dます。後でその行に何かを入れたい場合は、それccが最善かもしれません。


2
Shiftを含めると、同じで、おそらく簡単になります。
ホロウェイ

4
これは「最もクリーンな」ソリューションではありませんが、1つの利点があります。1つのアクションであるため、.コマンドで繰り返し実行できます。対照的に、0D(選択した回答で提案されているように)2つのアクションがあります:0モーションとDコマンド
tommcdo

@Trengot は、vimrcにマップしているため、おそらく0D私よりも簡単です。したがって、私の手はホームの列を離れる必要さえありません。jk<Esc>
EvergreenTree

1
参照@Nobilisの答えは:S「の同義語として文書化されているcc
フォルカー・シーゲル

14

Sそして、Ctrl+CまたはEscまったく同じ機能を達成するようです。

.単一のアクションを構成するので、それを使用して繰り返すことができます。


2
私はこれを答えとして追加することを考えていて、それからあなたのものを見ました
スベル

7

0Dおそらくあなたが望むものです。行(およびカーソルの前の文字)をそのままにして、カーソルから行の終わりまで削除します。


この答えは1年前のalmosですが、カーソル位置からではなく、行の先頭から0D削除することに注意する価値があります
-FliiFe

4

通常はを使用しますddOdd現在の行を削除し、O(大文字のo)新しい行を追加します。

これも3回のキーストロークですがdd、1回半しかカウントされず、Oを入力する方が簡単です$

0Dソリューションとは異なります。たとえば、次のコード(!···タブはあり、カーソルは█ です)で自動インデントを行います。

def asd():
!···if foo:
!···!···foo()█
!···!···foobar()

0D あなたを残します:

def asd():
!···if foo:
█
!···!···foobar()

そしてddOあなたを残します:

def asd():
!···if foo:
!···!···█
!···!···foobar()

<Esc>この直後にを押すと、Vimは自動インデントを削除するので、と同じになり0Dます。

「正しい」方法はありません。正確に何をしたいかに依存します。私はddOそれがより柔軟であるため、それが「私の指の中」にあるので好む:-)


2
^D空白はそのままにします。
エバーグリーン

以来O、挿入モードでの葉、あなたを、これはと等価であるcc、あなたの行がすでに自動インデントしない限り....自動インデントなし除き、。
カイルストランド

これは、ファイルの最後の行で異なる動作をします。
-tommcdo

0

そして、1つの貴重なキーストロークを保存する0Cには、現在の行のすべての文字を削除し、挿入モードにします。

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