macroscope

( はてなダイアリーから移動しました)

コマンド行インタフェース (command line interface) と GUI (2): テキストエディタ

【まだ書きかえます。いつどこを書きかえたかを必ずしも明示しません。】

【この記事は、大学の学生むけの教材のつもりで書きはじめたのだが、わたし個人にしか意味がなさそうな部分がまじってしまった。その部分も、わたしに質問をする学生がわたしが何をこたえられるか予想するうえでは有用かもしれない。ひとまず、まじったまま書きだしておく。】

- 1 -
[2022-03-27 コマンド行インタフェース (command line interface) と GUI] の記事 (ここでは便宜上「第1部」とよぶことがある) に書こうと思ったが見送ったことがある。それは、テキストエディタのことだ。

計算機であつかわれるデータの多くの部分が、テキストファイルである。それは、文字と改行からなるデータファイルである。文字がならんで「行」が構成され、行がならんでテキストファイルが構成される。もうすこしくわしくは、[2021-03-01 わたしがよくつかうデータ形式 (2) テキストファイル、空白くぎり 兼 フィールド長固定] の記事の「- 1 -」の節でのべた。

テキストファイルの内容を書きなおすのにつかうソフトウェアが、テキストエディタ (text editor) とよばれる。単にエディタといったばあいもたいていこれをさす。

ここでは、テキストエディタの中で人がおこなう操作に注目して、第1部でのべた、「コマンド行インタフェース」、「狭い意味の character user interface (CUI)」、「graphical user interface (GUI)」の概念をつかって整理をこころみたい。

- 2 -
計算機のプログラムのうちで人が読み書きする「ソースプログラム」はテキストファイルの形でつくられるから、計算機の発達の早い段階で、テキストを編集する需要はあった。

計算機への入力手段がパンチカードだった時代は、カードをさしこんだり、カードの順序をかえたりする操作によって、編集がおこなわれた。

コマンド行インタフェースによる対話型利用ができるようになって、そこでテキストファイルを編集するための、コマンド行インタフェースのエディタがつくられた。のちにそのようなものは「ラインエディタ」とよばれるようになった。ラインエディタの中では、およそ、つぎのような機能をもつコマンドをつかうことができる。

  • エディタ内外のデータのやりとり . . . 既存のファイルの内容を編集用の場所に読みこむこと。編集用の場所の内容をファイルに書きだすこと。
  • 編集中の内容を表示すること。
  • 行についての操作 . . . 行を追加すること。行を消すこと。行の順序をいれかえることなど。
  • 行を選択すること . . . 行番号による選択、文字列を検索することによる選択など。
  • 選択された行についての文字列の操作 . . . 文字を追加すること、文字を消すこと、文字列の内容を変更することなど。

わたしは、1980年ごろから、計算機の対話型利用をするようになった。

当時わたしがつかった (いわゆる) メインフレーム (mainframe) 計算機 あるいは「大型計算機」にあったエディタは、EDIT というラインエディタだった。わたしはその操作に熟練したはずなのだが、いまよくおぼえているのは、編集中の内容を表示するコマンドが「LIST」だったことだけだ。INSERT, DELETE, FIND, CHANGE などのコマンドがあって、3文字ぐらいの省略形でよびだせるようになっていたと思う。

Unix には ed というラインエディタがあった。わたしはそれをつかってみる経験をした。また、わたしは、Kernighan & Plauger の Software Tools (日本語版は『ソフトウェア作法』という題で出た) という本で勉強したのだが、その本には、Fortran を改造した Ratfor というプログラム言語によって、edに似た仕様のエディタをつくる事例がのっていた。 わたしがつかっていたメインフレーム機でも、QED という名まえで、ed と似た仕様のラインエディタがつかえるようになった。わたしはそれをつかうことがおおくなった。

パソコンがでてきた。1980年代の多くのパソコンに常備されていたのは、BASIC言語のインタプリタが、単純な OS (オペレーティングシステム) の機能をかねたものだった。BASIC 言語の文と、OS へのコマンドの区別がなかった。そのインタプリタの実行中に人からのコマンドを待っている状態は、プログラム編集中の状態でもあり、インタプリタはごく単純なテキストエディタの機能もかねていた。上の列挙でいうと、ここまでだ。

  • エディタ内外のデータのやりとり . . . 既存のファイルの内容を「現在のBASICプログラム」に読みこむこと (load)。「現在のBASICプログラム」の内容をファイルに書きだすこと (save)。
  • 「現在のBASICプログラム」の内容を表示すること (list)。
  • 行についての操作 . . . 行を追加する、または内容をおきかえること (行番号のあとに内容をかく)。行を消すこと (del)。

編集すべき行を選択するのには、内容を list させて人が目でみる必要があった。
選択された行の内容を編集するために、行内かぎりの CUI があった。文字をうちこむことのほかに、カーソルキーによる行内の移動、backspace キーによって1文字消すこと、挿入モードと上書きモードをきりかえること、などができる。改行キーをおすと、「現在のBASICプログラム」のうちのその行の部分が、編集中の行の内容が採用されて、書きかえられる。
それなりに便利だったが、メインフレーム計算機のラインエディタや Unix の ed を知っているたちばからは、文字列の検索ができないことや、行の順序のいれかえができないことは、不満に感じられた。

- 3 -
テキストファイルは行がつらなったものだ。横書きを前提とすると、それぞれの行のうちの文字は横にならんでいる。ソースプログラムなどを表示するときは、行をたてにならべて、2次元に文字がならんでいる形にする。編集も、この2次元に文字がならんだ形を見ながらできるとつごうがよい。そのような機能をもつソフトウェアがつくられ、「スクリーンエディタ」と総称された。

