シェル操作の勧め

エディタのシェル・モードを使った効率的コンピュータ操作の勧め

● 始めに

Windows でも、もっとコンソールからコンピュータ操作を行うことを提案します。コンソールからの操作をより効率的に行うため、エディタのシェル・モードを拡張することを提案します。

● 1コンソールからのコンピュータの操作

コンピュータの操作は Windows ではマウスが当たりまえになってしまいました。でもコンソール操作のほうが便利な場合も多くあります。エディタのシェル・モードを拡張してやることで、コンソールの機能をより強力にできます。すると、より多くの場面で、コンピュータをキーボードから、便利に操作できるようになります。

△ 1−1 コンソールからのコンピュータ操作入門

Windows でも、xcopy などのコマンドを使っているかたは、コンソールの便利さが分るはずです。でも、なぜ今さらコンソール操作なのか? マウス操作で十分だと思う方も多いと思います。そのような方へのコンソール操作の入門として、下の Web ページ読んでみてください。良くまとまっています。DOS を使ったことのない方も対象に、コンソールの立ち上げ方から始まり、コマンドの基本フォーマットやカレント・ディレクトリの解説をしてくれています。

  第1回 コマンド プロンプト入門(その1)
  http://211.4.250.170/fwin2k/operation/command001/command1.html

さらに下の Web ページは、コマンドのヒストリ・編集機能、コンソールへのコマンドの貼付け、コンソールのプロパティ設定などを解説しています。

  第2回 コマンド プロンプト入門(その2)
  http://211.4.250.170/fwin2k/operation/command002/command1.html

コンソール操作に馴染みのないかたは、上の Web ページも読んでみてください。

△ 1−2 コンソールからのコンピュータ操作例

コンソールを立ち上げておいて、下の文字列をコンソールにコピー&ペーストしてやれば、IE(Internet Explorer) が立ち上がり、また、リアル・プレーヤーが、指定した ram ファイルの URL アドレスで立ち上がります。

start http://www.nhk.or.jp/daily/english/
start \ap\RealPlayer\realjbox.exe http://www.nhk.or.jp/rj/ram/en/english.ram

Windows の場合、通常は IE が URL アドレスや html ファイルと関連付けられています。IE が関連付けられているので、実行ファイル:IEXPLORE.EXE を指定しなくても start コマンドの引数に URL 文字列を指定してやるだけで、IE が立ち上がります。IE が立ち上がるときには、引数に指定された URL を IE のアドレスとして IE 自身が設定します。関連付けが設定されていないファイルを実行させるときは、start の次に実行ファイルを指定します。上のリアル・プレーヤーの例のように、フルパスと一緒に realjbox.exe と、ram アドレスをコンソールに書いてやれば、リアル・プレーヤーが指定された ram URL に自分で接続して再生まで行います。もちろん、これらの文字列全てをキーボードから打ち込むのならば、マウス操作のほうがましです。でも何時も見に行くサイトならば、同じ文字列が毎日使えます。エディタに記録しておいたアドレスをコンソールにコピー&ペーストして実行させるのならば手間がかかりません。マウスを使う必要も有りませんし、マウスで IE アイコンをダブル・クリックして、IE が立ち上がるのを待ってから URL を IE のアドレスにコピー&ペーストしてやる必要はありません。IE 画面が立ち上がってから ram アドレスに対応するアイコンをクリックする必要はありません。


このような関連付けられた URL やファイルで、対応する実行プログラムを立ち上げることは IE に限りません。拡張子が doc の Word ファイルを start コマンドの引数にすれば Word が立ち上がって、同時に指定されたファイルをオープンしてくれます。xls ファイルや wav ファイルを start コマンドの引数に指定すれば xlw ファイルをオープンした状態で Excel を立ち上げたり、wave ファイル再生させた状態で Win Amp を立ち上げたりできます。

上図の例で、少し細かいことを言うと、ram URL アドレスもリアル・プレーヤーに関連付けられているので \ap\RealPlayer\realjbox.exe 実行ファイルを指定してやる必要はありません。でも realjbox.exe 実行ファイル指定を省略すると、リアル・プレーヤーが立ち上がる前に IE が立ち上がってしまい、その分だけ動作が遅くなります。

