vimのコマンドには適用する範囲を指定出来るものがあります。
たとえば:%s/hoge/fuga/g
の%
の部分が範囲指定になります。
基本
文字 | 意味 |
---|---|
% |
バッファ全体 |
n |
n行目 |
n,m |
n行目からm行目まで |
.,m |
現在カーソルがある行からm行目まで |
.,$ |
現在カーソルがある行から最終行まで |
.+3,$-5 |
現在カーソルがある行+3行目から最終行-5行目まで |
'a,'b |
マーク'a がある行からマーク'b がある行まで |
'<,'> |
ビジュアル選択されている行 |
ビジュアル選択の開始位置はマーク'<
、終了位置は'>
で参照出来るので
結果として'<,'>
でビジュアル選択している行を示すことになります。
(ただし、ビジュアル選択されている「範囲」ではなく「行」であることに注意)
パターンマッチ
/
や?
で検索したときのように、範囲にもパターンを使用することが出来ます。
文字 | 意味 |
---|---|
/hoge/,/fuga/ |
「現在のカーソル位置」から最初に/hoge がマッチした行から、「現在のカーソル位置」から最初に/fuga がマッチした行まで |
/hoge/,?fuga? |
「現在のカーソル位置」から最初に/hoge がマッチした行から、「現在のカーソル位置」から最初に?fuga がマッチした行まで |
/hoge/;/fuga/ |
「現在のカーソル位置」から最初に/hoge がマッチした行から、「/hoge がマッチした行」から最初に/fuga がマッチした行まで |
/hoge/;+3 |
「現在のカーソル位置」から最初に/hoge がマッチした行から3行 |
/hoge/+1,$ |
オフセットや他との組み合わせも使える |
/
と?
の違いは通常と同じで順方向に検索するか逆方向に検索するかです。
区切りの,
と;
の違いは、終了位置をパターン指定する際(表でいう/fuga
等)の検索基準位置の違いです。
,
は現在のカーソル位置から検索するのに対し、;
は前にマッチした行から検索を始めます。
細かい話
以下のヘルプに詳しく載ってます。
:help 10.3
:help cmdline-range