Vimでファイルを編集していると、無意識のうちにスペースや改行キーを入力したのか、末尾のスペースや無駄な空白行が入ってしまうことがよくあります。
この記事では、Vimエディタで行頭(先頭)・行末(末尾)の空白・空白行を削除するコマンドについて解説します。Vimエディタのバージョンは8.1を利用しています。
事前準備:空白文字を表示する
はじめにスペース、タブの空白文字がわかりやすいよう、次のコマンドを用いて可視化しておきます。
:set list
:set listchars=tab:>.,space:-,
タブは「>,,,,,,,」、半角スペースは「-」で表示されるようになっています。
空白の可視化についての詳しい内容は、次のページを参考にして下さい。
行頭の空白を削除する方法
行の先頭のスペース・タブの空白文字を削除するには、ノーマルモードの状態で次のコマンドを実行します。
:%s/^\s\+//
スペースのみ削除したい場合は、「\s」を半角スペースに置き換えてください。
:%s/^ \+//
上記のコマンドを実行すると行頭の空白を削除することができます。
コマンドの解説
行頭の空白を削除するには、行頭の空白文字を何もない状態(削除)に置換することで実現できます。
そのため、:%sを使って開いているファイル内の行頭の文字を置換します。
:%s/置換前の文字列/置換後の文字列/
置換前・置換後の文字列には正規表現が利用できるため、次のようにそれぞれ指定します。
- 置換前の文字列: 「^\s\+」
行頭の半角スペースの正規表現を置換前の文字列に指定しています。- ^: 行頭
- \+: 直前の文字(ここでは半角スペース)の1回以上の繰りかえし
- 置換後の文字列:なし
置換後の文字列に//と何も指定しないと、置換前の文字列を削除します。
行末の空白を削除する方法
行の末尾のスペース・タブの空白文字を削除する場合は、ノーマルモードの状態で次のコマンドを入力します。
:%s/\s\+$//
半角スペースのみ削除したい場合は、「\s」を「 (半角スペース)」にします。
上記のコマンドを実行すると行末の空白を削除することができます。
コマンドの解説
行末の空白を削除したい場合も、行頭の空白と同様に置換する方法で考えます。
:%s/置換前の文字列/置換後の文字列/
- 置換前の文字列: 「\s\+$」
行末の空白は正規表現で上記のように表すことができます。- \s:空白(タブとスペース)を表す正規表現
- \+:直前の文字(ここでは=スペース)の1回以上の繰りかえし
- $:行末
- 置換後の文字列: なし
置換後の文字列を指定しないことで、置換前の空白の文字列を削除します。
空白行を削除する方法
スペースやタブの空白文字しか存在しない行を削除するには、ノーマルモードの状態で次のコマンドを入力します。
:g/^\s*$/d
上記のコマンドを実行すると、空白のみの行を削除することができます。
コマンドの解説
「g」コマンドを使うことで、特定の検索パターンにヒットした行にVimコマンドで処理することができます。
:g/検索パターン/コマンド
- 検索パターン: 「^\s*$」
空白行は上記の正規表現で表せます。- ^:行頭
- \s:空白(タブとスペース)を表す正規表現
- *:直前の文字(ここでは\s=空白)の0回以上の繰りかえし
- $:行末
*で、0回以上を指定することによって、改行のみの行も併せてマッチさせます。
- コマンド: d
カーソル行を削除します。
以上、Vimエディタで行頭(先頭)・行末(末尾)の空白や空白行を削除するコマンドの紹介でした。
コメント