これらの一連の操作ではマウスを使う必要がありません。キーボードのホームポジションからだけで、全ての操作を実行できます。エディタ上で "start http://www.nhk.or.jp/daily/english/" 文字列を ctrl+K K などでクリップ・ボードにコピーできます。。alt+TAB でコンソールにフォーカスを移せます。alt+space -> e -> p の操作で、クリップ・ボードの文字列を Windows コンソールに貼り付けられます。この後に CR をおせば、IE が引数で指定されている URL にアクセスして立ち上がります。

これだけでしたら、一部のマウス嫌いの方にとってしか意味がないと思います。今までどおりマウスで操作すると考えるかたも多いと思います。でもエディタのシェル・モードを使うことで、上のキー・ボード操作をもっと単純にできます。もう少しお付き合いください。


● 2 エディタのシェル・モードによるコンピュータの操作

文字列の扱いはコンソールよりエディタの方が優れています。エディタならばホーム・ポジションからだけで全ての文字列処理操作が可能です。全ての操作はユーザーに合わせてカスタマイズ可能です。エディタのマクロにより、自分にあわせた拡張が可能です。

一方で、一部のエディタはシェル・モードの機能を持っています。これを使えばコンソール操作をエディタの文字列操作を使って行えるようになります。クリップ・ボードからのコピー&ペーストは ctrl+k c などで行えます。貼り付けたコマンド文字列の編集もエディタ上で行えます。コンソールでのときのようにカーソル・キー、ファンクション・キーやマウスを使う必要はありません。(それらを使うこともできますが、エディタでのシェル操作になれたら、直ぐに使わなくなるでしょう。)

有名どころでは Emacs の shell モードがあります。alt + M shell 操作で shell モードに移ります。下は Windows で Meadow(emacs) を shell モードで動かしている様子です。Windows コンソールでは一行の直線上でしか編集できなかったのですが、Emacs shell モードでは二次元平面でのコマンドも含めた編集とコマンド実行が可能になります。


その他のエディタの shell モードとして DOS 時代には Vz のコンソールがありました。それに近いものとして 熊谷氏が GPL 条件で公開している Wz editor の shell モード・マクロがあります。

  t.kumagai のページ
  http://kuma.webj.net/
  shellモード
  http://kuma.webj.net/wz/index.html#shell

私も、Vz が好きだったこともあり、熊谷氏の shell マクロに手を入れて使っています。 以下、熊谷氏の shell に自分の欲しい機能を追加した kShell を材料にして話を進めます。以下に述べる kShell マクロは私の修正が入ったものです。何らかの問題があったとしたら私の問題です。以下の kShell マクロでの問題点を熊谷氏に質問することは絶対に避けてください。元の 熊谷氏の shell の GPL 公開条件に従い、kShell のソースも公開しますから。

下が kShell マクロを使ったコンソール操作の様子です。これは英語ニュースを聞くためのソフトの組み合わせを \ce というファイルに書いてあり、それを ts コンソール(kShell) 上で使っている様子です。



下の twe というソフトで録音し、wavesufer というソフトで再生させます。

twe: フリーの wave 録音ソフト --- 音楽用であり、一時間を越える録音も可能。
   CPU 負荷が軽くて、メイン・タスクの裏側で録音させても音途切れが発生しません
  http://www.yamaha.co.jp/product/syndtm/dl/driver.html#twe
  

wavesurfer:音声分析用: Spectrogram:周波数分解表示 が可能。
     1mSec 単位で範囲を指定して繰り返し再生するのに便利であり、
     英語のヒアリング訓練に有効なツールです
  http://www.speech.kth.se/wavesurfer/download.html

録音させているのはリアル・プレーヤーよる短波放送向けの英語ニュース"http://www.nhk.or.jp/rj/ram/en/english.ram" です。英語のスクリプトが必要なときは IE により "http://www.nhk.or.jp/daily/english/" を見に行きます。聞いた英語ニュースの wave ファイルを保存したいときは、下の ce テキスト・ファイルの中に書いてあった xcopy コマンドを使います。

>xcopy \work\alice\other\nhkradio.wav \work\alice\other\nhk1040309.wav /v
>xcopy \work\alice\other\nhk2.wav \work\alice\other\nhkr2040313.wav /v

ファイル名の後ろ 6 文字の数字を日付にしてあります。録音する日付にあわせて kShell 上で編集・修正した後に xcopy コマンドで wave ファイルを保存します。分らない単語は ">start c:\ap\pdic\DokoPop\DKPP.exe" によってポップ・アップ検索させます。英語の文例を調べたいときは ">findstr /n /r /c:"design.*with" \utl\eij\eijiro52.txt" によって英辞郎のテキスト・ファイルからグレップ検索します。その検索結果も kShell ウィンドウ上に表示されます。

