Skip to main content.

Weekly "Keyboard World"

週刊「鍵盤世界」

5. Flying Dutchman

Esc なんてなくなってしまっても構わない。我々には Ctrl + [ があるのだから …ある UNIX 使いの言葉 ― 1997.9.22 掲載

さて、前回に引続きキーボードの上で定位置もなく彷徨うキーの話をしましょう。 前回の最後で書いたように、今回は \ / |Esc キーについて取り上げます。

\」や「|」っていうのは、日常生活で文章を作る際にはまず使わない文字です。 このような文字が ASCII の中に入っているのをみると、計算機というものはやはり計算に用いる機械であって、 ASCII 制定当時は「計算機で文章を書いたりする」なんてコトは本当に夢物語だったんだなぁ、などと思うのです。

前回「『`』も『~』も、UNIX 使いは使います」などということを書きましたが、 「\」や「|」も同様です。具体的には、こんなふうにして使います。

\

…すみません。UNIX 使いの私はこの文字が「バックスラッシュ」 として見えることを期待していたのですが、大多数の環境では、きっと「円記号」に見えてしまうのでしょうね。 すると、私が直前に書いた「日常生活で文章を作る際にはまず使わない文字」っていう主張は…。

\」が環境によって円記号に見えたり、バックスラッシュに見えたりするのは、 環境によって利用される文字セットが異なるためです。 尤も、この辺りの話は始めると長くなってしまいますし、キーボードの話からも遠ざかってしまいますので、またいずれ。

さて、「\」の使い道なのですが、もちろん MS-DOS でのディレクトリの区切り記号に…いやいや。

UNIX では通常、「\」をエスケープキャラクタとして使います。 「エスケープキャラクタ」というのは、「この文字を別の文字の直前に置くと、 その文字の特殊な意味を打ち消す力がある」という「約束」がされた文字のことです。

これはあくまでも「約束」でして、エスケープキャラクタ自身にそんな力があるわけではありません。 プログラムを作る人間がそのように実装しているからこそ、そのような機能が実現されているわけです。

例えば、UNIX でコマンドを入力する場合のことを考えてみましょう。 UNIX でコマンドを受けつける「シェル」では、通常「$」という文字には特殊な意味が定義されています。 ですから、フツーには「$」っていう記号は使えないわけなんですね。

でも、「『$』という文字を『$』という文字として使いたい」という要求も当然あるわけです(誰かが、「Fuckin_Micro$oft」などというファイルを作った場合とかね)。そんなときは、

Fuckin_Micro\$oft

と入力するすと、「$」の持つ特別な意味は消えて、 「$」を「$」という文字として扱うことができるわけです。

変わった使い方としては、「改行の直前に『\』を置くと、改行しなかったことに出来る」というものがあります。 これは、改行文字の機能をエスケープキャラクタである「\」が打ち消したからです。 例えば、UNIX のディレクトリ構造の中から条件に合致するファイルを検索する find コマンド。このコマンドを使って、

  • 今いるディレクトリの下の、「html」ディレクトリの下にあって、
  • ファイルサイズが 400 バイト以上で、
  • ファイル名の最後が「.html」がで、
  • gian.html よりも新しい

なんていうファイルを検索する場合、こんな書式になります。

find ./html -size +400c -name "*.html" -newer./gian.html

このように長いコマンドを入力していると、適当なところで改行を入れたくなりますね。 しかし、ただ単に改行を入れたのでは、改行を入れた部分から先が別のコマンドとして認識されてしまいます。 そう、そのようなときこそ、「\」の出番なのです。

find ./html -size +400c -name "*.html" \
  -newer ./gian.html

このような感じになります。途中の改行は「\」のお蔭で、 「改行なんてしてないよ」と認識されるのです。

|

意外にこの記号の読み方を知らない人が多いのですが、 この記号には「ヴァーティカル・ライン(vertical line、縦線)」という立派な名前が与えられてます。 「ヴァーティカル・バー」や、「縦棒」と呼ぶ人もいますが、これこそ、日常生活ではまず使わない文字ですね。

UNIX では、パイプを実現するためにこの文字を使います。 「パイプ」というのは、「あるコマンドが吐き出した出力を、別のコマンドの入力として利用する」ことを実現する機能です。

例えば、「現在のディレクトリにあるファイルの一覧を表示する」ls コマンドの出力を、「入力行の行数、単語数、文字数をカウントする」wc コマンドに引き渡すには次のようにします。

ls | wc

ls でファイルの一覧が表示され、wc がその行数をカウントします。 結果として「ディレクトリの中に幾つのファイルがあるか」が表示されます。

さて、そんな「\」と「|」は、通常 \ / | というセットでキーボード上に割り振られています。 しかし、殆ど使われない(円記号は別ですけど)キーだということもあって、その扱われ方は ~ / ` 並に悲惨です。

まず、一般的な位置としては、次の 3 つがあります。 尤も、前回説明した ~ / ` の位置とバッティングしている場合もあるのですが。

\ / | の配置パターン: その 1
!
1
@
2
#
3
$
4
%
5
^
6
&
7
*
8
(
9
)
0
_
-
+
=
|
\
\ / | の配置パターン: その 2
A S D F G H J K L :
;
"
'
|
\
\ / | の配置パターン: その 3
Q W E R T Y U I O P {
]
}
]
|
\

しかし、これらの「比較的マトモ」な配置以外にも

\ / | の配置パターン: その 4
O P {
]
}
]
Ret
urn
Del
K L :
;
"
'
|
\

や、

\ / | の配置パターン: その 5
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 |
\
Del

などという配置もあり、よく分からないことになってしまっています。

前回「変な位置に ~ / ` が置かれている」と説明した Apple Keyboard ですが、\ / | に関しても、

\ / | の配置パターン: その 6
Caps
Lock
Opt Apple ~
`
(spacebar) |
\

などという、やたらと変な位置に配置しています(これはもしかすると、 次に述べるEsc キーの配置を最優先にした結果なのかもしれません)。 勿論、前回同様 Apple II キーボードには \ / | は存在しません。

さて、お次は Esc。「Esc」とはもちろん「エスケープ」の意味でして、 通常は「ESC 文字」という制御文字を吐き出すために存在します。

そもそも「ESC 文字」というのは、何をする文字なのでしょう。 かの Peter Norton 氏によれば、「ESC」とはアプリケーションプログラムに対して「今のモードから抜け出す」 ということを通知する文字だということですが、元々はデータ通信において、「符合拡張」を行うために定義されたものです。

JIS X 0211(ISO/IEC 6429)によれば、ESC(ESCAPE)の役割は ESC は、符号拡張のために使う。 データストリーム中でそれに引き続く幾つかのビット組み合わせの意味を変える。 とされています。しかしこれでは何が何だかさっぱりですね。実際、JIS X 0211 には ESC の使い方は定義されておらず、その使い方は JIS X 0202 による となっています。

この JIS X 0202 という規格、一般の人には馴染みがないものですが、「ISO 2022」 という規格であれば、聞いたことがある方も多いのではないでしょうか。 実は、JIS X 0202 こそ、ISO 2022 の翻訳なのです。

ISO 2022 では、ESC 文字で始まる特別な文字列を「エスケープシーケンス」として定め、 これに引き続くビット組み合わせがどの種類の文字集合を指定しているのか、ということを定義してます。 これによって、ISO 2022 では複数の文字集合を利用することが可能(それこそ、世界中の文字が利用可能です)となっています。 尤も、エスケープシーケンスの処理が複雑なため、このコードが計算機の内部コードとして利用されることは殆どありません。そのため、ISO 2022 は主に計算機同士の間の通信に利用されるコード系となっています(このようなコードを「外部コード」と言います)。

日本語が含まれた電子メールを送信する際に利用される文字コードの規格は「ISO 2022-JP」 ですが、これは ISO 2022 を元にしたコード系です。「ISO 2022-JP」は俗に「JIS コード」 などと呼ばれていますが、JIS で「ISO 2022-JP」が定義されているわけではありません。

また、端末の制御(カーソルを画面左上に動かしたり、画面上の文字を点滅させたり… MS-DOS や、メインフレームの端末ではお馴染みの機能ですね)や、 プリンタの制御(イタリック指定、国際文字選択、マージン設定など)では、 ベンダが独自に ESC を含む文字列を定義して、それによって装置を制御するといったことも行われます。

さて、UNIX ではそんなに Esc を使うわけではありませんが、 「現在のモードからの脱出」という意味では幾つかのアプリケーションで使用されています。

例えば、vi というエディタには「入力モード」と「コマンドモード」 という二つのモードがあります。vi はまずコマンドモードで起動され、ユーザからのコマンドを待ちます。 ユーザが入力モードに移行するコマンドを実行すると入力モードに移行し、 ここで初めて実際に文字が入力できるようになります。 そして入力が終ったならば、Esc を押して入力モードから抜け出し、コマンドモードへと戻るわけです。

「vi には『入力モード』と『コマンドモード』がある」と書きましたが、解釈によっては 「入力コマンドは引数として入力文字列を受け取り、受け取った文字を編集バッファへ挿入し、最後の Esc キーで引数の終端を入力コマンドに通知する」という考え方もあります (実際には、こちらの考え方のほうが正しいそうです)。

他の局面での Esc の使われ方というのは、 あまり「エスケープ」という意味には関係ないものが多いように思われます。 例えば、Emacs というエディタで「meta」キーの代わりに使用したり、 一部のシェル(csh 及び ksh)で、ファイル名の補完をするときに利用されたり (もっとも、最近は Tab キーで補完するシェルが多いのですが)、といった感じです。

「補完」というのは、途中までファイル名やコマンド名を入力した時点で、 残りの部分を自動的に補ってくれるという、夢のように便利な機能です。 例えば、「doraemon」というファイル名を入力するときに、「dora」 までタイプして、そこで補完機能を発動…つまり、Esc キーなり Tab キーをタイプすると、残りの「emon」が勝手に入力される、というです。

ただし、別に「doramichan」というファイルが置かれていた場合、 「dora」だけでは「doraemon」なのか「doramichan」なのかを判断出来ませんから、補完出来ません。 このような場合は、取り合えず「dorae」まで入力します。 すると「doraemon」を期待していることが分かりますので、残りの「mon」が補完されます。

Esc を頻繁に使うのは MS-DOS でしょうか。 アプリケーション内で現在のモードから抜け出したり、設定をキャンセルしたりするときは、まず間違いなく Esc を叩くようになっています。 そーいや、国産ワープロの雄「一太郎」には、「ESC メニュー」 なんていうものがあったみたいですね。Esc キーを叩くとメニューが出て来る、といった機能でしたがあまり「エスケープ」という名称から想像される機能ではないような気もします。

さて、Esc キーのポジションには通常次の二つしかありませんが、 ホームポジションから近い位置にある前者のほうがベターであることは言うまでもありません。 だいたい、ファンクションキーの並びになど置かれたら、タッチタイプなんて夢また夢じゃないですか。

Esc の配置パターン: その 1
Esc !
1
@
2
#
3
$
4
%
5
^
6
&
7
*
8
(
9
)
0
_
-
+
=
Esc の配置パターン: その 2
Esc F1 F2 F3 F4 F5

しかし、ここでも Apple の独走は止まりません。 Apple Keyboard II ではまた奇妙な場所に Esc キーを配置してます。

Esc の配置パターン: その 3
Ctrl Opt Apple ~
`
(spacebar) Esc

\ / |Esc … この手のキーにも安住の地を与えてあげてほしいものなのですが、 それが叶わぬ願いだと言われるのでしたら、せめてどんな環境・機械でも、 それぞれのキーが自分の使い慣れた位置にあるキーボードを選択できるようになってほしいなぁ、などと思うのです。

さて、先週から今週にかけてちょっと UNIX づいた話が続いたので、退屈された方もおられるのではないでしょうか? 来週は、ちょっと趣向を変えて Windows な話を書いてみようと思います。 もっとも、最近流行(そーいうものなのか?)の Windows 95 や Windows NT 4.0 の話ではなくて、Windows 3.0 な話を予定しておりますが…。

それでは、また来週。