web-dev-qa-db-ja.com

viを使用してファイルのすべての行を削除するにはどうすればよいですか?

Viを使用してファイルのすべての行を削除するにはどうすればよいですか?

現時点では、次のようにしてファイル内のすべての行を削除しています。

echo > test.txt

viを使用してすべての行を削除するにはどうすればよいですか?

注:ddの使用は適切なオプションではありません。多くの行がある場合があります。

285
Cold

vi

:1,$d

すべての行を削除します。

:はコマンドを導入します(そしてカーソルを一番下に移動します)。
1,$は、次のコマンド(d)が機能する行を示します。この場合、1行目から最後の行までの範囲($で示されるため、ドキュメントの行数を知る必要はありません)。
最後のdは、指定された行を削除することを意味します。

短い形式(:%d)がありますが、私はそれを使用したことがありません。 :1,$dは、たとえば、 :4,$-2d最初の3行と最後の2行だけを残して、残りを削除します。

501
Anthon

私はviで

:%d

どこ

  • :はviにコマンドモードで実行するように指示します
  • %はすべての行を意味します
  • d:削除

コマンドラインで、

> test.txt

また行います。

Ddの問題は何ですか?

dd if=/dev/null of=test.txt

どこ

  • /dev/nullは特別な0バイトのファイルです
  • ifは入力ファイルです
  • ofは出力ファイルです
182
Archemar

これを行うことをお勧めします(POSIX準拠のシェルで動作するはずです)。

> test.txt

あなたが本当にそれをviでやりたいのなら、あなたはそうすることができます:

  • 1G(最初の行に移動)
  • dG(最後の行まで削除)
55
Chris Down

カーソルが最初の行にある場合(そうでない場合は、次のように入力します:ggまたは1G)の場合、dGを使用できます。現在の行からファイルの終わりまでのすべての行を削除します。そのため、ファイルからすべての行を確実に削除するために、ggdG(コマンドモード中)のように両方を混在させることができます。

または%d Exモードでは、コマンドラインの例:vim +%d foo.bar

関連: VIM現在の行からファイルの終わりまでのすべてのテキスト)でどのように削除できますか?

30
kenorb

私は怠惰な男で、それをシンプルに保つのが好きです。 ggdGShiftを含む5つのキーストロークです

ggはファイルの最初の行に移動し、ddelete動詞の開始、Gはファイルの最後に移動する動きですファイル。詳細には、ファイルの先頭に移動し、タイルの最後まですべてを削除します。

27
TankorSmash

ファイルの先頭に移動して、 dG

12
cppcoder

私はいつもggVGを使います

  • ggは現在の編集ファイルの先頭にジャンプします
  • V(大文字のv)は現在の行を選択します。この場合、現在の編集ファイルの最初の行
  • G(大文字のg)はファイルの最後にジャンプします。この場合、最初の行を選択したので、Gはこのファイルのテキスト全体を選択します。

次に、dまたはxを押すだけで、すべての行を削除できます。

5
yegle

別の解決策:

truncate -s 0 file
4
slawx

質問では、echo > test.txtは空のファイルではなく、1つの改行を含むファイルを作成することに注意してください。

シェルからは、echo -n > test.txtまたは: > test.txtの使用を検討してください。

通常はvi編集コマンド(ggdGを使用)を使用しますが、次のように現在のファイルへの参照を使用してシェルを呼び出すこともできます。

:!:>%

ggdGと同じくらい簡潔ですが、入力するのが難しく、変更したファイルを再読み込みすることも確認する必要があるため、この場合は特にお勧めしませんが、シェルの使用方法を知っています。このようなviからのコマンドは便利です。

それを分解する:

  • : viコマンドを開始します
  • !シェルコマンドを初期化する
  • :これは空の出力を持つシェル組み込みコマンドです
  • >出力をリダイレクトします
  • % viは、これを現在のファイルの名前に置き換えます

提案されている:1,$dももちろん良いものであり、私がそこにいる間も1GdGがあります。

3
mc0e

タイプ:および%d

(挿入モードではありません。そうであれば、最初にエスケープを押してください)

1
DimiDak