まず CUI のスクリーンエディタが発達した。編集作業中は、画面上に「現在注目している場所」をしめす カーソル (cursor) というものがあらわれる。このカーソルを、キーボード操作によって、上下左右にうごかすことができる。そして、カーソルの位置に、文字を、挿入または上書きすることができる (挿入か上書きかのモードきりかえも、なんらかのキーボード操作によってすることができる)。また、文字列をコピーしたり、移動したり、消したりすることを指示するキーボード操作もきめられている。

Unix には、1970年代から、vi というスクリーンエディタが常備されていた。Unixを日常につかうならば、vi に熟練するのは当然だった。しかし、わたしは、Unix にはたまにふれるだけだったし、ed には熟練したので、vi をならわないままきてしまった。(vi についてはあとで emacs との比較で論じることにする。)

1980年代に、パソコン上でつかえたスクリーンエディタのたぐいで、最初にひろくしられたのは、WordStar という英文ワードプロセッサだった。キーボードに「コントロール」(ctrl) キーがあり、他のキーと同時におすことができることを前提とし、QWERTY型キーボードで左手のホームポジションにある d を中心として、ctrl-s で左、ctrl-f で右、ctrl-e で上、ctrl-x で下むきのカーソル移動ができるようになっていた。それからあらわれたスクリーンエディタも、それにならったキー操作のものが多かった。とくに、Borland 社のTurbo Pascal コンパイラ付属のエディタは、計算機入門によくつかわれたから、熟練した人が多かったと思う。ただし、キーボードに矢印キーをもつものが多くなると、カーソル移動は矢印キーによるほうがふつうになり、WordStar型の ctrlキー による操作はかならずしもひきつがれなくなった。

1980年代後半には、メインフレーム計算機でもスクリーンエディタがつかえるようになった。その操作は、vi とも WordStar ともちがっていた。(事務用の定型入力用の画面から発達したものだろうと思う。) 当初は、その計算機の専用端末でだけつかえた。のちに、通信回線でつながったパソコンなどの端末でもつかえるようになった。ただしその際に、端末側で、画面制御の「エスケープシーケンス」を期待されたとおりに解釈できる必要があった。エスケープシーケンスとは、ESC (16進 27) という制御コードではじまっていくつかのASCII 文字がつづく形の、制御用の文字列だ。それをつかって、画面上でカーソルを移動したり、文字を消したり、画面全体を空白にしたりする操作を、ホスト計算機から端末に指示するようにつくられていた。

わたしは 1990 年ごろから Unix系OS をつかうことがふえたが、そのときには emacs がつかえるようになっていた。emacs と総称されるエディタの最初のものではないがいちばんよく知られたのは、Free Software Foundation の Richard Stallman による GNU emacs だった。わたしは、Unix系OS上での自分の作業でも、また、Unix系OSのつかいかたの初歩をおしえるときにも、emacs があることを前提とし、それをつかうことがおおくなった。ただし、GNU emacs はしだいに機能がふえたので、起動に時間がかかるようになってしまった。わたしは emacs を「-nw」 (no window) モードで起動するのがふつうになった。さらに、自分が管理するマシンでは、emacs と基本的なキー操作が共通だが、機能がかぎられていて、起動が速いエディタをあらかじめインストールしておいて、それをつかうことが多くなった。

vi では、カーソル移動などの操作に、h j k l などの文字をうつキーをそのままつかう。キー操作が、文字入力になるのか、vi に対するコマンドになるのかのモードきりかえがある。emacs は、ctrl キーがあることを前提として、emacs に対するコマンドは ctrl キーと文字キーを同時におす形をとるので (そのあとに ctrl のつかない文字キー操作がつづくこともあるが)、モードきりかえを意識する必要はない。WordStar で ctrl キーになれていたわたしには、emacs の操作のほうがわかりやすかった。ただし、どの操作に ctrl とどの文字とのくみあわせをつかうかは、WordStar と emacs とでちがっていたから、MS-DOS では WordStar 準拠のキー操作のエディタをつかい、Unix では emacs をつかっていたころ、キー操作をとりちがえることはよくあった。

【GNU emacs の事情はもうすこし複雑で、ctrl キーのほかに meta キーというものがあって、これを文字キーと同時におすことが想定されていた。しかし実際のキーボードには meta キーはなく、「metaキーと文字キーを同時におす」ことは、「ESCキーをおしてから文字キーをおす」ことで代用されていた。これはいまもそうであり、emacs をたまにつかう人にとってややこしいことだ。】

- 4 -
Macintosh などの GUI の OS をもつ 計算機では、はやくから GUI のスクリーンエディタが発達した。MS-DOS も Windows にかわって、GUI のエディタがふつうになった。Unix系OSでも、デスクトップやラップトップのパソコンならば、たとえば GNOME などの GUI がうごいて、gedit などの GUI のエディタをつかうほうがふつうになっていると思う。

GUI のエディタでも、個別の文字をうちこんだり修正したりすることや、そのためのカーソルを移動する操作には、キーボードをつかうのがふつうだ。その意味では CUI を併用しているといえる。しかし、まとまった量の文字列をコピーしたり移動したりする際には、マウス操作で対象を選択するほうがふつうで、そのためのキーボード操作のコマンドはあったとしても思い出さないですむだろう。

ちかごろのわたしは、Unix系OS (Linux) でも Windows でも、GUI のエディタ (ただし編集中の画面の見かけは CUI のエディタとにたもの) をつかうのが習慣になっている。しかしときどきその機能に不足を感じることがある。emacs ならばほしい機能はあるのだが、それをよびだすための ctrl や meta ではじまるコマンドを思い出すのがむずかしく、つかいこなせないでいる。