Viを使用してファイルのすべての行を削除するにはどうすればよいですか?
現時点では、次のようにしてファイル内のすべての行を削除しています。
echo > test.txt
vi
を使用してすべての行を削除するにはどうすればよいですか?
注:dd
の使用は適切なオプションではありません。多くの行がある場合があります。
vi
で
:1,$d
すべての行を削除します。
:
はコマンドを導入します(そしてカーソルを一番下に移動します)。1,$
は、次のコマンド(d
)が機能する行を示します。この場合、1行目から最後の行までの範囲($
で示されるため、ドキュメントの行数を知る必要はありません)。
最後のd
は、指定された行を削除することを意味します。
短い形式(:%d
)がありますが、私はそれを使用したことがありません。 :1,$d
は、たとえば、 :4,$-2d
最初の3行と最後の2行だけを残して、残りを削除します。
私はviで
:%d
どこ
:
はviにコマンドモードで実行するように指示します%
はすべての行を意味しますd
:削除コマンドラインで、
> test.txt
また行います。
Ddの問題は何ですか?
dd if=/dev/null of=test.txt
どこ
/dev/null
は特別な0バイトのファイルですif
は入力ファイルですof
は出力ファイルですこれを行うことをお勧めします(POSIX準拠のシェルで動作するはずです)。
> test.txt
あなたが本当にそれをviでやりたいのなら、あなたはそうすることができます:
カーソルが最初の行にある場合(そうでない場合は、次のように入力します:gg
または1G
)の場合、dG
を使用できます。現在の行からファイルの終わりまでのすべての行を削除します。そのため、ファイルからすべての行を確実に削除するために、ggdG
(コマンドモード中)のように両方を混在させることができます。
または%d
Exモードでは、コマンドラインの例:vim +%d foo.bar
。
私は怠惰な男で、それをシンプルに保つのが好きです。 ggdG
はShift
を含む5つのキーストロークです
gg
はファイルの最初の行に移動し、d
はd
elete動詞の開始、G
はファイルの最後に移動する動きですファイル。詳細には、ファイルの先頭に移動し、タイルの最後まですべてを削除します。
ファイルの先頭に移動して、 dG。
私はいつもggVG
を使います
gg
は現在の編集ファイルの先頭にジャンプしますV
(大文字のv)は現在の行を選択します。この場合、現在の編集ファイルの最初の行G
(大文字のg)はファイルの最後にジャンプします。この場合、最初の行を選択したので、G
はこのファイルのテキスト全体を選択します。次に、d
またはx
を押すだけで、すべての行を削除できます。
別の解決策:
truncate -s 0 file
質問では、echo > test.txt
は空のファイルではなく、1つの改行を含むファイルを作成することに注意してください。
シェルからは、echo -n > test.txt
または: > test.txt
の使用を検討してください。
通常はvi編集コマンド(ggdG
を使用)を使用しますが、次のように現在のファイルへの参照を使用してシェルを呼び出すこともできます。
:!:>%
ggdG
と同じくらい簡潔ですが、入力するのが難しく、変更したファイルを再読み込みすることも確認する必要があるため、この場合は特にお勧めしませんが、シェルの使用方法を知っています。このようなviからのコマンドは便利です。
それを分解する:
:
viコマンドを開始します!
シェルコマンドを初期化する:
これは空の出力を持つシェル組み込みコマンドです>
出力をリダイレクトします%
viは、これを現在のファイルの名前に置き換えます提案されている:1,$d
ももちろん良いものであり、私がそこにいる間も1GdG
があります。
タイプ:
および%d
(挿入モードではありません。そうであれば、最初にエスケープを押してください)