入門vi 第6版のexコマンドのまとめ
exによる基本編集コマンド
正式コマンド名 |
短縮形 |
コマンド機能 |
delete |
d |
行の削除 |
move |
m |
行の移動 |
copy |
co または t |
行のコピー |
行範囲の指定例
:3, 18d |
3〜18行目を削除 |
:160, 224m23 |
160〜224行目を23行目のあとに移動 |
:23, 29co100 |
23〜29行目を100行目のあとにコピー |
※ 行番号について
:set number または :set nu |
行番号を表示 |
:set nonumber または :set nonu |
行番号を非表示 |
:1, 10# |
1〜10行目の行番号を表示 |
:= |
行の総数を表示 |
:.= |
カレント行の行番号を表示 |
:/pattern/= |
patternにマッチする最初の行の行番号を表示 |
行アドレスシンボル
行アドレスシンボル |
意味 |
.(ドット) |
カレント行 |
$ |
ファイルの最終行 |
% |
ファイルのすべての行 |
-[n] |
1行前またはn行前 |
+[n] |
1行後またはn行後 |
例
:., $d |
カレント行からファイルの最後まで削除 |
:20, .m$ |
20行目からカレント行までをファイルの最後に移動 |
:%d |
ファイル中のすべての行を削除 |
:%t$ |
すべての行をコピーして、ファイルの終わりに追加 |
:., .+20d |
カレント行から次の20行を削除 |
:226, $m.-2 |
226行目からファイルの終わりまでを、カレント行の2行前に移動 |
:., +20# |
カレント行から20行先の行まで行番号を表示 |
検索パターンを用いた例
:/pattern/d |
次にpatternが出現する行を削除 |
:/pattern/+d |
次にpatternが出現する行の下の行を削除 |
:/pattern1/, /pattern2/d |
pattern1を含む最初の行からpattern2を含む最初の行までを削除 |
:., /pattern/m23 |
カレント行からpatternを含む最初の行までのテキストを削除して、23行目の後ろに挿入する |
:g/pattern |
ファイル中で最後に出現するpatternを見つける(そこに移動する) |
:g/pattern/p |
patternを含むファイル中のすべての行を見つけて表示する |
:g!/pattern/nu |
patternを含まないファイル中のすべての行を見つけて表示し、見つかった各行の行番号を表示する |
:60, 124g/pattern/p |
60〜124行目からpatternを含むすべての行を見つけて表示する |
exコマンドの組み合わせ
exでは縦棒(|)がコマンドセパレータとなり、1つのexプロンプトで複数のコマンドを実行できる。
(UNIXのコマンドと同じ)
ファイルのセーブと終了
:w |
viを終了せずにバッファをファイルに保存する |
:q |
viを終了する |
:wq |
ファイルを保存して終了する |
:x |
ファイルを保存して終了する。ファイルが変更された場合にのみ書き込みが実行される |
:w newfile |
newfileというファイルに保存する |
:230, $w newfile |
230行目からファイルの終わりまでをnewfileに保存 |
:., 600w newfile |
カレント行から600行目までをnewfileに保存 |
:340, $w >> newfile |
340行目からファイルの終わりまでをnewfileに追加 |
:w %.new |
[現在のファイル名].newというファイルに保存する |
別のファイルの読み込み
:read(または :r) filename |
filenameを読み込む |
:$r filename |
filenameを現在のファイルの一番最後に入れる |
:0r filename |
filenameを現在のファイルの先頭に入れる |
:/pattern/r filename |
filenameを現在のファイルのpatternを含む行の後に入れる |
複数ファイルの編集
最初にviを起動するときに複数ファイルを指定して、あとでexコマンドでファイルを切り替える。
具体的には、
$ vi file1 file2
とすると、まずfile1が編集対象となる。編集が終わったら、:wで保存し、:nを使って次のファイル(file2)を読み込む。といった感じ。
:n |
引数リストの次のファイルに移動 |
:args(または、:ar) |
指定されたファイルの一覧を表示(現在のファイルは角かっこで示される) |
:rewind(または、:rew) |
指定された最初のファイルが現在のファイルになる |
:e filename |
filenameの編集を行う |
:e #(または、[Ctrl] + ^) |
もう一方のファイルの編集を行う |
:e! |
編集内容を放棄して、現在のファイルを最後に保存した内容に戻す |