空白行を削除する


674

Vimで空白行を削除するには、どのコマンドを実行できますか?

回答:


1232
:g/^$/d

:g正規表現に一致する行でコマンドを実行します。正規表現は「空白行」で、コマンドは:d(削除)です


38
soulmergeに感謝します。これは私のお気に入りの答えです。実際に:gコマンドの機能を説明しているからです。
Tim Swast、2011

4
これにより、すべての空行が削除されます(空白文字は含まれません。)。ただし、これは固有の要件ではない場合があります。誰かがまだ空の行の1つを保持している場合があります。:%!cat -s選択の可能性があります
。– coanor

2
:g / ^ \ s * $ / dの行に「可能なすべてのスペース文字」の正規表現
oyd11

180

それを見つけた、それは:

g/^\s*$/d

出典:Power of g at vim wikia

の簡単な説明 :g

:[range]g/pattern/cmd

これは、パターンに一致する各行に対してExコマンドcmdを実行することにより、指定された[範囲](デフォルトのファイル全体)に作用します(Exコマンドは、削除などのコロンで始まるコマンドです)。cmdを実行する前に、現在の行に " "が設定されています。:d.


9
いいね。ただし、空白行ではありません。
innaM 2009

13
ああ、はい、これは空白文字のみを含む行に一致します。ソウルマージの答えを受け入れます。
nearly_lunchtime

16
空白行と空白のみで構成される行に一致する必要があります...(*は0または\ sの複数のインスタンスに一致します...)?
monojohnny

14
私は純粋な空白はまさに空白行であると主張しますが、空白は実際には空行ではありません、そう思いませんか?;)
カサポ

4
オックスフォードは、空白は「文書に記入するために残されたスペース」であると言います。あなたがそうかもしれないようにそれを解釈してください、しかしこれはまさに私が探していたものです。ありがとう!
Joe Tricarico 14

53
:v/./d

または

:g/^$/d

または

:%!cat -s

7
:v /./ d(タイプするのがより簡単です)ですっきりしたトリックですが、その後:nohlを実行する必要があります。
Claes Mogren、

1
@ClaesMogrenまたはcontrol-lで跳ねる
jm3

6
@zladuricに応じvim.wikia.com/wiki/Power_of_gそれは逆のグローバル(それが一致しないすべてのものの上にコマンドを実行して)だ
adam_0

44

以下は、複数の空白行のみを削除し(それらを単一の空白行に減らす)、単一の空白行をそのまま残すために使用できます。

:g/^\_$\n\_^$/d

3
誰かがトークンの意味を説明できますか?(それで、それはどのように機能するのですか?)ありがとう。
PAStheLoD 2014

5
\_$は、パターン内で使用できる行末を意味します(パターン$の最後でのみ使用できます)。同じことは、行の開始\_^を意味、パターン内の任意の場所で使用できます。したがって、パターンは空の行、改行、および空の行に一致します。Vim正規表現のヘルプページを参照してください
WiktorStribiżew2016年

1
同じことを行う別の方法::g/^$/,/./-j
SergioAraujo

14
  1. すべての空白行を削除する方法

    :%s,\n\n,^M,g
    

    (空の行がすべてなくなったので、これを複数回実行してください)

  2. SINGLE空行を残してすべての空白行を削除する方法

    :%s,\n\n\n,^M^M,g
    

    (これを複数回行う)

  3. MAXIMUMで2つの空行を残してすべての空白行を削除する方法

    :%s,\n\n\n\n,^M^M^M,g
    

    (これを複数回行う)

^ Mを入力するには、ウィンドウでcontrol-Qとcontrol-Mを実行する必要があります


2
\r代わりに使用することもできCtrl-Mます。
ダッシュ

6

どうですか:

:g/^[ \t]*$/d

5

vimでperlを操作します。

:%!perl -pi -e s/^\s*$//g


私のperlは少し錆びているかもしれませんchompが、仕事もしませんか?
Mark K Cowan


5

この関数は、2行以上の空白行のみを削除し、vimrcに以下の行を配置してから、\ dを使用して関数を呼び出します

fun! DelBlank()
   let _s=@/
   let l = line(".")
   let c = col(".")
   :g/^\n\{2,}/d
   let @/=_s
   call cursor(l, c)
endfun
map <special> <leader>d :keepjumps call DelBlank()<cr>

4

このページでいくつかの回答を試しましたが、多くの回答がうまくいきませんでした。たぶん私はWindows 7でVimを使用しているためです(モックしないでください、私を残念に思ってください:p)?

これが、Windows 7のVimで動作する最も簡単な方法です。

:v/\S/d

Vim Wikiaの長い回答は次のとおりです:http : //vim.wikia.com/wiki/Remove_unwanted_empty_lines


3
:g/^\s*$/d
^ begin of a line
\s* at least 0 spaces and as many as possible (greedy)
$ end of a line

ペースト

:command -range=% DBL :<line1>,<line2>g/^\s*$/d

.vimrcで、vimを再起動します。コマンド:5,12DBLを使用すると、5行目から12行目までのすべての空白行が削除されます。私の答えは最良の答えだと思います!


回答を投稿するときは、変更または追加した内容、または動作方法などを説明してください。あなたの答えは解決策であるかもしれませんが、これを読んだ一部の人々は、それが何を意味するのか、それがどのように機能するのかを理解していない可能性があります。そして英語でそれをしてください。
Tim、

ここではそれは重要ではありません。この質問の回答は5年前に受け入れられました
Tim

私はsoulmergeの答え:g / ^ $ / dが最良の答えではないと思います。そして、:g / ^ \ s * $ / dで彼の答えを改善するために編集します。しかし、「このポーズのすべての編集を表示」で編集を見ることができないのはなぜですか?
cn8341 14

私の回答は彼の回答よりも優れており、誰が私の回答を拒否し、なぜ私の回答が拒否されたのですか?
cn8341 14

2

テキストに二重の行間が空いている場合、このコマンドは二重の間隔を削除し、既存の繰り返し空白行を1つの空白行にマージします。これは、行の先頭で^^^の一時的な区切り文字を使用しているため、これがコンテンツと衝突する場合は、別のものを選択します。空白のみを含む行は空白として扱われます。

%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*

2

プレスdelete挿入モードでのキーは、空白行を削除します。


1

これは私のために働きました:

:%s/^[^a-zA-Z0-9]$\n//ig

基本的に、数字や文字がない行をすべて削除します。リストのすべての項目に文字が含まれていたため、空白行がすべて削除されました。

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