vi

私が普段使用しているエディタは、xemacs, Meadowなのだが、場合によってはviを使う。これは、emacs系エディタが使えない状況に対応するためで、emacsよりは使える環境が多い(つまり汎用的な)道具だ。
私が大学の頃使っていた SONYのNEWS-OS 4.2では、シングルユーザモードでは ed しか使えなかったので、一応 ed や ex でも /etc/ のファイルの編集くらいはできる。(今では不必要なスキルかな)

私が使用するviのコマンド
viのコマンドは、数字に続けて入力すると数字の回数繰り返す。
h, j, k, l
カーソル移動コマンド。左下上右の順。
^, $
行頭、行末
Ctrl + D, Ctrl + U
ページダウン、ページアップ
i
カーソル位置から文字を挿入するモードにする。"abc" の b にカーソルがある場合、aとbの間に入力した文字が挿入される。挿入モードから抜けるのは ESC。
a
カーソル位置の次から文字を挿入するモードにする。"abc" の b にカーソルがある場合、bとcの間に入力した文字が挿入される。
x, dw, dd
1文字、1単語(カーソル位置から)、1行削除する。x以外はESCで終了。
r, cw, cc
1文字、1単語(カーソル位置から)、1行を置換する。r以外はESCで終了。
yw, yy(ヤンク)
1単語(カーソル位置から)、1行をコピーする。
p(プット)
カーソル位置にコピーした文字列をペーストする。
o, O
oは、カーソル行の次に空行を追加して、挿入モードに。Oは、カーソルの前の行。
u
直前の変更を元に戻す。戻すためには、カーソルを移動しても駄目。(Uだと、カーソルがその行に入ったときの状態に戻せる)
m?
カーソル位置をマークする。?の部分には任意のアルファベットを書く。
マーク位置から、次のカーソル位置までの領域を、d'?やy'?などで、削除やコピーできる。(?はマークしたときのアルファベット)
ちなみに、私は maとy'aしか使ったことがない(笑)
ZZ
保存して終了。
exコマンド
viで : を押すとステータスラインでコマンド入力待ちになる。ここで入力できるコマンドをexコマンドと呼ぶ。ちなみに、exとは vi のラインエディタモードの名前。コマンドラインから ex で起動できる。exモードから vi と打つと、スクリーンエディタであるviに戻る。ただし、端末がスクリーン表示に十分な機能を持っていない場合は、viで起動してもオープンモードと言うexのようなモードになる。
:w
ファイルを保存する。後ろに!を付けると、書込み禁止のファイルでも書く(権限があるときだけ)。私は、このwで保存して、Ctrl+Zでサスペンドして効果を試し、fgで編集に戻ると言う事を良くやる。try & error をするときには、エディタをいちいち終了してはいけない。
また、"w ファイル名"で別名で保存できる。
:q
ファイルを保存せずに終了する。最後に保存してからファイルが変更されているとviが文句を言うが、q!なら強制終了できる。
:wq
ファイルを保存して終了する。wq!で強制保存して終了。
:数字
数字の行番号の行へ移動する。
:$
最後の行へ移動する。
/文字列
:ではなく/に続けて文字列を入力すると、カーソルから数えて次に文字列が現れるところへカーソルが移動する(検索)。続けて、nを押すと次に同じ文字列が現れるところへ移動する。
:s/置換元/置換先/
現在行で置換を行う。":範囲s/置換元/置換先/"の形式で特定の範囲で置換を行うこともできる。置換は、一つ置換すると終わるが、":範囲s/置換元/置換先/g"と後ろにgを付けるとすべてのパターンを置換する。
範囲は、以下のように指定する。
55行目
5-105行目〜10行目
5,105行目と10行目
5-$5行目から最終行
%ファイル全体
検索や置換のパターンには、正規表現が使える。
viはあまり使えてないので、覚えて普段使うコマンドもたいしてないだろうと思っていたが、列挙してみるとそれなりになるものだ。(もっとも、emacsで同じことをやろうとしたら、多すぎて書ききれないだろうが)
false@wizard-limit.net