このように 状況に合わせて 7 つのソフトを選択して働かせていきます。ソフトを選択して起動するためには、"\ce.txt" によく使うコマンド文字列を複数書いておきます。そして "type \ce" によって kShell 上にコマンド文字列を表示させてます。出力されているコマンドの上にカーソルを持っていき Enter キーを押します。必要に応じて、コマンド文字列を修正します。その修正には Wz editor の文字列処理機能を使います。これら殆ど大部分のコンピュータ操作を kShell 上でキーボードのホーム・ポジションだけから行います。ホーム・ポジションを崩されるのは wavesurfer で音声の再生範囲を指定するときだけです。通常の Windows 上のマウス操作でこれだけの組み合わせ作業を行うのは、たぶん面倒で耐えられないでしょう。DOS 窓コンソールからの操作でも無理です。エディタの shell モードを利用しすることで、このように複数ソフトを好きなように組み合わせて使えるようになります。

この節ではエディタ shell モードの便利さを説明しました。次には、shell モードへの、さらなる機能追加を提案します。 ソフトの起動だけではなく、sf, maxima などの数学ソフトや C/C++ / perl / python / ruby などの言語開発を、より便利にするための機能追加です。

● 3 エディタ shell 機能のさらなる拡張

これから提案する機能は既に Wz editor のマクロ kShell で実装してあります。そのソース ts.txc も公開しています。Wz4.00F で動作を確認しています。たぶん Wz5.0 でも動くと思います。Wz エディタをお持ちの方は、以下の機能を御自分でも御確認ください。

ここで下の三種類のシェル機能の拡張を提案します。

行貼付け実行機能
カーソルが置いてあるエディタ行一行をコンソールに貼付け実行させます
ブロック実行機能
エディタ行の //@@ から //@@@ までのブロックをファイルに書き出します。
//@@@ の次に書かれたコマンド文字列を連続して実行します。

先のブロック文字列を書き出したファイル名をコマンド文字列に指定することで、コンパイラなどを kShell コンソールで実行させます。小物プログラムの開発に便利です

アプリケーション向けの行貼付け実行機能
コンソールからの特定のコンソール・アプリケーションの操作をより便利にします。
sf, maxima, gdb などの操作を簡単にします。

以下、この詳細について説明させてもらいます。

△ 3−1 行貼付け実行機能

  1. 下のようにカーソル行の行頭が "//" または ">" 始まるとき、その行をコマンド行とみなして kShell コンソールに貼付け実行させます。
  2. 行頭の "//" または ">" を取り去った文字列を shell に送りつけます
  3. ctrl O + A の操作で一行だけを実行させます。ctrl O + Z の操作ならば実行後はカーソルを次の行に移します。

この機能は簡易的な bat 実行ともみなせます。実行する直前にコマンド文字列をエディタ編集できるので便利です。変更や実行部分を限定するなどの人間の判断が実行のときに付きまとう操作で重宝します。ビジュアル・バッチといったところでしょうか。とにかく便利です。是非ともお試しください。

実行マークとして "//" を選択したのは C 言語プログラムの最後に、そのプログラムのコンパイル行を書いておき、必要に応じてコンパイルリンクさせるためです。">" を選択したのは、shell のコマンドをそのままコピー&ペーストできるようにするためです。

△ 3−2 ブロック実行機能

  1. 下のようにカーソル行を含む //@@ 行の次から //@@@ の直前までのテキストを c:\#####.### ファイルに出力出します。
  2. カーソル行の上側に "//@@" 行が存在しないときは、ファイルの先頭から //@@@ の直前までのテキストを c:\#####.### ファイルに出力出します。
  3. "//@@@" 行の次に、"//" または ">" で始まる文字列行が続くときは、それらをコマンド行とみなして連続実行します。
  4. ctrl+O E の操作で 1・2・3 の処理を続けて行います。

上の例では、二番目の //@@ ... //@@@ ブロックにカーソルがあります。この状態で "ctrl O + E" 操作をすると、16 行目から 26 行目までのテキストを "c:\#####.###" ファイルに書き出します。"//@@@" に連続して 27,28 行目に下のコマンド行が記述してあるので、これらを連続してエディタ・シェルに貼付け実行させます。

  >copy c:\#####.### a.cpp /y
  >cl a.cpp /MLd /W3 /Od /D"_CONSOLE" /Ivrf\ /YX /GX /GR /Fp#.pch
