exコマンド

入門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! 編集内容を放棄して、現在のファイルを最後に保存した内容に戻す