Re: Emacs vs vi
fj.editor.viの記事<m3acyx5c9m.fsf@kzin.dip.jp>で
co_mon@ybb.ne.jpさんは書きました。
> そういや terminfo のマニュアルに vi でのテスト方法が載ってたっ
> けなぁと思って、手もとのマシンで man terminfo したら、まだあ
> りました。
> ...
> このへんが、けっこうめんどうな調整をする時のコツだったりする
> んですかね?(やったこと無いんで単なる疑問です)
描画ルーチンにとって、大量の(当時では:-)メモリ転送
が発生する行挿入・削除というのはかなりの負担になる
ので、それで間に合うように調整すればほかのたいてい
の処理は大丈夫、という意味でしょう。
ただ、行のスクロールはリングバッファを使ってメモリ
転送を減らせるので、実際のメモリ書き換えが大量に発
生する処理のほうがきびしいかもしれません。termcap/
terminfoでは画面クリアには待ち時間を設定できるので
よいのですが、Emacsや最近のviのように行長の制限が
あまりないものでは、非常に長い行の先頭付近を1文字
ずつ連続して削除するような処理をすると画面が乱れる
ことになりそうです。当時のviは行の最大長が511バイ
ト程度だったのであまり問題にはなりませんでしたが...。
ところで、VT100は実際には行の挿入・削除という画面
制御機能を持っておらず、かわりにスクロール領域の変
更という機能を使っていました。行の挿入・削除は現在
行から画面最下行までを一時的にスクロール領域として
スクロール操作をすることで実現していたわけです。私
はこのスクロール領域変更機能が大好きだったのですが、
ANSI X3.64では採用されず、それ以降のANSI端末エミュ
レータもこの機能をもつものは多くありませんでした。
行の挿入・削除機能だけを使ってエディタを実装すると、
たとえばEmacsの反転行のように画面下部に位置が固定
された領域があるとき、画面の一部をスクロールするに
はカーソル行で行を削除したあと固定領域の直前に行を
挿入しなくてはならず、固定領域がガタガタ動くのがと
ても気になります。
> ところで、vi を使っているっていう方は、どういう vi を使って
> るんでしょうかね?
> 私は vi か nvi しかまともに使えません。
> vim は set compatible(だったかな?)してもストレスがたまります。
私はvimですね。
むかしPC-9801のMS-DOSでviを使いたくて、機能の小さ
いviクローンだったstevieを日本語化し、さらに改良し
ていました。それでサブセット慣れしてしまったことと、
vimはstevieの末裔なので、やはりどこか微妙なふるま
いが似ているところがあるのでした。
> elvis (スペルはこうでしたっけ?) だったか、Emacs のモー
> ドラインみたいなのがつくようなのだと、10秒と持ちません。
それってMicroEMACSか何かをvi風に改造したやつではな
かったですか? elvisにはモードラインはなかったと思
います。とはいえ、長い行が折り畳まれず横スクロール
するのと画面更新の方針がオリジナルviと異なるのが気
になって、elvisもあまり好きではなかったですが。
--
太田純(Junn Ohta) (株)リコー/新横浜事業所
ohta@sdg.mdd.ricoh.co.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735