トップ > 初級編 > その他 >
exコマンドの範囲指定について

exコマンドでの範囲指定について

この記事では、exコマンドでの範囲指定について説明します。 すでに説明済みの内容についての『おさらい』と、まだ説明していない『検索での範囲指定』について解説します。

exコマンドでは行単位で範囲を指定できる

exコマンドには、範囲を指定することができる命令が多くあることはすでに説明しました。 また、範囲指定は、行の単位で行われることも説明済みです。

範囲を指定することで、その範囲の行のみがコマンドの適用対象となります

例えば、

:1,5s/old/new/

とすることで、1行目から5行目のみを対象に "old" を "new" に置換することができます。

省略した場合に対象となる範囲

exコマンドの範囲指定は、必ず指定しなければならないものではありません。 範囲指定は省略することができます

省略した場合に、どの行が対象となるのかはコマンドによって異なります。 例えば、

:s/old/new/

のように、substitute コマンド(exコマンド)で省略した場合には、現在の行のみが対象となります。 この例の場合には、現在の行のみを対象に "old" が "new" に置換されます。

しかし、

:w

のように、write コマンド(exコマンド)で省略した場合には、全行が対象となります。 この例の場合には、全行がファイルに保存されます。

このように、範囲指定を省略した場合に対象となる行は、コマンドによって異なります

exコマンドの範囲指定での特殊表記

これもすでに説明しましたが、exコマンドの範囲指定では特殊表記が使えます。

範囲指定で使える特殊表記 説明
.
(ピリオド)
現在の行(文字カーソルがある行)
. + <数字> 現在の行から<数字>行下の行
. - <数字> 現在の行から<数字>行上の行
$
(ドル記号)
最後の行

また、効率良く作業できるよう、以下のような省略した範囲指定も行えます。

省略表記 説明
1 , $
(数字の1) (カンマ) (ドル記号)

↓省略表記

%
(パーセント記号)
先頭行から最終行を表します。
つまり全ての行を意味します。

カンマで区切らない指定方法

exコマンドの範囲指定は、


<開始行>,<終了行>

という形式で指定しますが、これ以外に、


<対象行>

という形式でも指定することができます。 この場合には、その行のみが対象になります

例えば、

:13s/old/new/

とした場合には、13行目のみが対象となります。 この例の場合には、13行目のみを対象に "old" が "new" に置換されます。

  
もちろん特殊表記も使えます。

検索での範囲指定

exコマンドの範囲指定は、テキスト検索で行を指定することができます。 『テキスト検索で行を指定する』というのは、検索テキストに一致する行を、開始行または終了行(または対象行)とする方法です。

前方(下方)検索することも、後方(上方)検索することもできます。 どちらの方向を指定した場合も、文字カーソルの位置から最初に一致した行が対象となります

テキスト検索で行を指定する場合は、検索テキストを /(スラッシュ) または ?(クエスチョン) で囲みます前方検索する場合は /(スラッシュ) で、後方検索する場合は ?(クエスチョン) で囲みます

例えば、

:/start/,/end/s/old/new/

とすると、文字カーソルから前方(下方)で最初に見つかった "start" を含む行から、同じく文字カーソルから前方(下方)で最初に見つかった "end" を含む行までを対象に "old" が "new" に置換されます。

なお、テキスト検索で行を指定する場合も、対象行のみを指定することができます。

例えば、

:/match/s/old/new/

とすると、文字カーソルから前方(下方)で最初に見つかった "match" を含む行を対象に "old" が "new" に置換されます。

検索での範囲指定でも行番号の加算と減算が使える

検索での範囲指定でも、+(プラス) または -(マイナス) による行番号の加算または減算が行えます

例えば、

:?^$?+1,/^$/-1w 新文書.txt

というコマンドは、文字カーソルの後方(上方)にある最初の空行の次の行から、文字カーソルの前方(下方)にある最初の空行の前の行までを "新文書.txt" というファイルへ出力します。

つまり、文字カーソルがある段落をファイルへ出力する例です。 なお、段落は空行で区切られているということが前提となります。

ページの先頭へ
 

まとめ

exコマンドの範囲指定は、":17s/old/new/" のように対象行のみを指定することもできます。

また、exコマンドの範囲指定は、テキスト検索で行を指定することができます。 テキスト検索での行の指定は、検索テキストを /(スラッシュ) または ?(クエスチョン) で囲みます。

/(スラッシュ) で囲むと前方検索、?(クエスチョン) で囲むと後方検索になります。 前方検索でも後方検索でも、+(プラス) または -(マイナス) で行を加減算することができます。

ページの先頭へ
 
 
 
-
-
-
-