先月、私は2つの歴史的な質問を調査しました。もともとはツイッターにスレッドとして投稿していましたが、今は記事として複製しています。
vimがhjklを使用する理由
質問:vimがナビゲーションに矢印ではなくhjklを使用するのはなぜですか?
典型的な説明:指がホームローから離れないようにするため。
歴史的説明:ビル・ジョイは、個々の矢印キーがないADM-3Aビデオ端末でviを開発しました。ADMキーボードを見ると、hjklキーに矢印があります。Joyはviにも同じロジックを使用し、後でVimにも同じロジックを使用しました。
さらに歴史的な説明:実際、ADMでhjklが矢印に使用されていたのは奇妙です。なぜこれらの文字なのか?
これには大きな理由があります。ASCII文字テーブルの1967バージョンを見てください。
7 . 32 — " ", , -. , QWERTY-, , . "" , . . , "backspace", ctrl+H ( ^H). 100 1000 000 1000. , , ^J.
ADM, , "backspace" ADM " " . ^H ^J "" "", ^K ^L "" "". ADM hjkl , vi.
JavaScript
: JavaScript' date API 0-11, 1-12. ?
: . , . , date.GetMonth() .
: Java, , , C.
: C ? , C, , ?
tm_date
ANSI C89, . C , Unix-. Unix, , <ctime.c>
C , .
#define SEC 0
#define MIN 1
#define HOUR 2
#define MDAY 3
#define MON 4
#define YEAR 5
#define WDAY 6
#define YDAY 7
#define ISDAY 8
ctime -- (SMH), HMS. , , . Unix 5 , :
int *t;
{
register char *cp, *ncp;
register int *tp;
cp = cbuf;
for (ncp = "Day Mon 00 00:00:00 1900\\n"; *cp++ = *ncp++;);
ncp = &"SunMonTueWedThuFriSat"[3*t[6]];
cp = cbuf;
*cp++ = *ncp++;
*cp++ = *ncp++;
*cp++ = *ncp++;
cp++;
tp = &t[4];
ncp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[(*tp)*3]; // (a)
*cp++ = *ncp++;
*cp++ = *ncp++;
*cp++ = *ncp++;
cp = numb(cp, *--tp); // (b)
cp = numb(cp, *--tp+100); // (c)
cp = numb(cp, *--tp+100);
cp = numb(cp, *--tp+100);
cp =+ 2;
cp = numb(cp, t[YEAR]);
return(cbuf);
}
. (a). , , , , . , (b) HMS (c), . SMH ( ). , , , .
, . , Unix PDP-7. 1970- . , , 10% RAM!
, CPU, — , , . , , (b), .
: MDAY ( ) , YDAY ( ) — . " ": . ( ).
. , "" . hjkl, , ASCII- . tm_date, Unix, , , . — . , .
. , . , - , , - . , , "", , . , , , " ". , , "" .
. , — . , , , , . , ADM-3A, . , .
. , , , . , , , , . .