30 行目にある、下のコマンド行の直前には、一行の空白行が挟まれているので実行されません。
  >gcc a.cpp -I.\ -Ivrf\ -D"DfGcc_" libstdc++.a
上の 30 行目は Visual C によるコンパイルの後に gcc でもコンパイル確認するために設けました。gcc でコンパイルするには、30 行目にカーソルを持っていき "ctrl+O D" と操作するだけです。

この例に示したような C/C++ の小規模なテスト・プログラムを多く扱うときには IDE 統合環境は却って面倒です。といってバッチ・ファイルでコンパイルさせるのも面倒です。たくさんのバッチ・ファイルができてしまい、半年後にはバッチ・ファイルとソース・プログラムの対応も分らなくなったりします。この例のように //@@ と //@@@ の間にプログラムを書いておき、その直後にコンパイル・オプションまで入ったコンパイル・コマンド行を残したほうが合理的です。一つのファイルに、このようなテスト・プログラムを時系列に従って並べておき、grep 検索で必要な部分を取り出したほうが便利です。以前に作ったテスト・プログラムを、もう一度動かしたいときは、その位置にカーソル行を置いて、ctrl+O E を実行するだけで実行ファイルを再度作れます。/Ivrf\ などのコンパイル・オプションつきで、実行コマンドをソースと一緒に残してあるからです。

数百行規模までの小さな C/C++ プログラム開発では IDE 統合環境は却って面倒です。シングル・ステップ・デバッグのときだけ iDE を使えば十分です。

perl や ruby などでは、数十行の小さなプログラム・サイズのコードが多く書かれます。多くは自分だけが使う、半分は使い捨てのようなプログラムです。でも現実には捨てられないものも多くあります。これらは、だんだんと溜まってきてしまいます。しかも、それらは少しずつ変形されていきます。以前のプログラムを実行したくなることも多くあります。でも高々 数十行のプログラムに CSV などの履歴管理ソフトはは使えません。上の例のように //@@ と //@@@ で囲まれた領域に perl や ruby プログラムを時系列に従って溜めていくほうが合理的です。実行させるのは ctrl+O E だけです。引数も含めて、実行条件も同じファイルの同じ位置に残せます。


△ 3−3 アプリケーション向けの行貼付け実行機能

Shell に貼り付けて実行することで、多くのアプリケーション操作が便利になります。

3−3−1 計算式を shell に貼付け実行

理系のノートやメモには多くの計算式/数式が表れます。一方で sf.exe 計算コンソールプログラムがあります。sf コマンド引数としての計算式をノートやメモに書いてあったとき、エディタ・シェルに貼付け sf.exe を実行させるマクロを作ることができます。

計算ははノートやメモの計算式/数式行にカーソル行を持っていき ctrl+O N 操作を行うだけで行えます。Ctrl O + N 操作がなされたときのカーソル行の文字列を sf の数式とみなし、引用符で囲み、その直前に "sf " を追加して文字列を shell に貼付け、sf.exe に計算を実行させます



sf.exe は # 以降の文字列をコメントとみなして無視するので、数式の後ろにコメントを書いておけます。

sf は文字変数も扱えるので、通常の数式と良く似た計算式を使えます。



日本語 OS のユーザーに限られますが、変数名にギリシャ文字も使えるので、sf の計算式をノートやメモに書いても、数式の読み書きに違和感がありません。

sf は loop コマンドもあります。ブロック実行も可能です。数 100 点のデータをループ計算させることで、グラフ表示データを作ることも可能です。少しばかり慣れが必要ですが、下図のような sf のスクリプトで gnuplot まで連続して実行させることでグラフ表示までを一気に行わせられます。処理内容・アルゴリズムの可読性は C 言語などによる記述より格段に優ります。数値計算に特化している分だけ、余分な変数宣言や定義を記述する必要がないからです。




データ・ファイル hd.val さえ残してあれば、グラフ描画は何時でも //gdsp hd を実行させるだけで再描画できます。

sf でのブロック実行では、"copy \#####.### test.se /y" と "sf @@test" が何時も必要です。この二つだけでグラフ表示などを連続して実行する必要がないときは ctrl O + S 操作をすることで "copy \#####.### test.se /y" と "sf @@test" のコマンドをマクロ側で挿入するようにしてあります。

ctrl O + N ・ ctrl O + S で操作する sf コンソール・アプリケーション・マクロを導入することで、エディタ上から科学計算をシームレスに実行できる環境を実現できます。


