web-dev-qa-db-ja.com

vimの非空白まで削除するにはどうすればよいですか?

カーソルから同じ行の最初の非空白文字まで削除するコマンドを探しています。私はしばらくの間グーグルで検索し、いくつかの可能性を試しました。喜びはありません。誰かがこれを行う方法を知っていますか?

56
Singlestone

シーケンス dw 次のWordまでカーソルからすべての文字を削除します。つまり、Wordの途中でコマンドを実行すると、そのWordの残りの部分とそれに続く空白が削除されます。あなたが探しているものかもしれませんし、そうでないかもしれません。

89
richardolsson

試してみたいかもしれません dW。これは「Word」で移動し(WordおよびWordのヘルプを参照)、あなたの質問により適しているように見えます。

dwは、次のようなニーズを満たしません。

array[1] = 5

dwに配置されているときにaを押すと、次のようになります。

[1] = 5

ただし、dWを使用すると次の結果になります。

= 5
19
sidyll

ここでの回答の多くは、実際に質問に直接対処していません。質問者はfirstnon-whitespace文字まで削除する方法を知りたがっています。いくつかの答えwill技術的には機能しますが、これを明示的に行う方法を見てみましょう。

次の例は、カーソルの開始位置を考慮したバリエーションでnormalモードでこれを行う方法を示しています。下線付きの文字は、カーソルの位置を示します。


 dw:foo foo_ bar→foob̲ar

dエレテ w他の回答で説明されているordコマンドは、カーソルがbeforeターゲットに配置されている場合、次の非空白文字まで削除するのにうまく機能します。


 db:foo b̲ar→b̲ar

当然、逆のことを試してみたいと思います dw 削除するにはbackwards最初の非空白文字-​​beforeカーソルまで。ただし、上記のように、dエレテ back-Wordコマンドは、予想よりも多く削除します。以前のWordも消去します。この場合、次を使用する必要があります。

 dT<?>:foo b̲ar→foob̲ar

...どこ <?> カーソルの前の最初の非空白文字です。 dエレテバックTilコマンドはすべてを消去します最大で、それを含まない文字 <?>、この場合、キャラクター o 「foo」の最後。


 dt<?>:foo foo_ bar→foob̲ar

前のコマンドと同様に、を使用できますdエレテ・ウンtil(小文字の「t」で)文字を削除しますforward次まで <?> キャラクター( b この例では「バー」で)。これにより、同じ結果が得られます dw この質問のために。


 diw:foo _ bar→foob̲ar

カーソルが空白の中央にある場合、dエレテ iネナー wordコマンドは、両側から空白を削除します。


 d/<?>:foo_ \n bar→foob̲ar

削除する空白に改行が含まれている場合、上記のコマンドを使用してd一致するパターンの要素まで <?>、この場合のpatternは、最初の空白以外の文字です。示されているように、 Enter このコマンドを完了します。

最初の非空白文字が改行の後の行の先頭に現れると、Vimは空白を削除しますが、ターゲットは次の行に残ります。追加する必要があります J 上記のコマンドへJoin行(大文字の「j」)。

 d/<?>J:foo_ \nbar→foob̲ar

13
Cy Rossignol

カーソルがどの文字にあるかに関係なくWordを削除するには、次を使用します。 daw (ニーモニック「単語を削除」)は、他のコマンドでも機能します。 caw 「言葉を変える」。 f そして t と一緒に使用できる他の優れたコマンドです d。例えば。カーソルから削除し、最初の出現を含む文字「t」、使用 dft。 「t」をそのままにするには、次を使用します dtt 代わりに。

7
Fredrik Pihl

dw 動作するはずです。

3
lucapette