viで複数の行を削除するにはどうすればよいですか?


129

私は次のことを試そうとしました:

VIエディターで選択したテキストを削除する方法

だが

5dd

与える

E492:エディターコマンドではありません:5dd

私はそれから試しました:

5d

これは、1行だけを削除します。複数の行を削除するにはどうすればよいですか?


2
私が覚えている限り、5ddは有効な構文であり、カーソルがある行から始まる5行を削除する必要があります。Caps Lockがオンになっていて、キーボードレイアウトを使用しているため、数字キーがシフトしている可能性がありますか?
エリックJ.

回答:


132

コマンドモード(別名「Exモード」)でコマンドを入力しているようです。そのコンテキストで:5dは、行番号5が削除されます。が5dd意図したとおりに機能するために、つまり、カーソルで始まる後続の5行を削除します:。通常モードで入力し、コマンドの前にを付けないでください。



142

行番号がわかっている場合は、複数の(範囲)行を削除できます。

:[start_line_no],[end_line_no]d

注: dは削除を表します

ここで、
start_line_noは削除したくない開始行で、end_line_noは削除したい終了行です。開始と終了を含む、開始と終了の間の線が削除されます。

例えば:

:45,101d

45と101を含む45と101の間の行が削除されます。


14
を使用$して、ファイルの最後の行を示すこともできます。したがって:45,$d、45から最後まですべての行を削除します。
freethebees

あなたも、同様のパターンを使用することができます/<\/div>/
ビョルン

1
あなたが現在いるラインから範囲を開始したいなら、あなたは行うことができます:.,[end_line_no]d
ジョー

15

通常モードで使用するためにリストされたコマンド(:コマンドモードの接頭辞)。
Vimでテスト済み。

ライン量別:

  • NUMdd -削除されNUM現在のカーソル位置からのカウントを開始DOWNライン(例えば、5dd現在の行とその下の4行を削除します=> 現在の行と(削除NUM-1 )その下の線
  • num-現在の行と現在の行自体からnum行UP dkを削除します(たとえば、現在の行とその上の3行を削除します=> 現在の行とその上のnum行を削除します3dk

行番号で:

  • dNUMG -行を削除します行番号に現在の行(包括的)UPからNUM(包括的)(カーソルが行5の上に現在ある場合例えばd2Gライン2-5包括的に削除されます)
  • dnumはgg -行を削除します現在の行から(包括的)DOWN行番号にNUM(包括的)(カーソルが行の上に現在ある場合例えば2 d6gg2-6行を削除包括されます)
  • コマンドモードのみ:num1 ,num2- 行番号num1(両端を含む)から行番号num2(両端を含む)までd削除します。注:num1num2より大きい場合— vimはBackwards range given, OK to swap (y/n)?

1
num 'd' 'd'がカーソルの下を削除しようとしていることに気付かなかったので、これは私を助けました。ファイルの下部にカーソルを置いて、カーソルの上にある行を削除しようとしました!助けてくれてありがとう!
Jonathan Chad Faling

行番号: ':<start>、$ d'で削除すると、ファイルの最後まで削除されます。
Devolus

11

非ビジュアルモードの方法を使用して行番号を確認する場合は、別の簡単な方法を提案します。

45行目から101行目までを削除したい。

私の方法は、コマンドモードで以下のコマンドを入力することをお勧めします:

45Gd101G

それは読む:

45行目(45G)に移動しd、現在の行から101行目()までのテキスト()を削除します101G

の代わりにをvim使用する場合があることに注意してください。ggG

@Bonnie Vargheseの回答と比較してください。

:45,101d[enter]

上記の彼の回答のコマンドenterでは、を含めて9回入力する必要がありますが、私の回答では8〜10回入力する必要があります。したがって、私の方法の速度は同等です。

個人的に、私は自分自身が好む45Gd101G以上:45,101dます。viのコマンドの構文に固執するように私は、このケースであるため、

+---------+----------+--------------------+
| syntax  | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command |   45G    |        d101G       |
+---------+----------+--------------------+

8

d5dは5行を「カット」します

私は通常、次のように数字を真ん中に投げます:

d7l = 7文字を削除


7

Escキーを押して、編集モードになっていないことを確認します。削除する最初の行にカーソルを置きます。と入力し:5ddます。現在の行と次の4行を削除する必要があります。

または、行番号付けをオンにしている場合...

Escキーを押して、編集モードになっていないことを確認します。:#,#d「#」が削除する開始行番号と終了行番号を表す場所を入力します。


初めはコロンで効くとは思いません。
2018年

@PoeteMauditこれらは有効なviコマンドです。コロンにより、viはカーソルを画面の下部に移動し、行エディターコマンドを受け入れます。
ケンスター2018年

5
  1. Esc 挿入モードを終了するには
  2. :1enter 1行目に移動(「1」を目的の行に置き換えます)
  3. 5dd (現在の行から)5行を削除する

タイプ (番号付き行の場合)。:set number


3

特定のライントリガーの後で範囲を削除したい場合は、次のようなものを使用できます

:g/^TMPDIR/ :.,+11d

これは、に遭遇するたびに11行(含む)を削除し^TMPDIRます。


0

ddxではなくdxdです

5行を削除する場合は、削除する最初の行の先頭にカーソルを合わせ、d5d



-1

それは次のように行うことができます。

  1. 削除したい場所にカーソルを置きます。
  2. 「v」を押して視覚的選択を開始します。
  3. 矢印キーを使用して、削除する位置にカーソルを移動します。
  4. 行を削除する「d」を押します。
  5. 保存して「:x!」で終了します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.