3−3−2 start を追加しての shell コマンド実行

ファイル名の先頭に start を追加して、エディタ・シェルに貼付け実行させると便利です。

後で参照したいけれど IE の「お気に入り」に登録するほどではない URL が多くあるはずです。それらの URL アドレスを分野ごとに記録したメモがあるはずです。また、多くの Word や Excel ファイルが HDD のなかに散らばっているはずです。これらの一覧表を作ったり、テキストの一部に関連するファイルや URL を書いておくことが多くあるはずです。それらを立ち上げるとき IE や Word などを立ち上げてから URL やファイル名とディレクトリをコピー&ペーストするのは面倒です。start さえ付け加えてやればシェルからアプリケーションの実行を命令できます。それらの URL やファイルを開く形で、IE や Word が立ち上がってくれます。ctrl O + F 操作で start 実行を行われられます。


ctrl O + F マクロでは、">" と ";;" 二つの文字列をデリミタとしています。この文字列のどちらか以降を start 実行させます。先の抱いた URL 集の例で、行頭側にコメントを入れられます。

この機能はプログラムのコメント付けにも便利です。C 言語などのプログラムで、コメントには書ききれない説明や グラフ情報も付け加えた説明を html ファイルや Word などで記述してリンクさせておけば ctrl O + F 操作だけで、プログラムの詳細な説明を表示させられます。html ファイルへのアンカーをリンクさせてやれば、html ファイルの表示位置までを指定できます。プログラマーの方はお試しください。

3−3−3 コンソール・アプリケーションへの文字列の貼付け実行

コンソール上でユーザーと情報を遣り取りする CUI アプリケーションで有用なものも多くあります。これらのアプリケーション・ソフトの多くは、コンソールだけではなく、エディタ・シェル上でも動作します。これらに対しての操作文字列の貼付け実行も便利です。

例えば、 GDB(gnu debugger), や maxima といったソフトがあります。GDB では、往々にして同じような長い文字列を何度も打ち込むことが必要になります。コマンド・ヒストリがあっても、コンパイルし直しなどで gdb を終了させたら無効になります。



でも gdb.txt などのテキスト・ファイルに、良く使う長い gdb コマンドを書いておけば、そのコマンドの上にカーソルを持っていき ctrl + O A と操作するだけで、gdb コマンドを実行させられます。コマンド文字列は、何種類もあって混乱しやすい break コマンドなどのテンペレートの意味も持ちます。

貼付け実行だけではなく、エディタ・シェル平面でのコマンド編集機能も gdb 操作を楽にしてくれます。gdb 画面がエディタ画面と同等に扱えるからです。構造体メンバなどをデバッグ・プリントさせようとすると、簡単に 30 character を超える長さとなったりします。でも、対応するソース行にカーソルを持っていき ctrl+L を何回か打ち込んで、何ワードかコピーすれば、p コマンドの引数は ctrl Q + I で作れます。その文字列の先頭に "p " を追加すれば gdb の p コマンドの出来上がりです。もちろん、その後の編集も自由にできます。

GDB ほどには広まっていませんが、maxma も有用な数式処理コンソール・アプリケーションです。先に紹介した sf と組み合わせれば Mathematica などの市販のソフトに劣らない機能も得られます。Maxima は GPL で配布されており、無償です。

工学や数学などでは色んな場面で数式が出てきます。でも、多くの場合 maxima での計算過程で残しておくべきものは一部だけです。全部を残してもゴミのほうが多くなり、後で見返すときには邪魔になるだけです。kShell への貼付け実行マクロがあれば、主要な計算式を残しておくだけで、以前に行った maxima 操作を何時でも再現できます。



上図では、Maxima が kShell 上で動いています。計算結果の文字列をコピー&ペースト・編集して、次の maxima コマンドに使うことも可能です。上の図の maxima の kShell 画面では (D7) 行目の多項式の計算結果をコピー&ペーストして、次の solve(.) 式を作り、根を求めています。

Emacs には gdb モードや maxima モードがあります。でも emacs は癖の強いエディタです。誰でも使えるエディタではありません。kShell マクロを使えば、emacs 使いでなくても、gdb モードや maxima モードに近い、エディタと一体となった操作が可能になります。


御意見、御要望は下のアドレスに連絡ください
    kenji□nasuinfo.or.jp
    kverifierlab□yahoo.co.jp
注意! □は @ に置き換えてください