vi にモードはいくつあるか?
最近初めて Solaris の vi を使って気がついたのだが、set showmode したときのモード表示がたくさんある。
インサートモードに入るのに使ったキーによって、次のように変わる。
i, I INSERT MODE
a, A APPEND MODE
o, O OPEN MODE
c モーション(1行以内) CHANGE MODE
cc, c モーション(複数行) INPUT MODE
traditional vi のソースを見てみると、確かにこのように書かれていた。
switch (mode) { case 0: str = " "; break; case 'A': /*FALLTHROUGH*/ case 'a': str = "AAPPEND MODE"; break; case 'C': /*FALLTHROUGH*/ case 'c': str = "CCHANGE MODE"; break; case 'O': /*FALLTHROUGH*/ case 'o': str = "OOPEN MODE"; break; case 'R': str = "RREPLACE MODE"; break; case 'r': str = "rREPLACE 1 CHAR"; break; default: str = "IINSERT MODE"; }
INPUT MODE はどこで追加されたのだろう?
nvi で試してみると、OPEN MODE, INPUT MODE はないものの、Insert, Append, Change は区別されていた。
vile, elvis は INSERT MODE しかなかった。
vi がこんなに芸が細かいとは、vim から入った私にはけっこう驚きだった。
vim は r を押したときもモード表示が変わらない。ここは変わってくれた方が親切だと思う。
[追記:2006-11-22]
Solaris で strings `which vi` してみたら「SUBSTITUTE MODE」という単語も出てきた。これは使われていないのだろうか。s, S では c と同じになったが。