10-5. INDY で Mule を使う (1) Mule について * Mule は使えそう 根っからの Apollo ユ−ザにとって、UNIXの vi はとてもや使える代物ではない。か といって Apollo は使えなくなるし、困ったことだと思っていた。GNU Emacs というのも 知ってはいるがどうせ vi と似たようなものに違いない、そう思い込んでいた。しかし一 度使ってみたれと INDY でセットアップしてみた。 Apollo のエディタが使い易いのは、 特有のキ−ボ−ドのせいとシェル画面での履歴がほ ぼ無限であることによる。キ−ボ−ドは他のマシンでは仕方ない。 Apollo のシェル画面 はインスト−ルなどの際に、ダ−と出てくる表示をず−っと残しておくことができる。こ れと同等なことが Mule でできればラッキ−なわけだ。できました。 M-x shell というモ−ドでできました。 Mule のエディタの中から、Mule のソ−スを ./configure してみた。 問題なくできます ね−。エディタとしても矢印キ−もちゃんと使えるし、あまり動きに不自然なところもな さそうです。vi のように矢印キ−を押すと、 変な文字列が出てきたりすることがなくて よかった。Mule は Apollo ユ−ザにも楽しく使えそうです。 選択の余地はないのだけど。 いやおかしい。X-toolkit 版の動きはいいけど、INDY の winterm の中での Mule は変だ。 メ−ルも Mule から試しに出してみました。 メ−ルの環境は Zmail で読み書きできるよ うにしてあります。この状態で、Mule を M-x mail モ−ドとやらにし、Mule 画面の上に To: が出るのでアドレスを入れて中身を書いて C-c C-c とやって終わり。 ちゃんとメ− ルを出しました。これも X-toolkit 版での話。Mule は読むのもできるらしいけど、こっ ちは Zmail の方がいいかも。 * 起動の仕方 % mule & X-toolkit 版 Mule を起動する。 % mule file_name & ファイル名を指定して起動する。 % mule -nw INDY のウィンドウを Mule にする。 * 関連制御ファイル ~/.emacs Mule をカスタマイズしたい時に、このファイル名で 空ファイルを先ず作成する。 ~/.cshrc M-x shell でUNIXのコマンドを実行するのに、こ ----------------------- うしておいた方が無難らしい。 |setenv ESHELL /bin/sh | | ~/.Xdefaults X-toolit 版 Mule のGUIの色をカスタマイズする。 ----------------------------- |Emacs*background: #efffff 背景色を少しうっすらにする。デフォルトは #ffffff |Emacs*foreground: #000000 で真っ白でちょっとまぶしい。 foreground は文字の |Emacs*pointerColor: #ff0000 色で真っ黒である。 ~/.signature M-x mail で電子メ−ルを出す際に C-c C-w で挿入さ ----------------- れるメ−ルの署名。Zmail でもこのファイルを使う。 |日の丸太郎 |tarou@nix.co.jj ~/.lang 一応ユ−ザ・ロッグイン環境は日本語ということで。 ------------- |ja_JP.EUC * Mule の使い方 % mule -nw では メタキ−は ESC キ−。% mule ではメタキ−は Alt キ−になる。 Mule では Ctrl キ−を押しながら何かキ−を押すのを、慣習的に C-p というように表わす。 C-p previous。 C-b backward。 C-n next。 C-f foward。 C-d カ−ソル上の1文字を消去する。 C-k カ−ソルからその行の終わりまでの文字列を消去する。 C-x C-f ファイルを開く。 C-x C-s 同じ名前でファイルをセ−ブする。 C-x C-w 別名でファイルをセ−ブする。 C-x u UNDO。 C-g 何かおかしくなったらやること。 C-x C-c Mule の終了。 C-Space カット&ペ−ストする範囲の起点をマ−クする。 ESC-w マ−クしたところからコピ−する範囲。 C-w マ−クしたところから削除する。 C-y コピ−指定した範囲をペ−ストする。 C-s 文字列の検索。 ESC-x mail メ−ルを送るモ−ドに入る。 C-c C-w メ−ルのサインを入れる。 C-c C-c メ−ルを送る。 ESC-< ファイルの先頭に移動。 ESC-> ファイルの末尾に移動。 CTRL+\ 日本語入力モ−ドに入る。もう一度 Ctrl+\ をやると抜ける。 CTRL+W 漢字変換の候補を出す。 CTRL+L 漢字を確定する。 * 作業履歴を取るUNIXコマンドがありました `22/06 % which script << INDY IRIX 5.3の場合。Solaris 2.6 では /usr/bsd/script /usr/bin/script にある。 端末セッショ ンの記録の生成。 -a file オプションで % pwd 記録ファイル名を指定できる。 /nix % script << script コマンドを起動したディレクトリ Script started, file is typescript にデフォルトで、typescript というファ % cd katou イルができ、作業が記録されていく。 % pwd /nix/katou % Script done, file is typescript << Ctrl+D で抜ける。ディレクトリを移動し ているのだが、script をかける前のディ /nix/typescript レクトリに戻っている。 ------------------------------------------ |Script started on Mon Jun 3 10:33:48 2002 |% cd katou ※実際何かフリ−ソフトでもコンパイル |% pwd してみて、ちゃんと作業履歴を取るこ |/nix/katou とができるのか、確かめてみないかん。 |% |script done on Mon Jun 3 10:33:54 2002 [ 作業履歴を取るフリ−ソフトもありました ] ttyrec, ttyplay という端末作業の録画と再生ができるソフト。ttyrec で録画、ttyplay で再生する。「UNIX MAGAZINE」`22/04 に記事あり。http://namazu.org/~satoru/ttyrec。 * Solaris 9 での script コマンド # which script ファイルを作る場所はル−ト /でもどこでもいい。 /usr/bin/script ファイル名も何でもいい。次は script コマンド を叩いて # ls とやっただけ。このでてきた表示 # cd / がファイルに記録されるのを確認してみた。 # script /usr1/20110401.txt script コマンド開始。ファイルは /usr1/20110401.txt です。 # ls ImssInstall.log etc lost+found sbin TT_DB export mnt tmp bin home net usr cdrom identitydb.obj nsmail usr1 core iscantmp opt var dev kernel platform vol devices lib proc xfn # exit script コマンド終了。ファイルは /usr1/20110401.txt です。 # cd /usr1 # ls -l -rw-r--r-- 1 root other ... 20110401.txt << ls コマンドで表示されたのが記録。 * 参考文献 「入門Mule」 '94/12/11, アスキ−出版局, 1,800 円。 > Mule をカスタマイズする情報は載ってない。 「UNIX MAGAZINE」 '96/10, P.33〜 "モ−レツUNIX教室5"。'96/11, P.25〜 "モ−レ > ツUNIX教室6"。 「GNU Emacs」 '93/10/20, ソフトバンク(株), A NUTSHELL HANDBOOK, 3,800 円。 > 専門書です。ここまでの本は買わなくてもいいかも。 「UNIX MAGAZINE」 `24/07, P.186〜192, "インタ−フェ−スの街角77 矢印キ−の活用"。 > Emacs と矢印キ−、領域選択と領域移動、罫線の描画、キ−入力速度。`27/11 に追加。 ※その他インタ−ネットの goo サ−チ、'mule 使い方' でたくさん出て来る。 (2) Mule のインスト−ル * ソ−スからの作成 INDY にはデフォルトで Mule はソ−ス、実行モジュ−ルともに入っている。CD-ROM とし ては日本語モジュ−ルに入っている。実行モジュ−ルは /usr/local/bin に入っているか と思っていたが、なんと /usr/src に入っていた。探すのにひと苦労した。SGI のオ−2 O2 はどうなっているか見たが /usr/src には無かった。 % cd /usr/src;ls X11/ japanese_exe/ japanese_pub/ samba-1.9.15p8/ slatec/ ↑ ↑ この2つが Mule の実行モジュ−ルとソ−ス。 % cd japanese_pub;ls jelvis-1.8/ jless-290/ mh-6.8.3JP2c/ mule-2.3/ nkf-1.5/ % ls mule-2.3 mule-2.3.tar.Z % uncompress mule-2.3.tar.Z % tar xvf mule-2.3.tar % cd mule-2.3; ls -aF ./ build-ins.in* lock/ ../ config.bat lwlib/ BUGS config.guess* make-dist* ChangeLog config.status* man/ ChangeLog.Mule config.sub* move-if-change* ChangeLog.Mule-Wnn6 configure* msdos/ GETTING.GNU.SOFTWARE configure.in oldXMenu/ INSTALL cpp/ shortnames/ Makefile doc/ site-lisp/ Makefile.in etc/ src/ NEWFEATURE info/ vms/ PROBLEMS install.sh* vpath.sed README lib-src/ README.Mule lisp/ * 実行モジュ−ル japanese_exe の方には、すでにコンパイル済みの実行モジュ−ルがある。 しかしどうも このXウィンドウ版の Mule は、ソ−スから作った方に較べて少し見栄えが悪い。こっち は止めた方がいいかも知れない。 % cd /usr/src/japanese_exe;ls INSTALL.sh* README.jless REMOVE.sh* mh.tar.Z README README.mh elvis.tar.Z mule.tar.Z README.elvis README.mule jless.tar.Z nkf.tar.Z % INSTALL.sh mule << Mule をインスト−ルする。別に先にインスト−ルしたのを installing mule 消さなくてもよい。オ−バライトしてインスト−ルされる。 tar: blocksize = 16 done * インスト−ルの注意事項 [ gcc のバ−ジョンに注意 ] 古いバ−ジョンだとコンパイルできない。-g オプションをサポ−トしていないとかで。 % gcc -v Reading specs from /usr/local/lib/gcc-lib/mips-sgi-irix5/2.6.3/specs gcc version 2.6.3 << このバ−ジョンはだめだった。 この場合は gcc でなくて、オリジナルのCコンパイラを使うようにする。 % ./configure --with-x-toolkit --with-wnn6 --wnn-includes=/usr/include/wnn --wnn-lib --with-gcc=no [ コマンド PATH に注意 ] ld コマンドは /bin/ld が期待されている。PATHで /usr/local/bin を先にして、そこに ld があるとエラ−になる。PATH 設定は /bin をともかく先に持って来ること。 % setenv PATH /usr/local/bin:/bin:/usr/sbin:/usr/bsd:/usr/bin:/bin:/usr/bin/X11 ↓ % setenv PATH /bin:/usr/local/bin:/usr/sbin:/usr/bsd:/usr/bin:/bin:/usr/bin/X11 [ コンパイル後 ] % mule & で起動するはずだが、ロッグインし直さないとmule が見つからないと出る。こ れは環境変数の PATH で /usr/local/bin/ を指定していても、mule が PATH 管理に含ま れないからである。ロッグインし直すと、PATH 管理に含まれることになる。 [ インスト−ル手順 ] % cd /usr/src/japanese_pub/mule-2.3/mule-2.3/ % ./configure --with-x-toolkit --with-wnn6 --wnn-includes=/usr/include/wnn --wnn-lib --with-gcc=no % make << MAKE をかける。 % make install << インスト−ルする。 * インスト−ルされた状態 % ls /usr/local/bin -rwxr-xr-t 2 root sys 4675540 mule -rwxr-xr-t 2 root sys 4675540 mule-19.28 -rwxr-xr-x 1 root sys 203 any2ps -rwxr-xr-x 1 root sys 41724 b2m -rwxr-xr-x 1 root sys 96968 coco -rwxr-xr-x 1 root sys 119784 ctags -rwxr-xr-x 1 root sys 43916 emacsclient -rwxr-xr-x 1 root sys 119712 etags -rwxr-xr-x 1 root sys 118896 m2ps -rwxr-xr-x 1 root sys 3135 rcs-checkin % ls /usr/local/lib/mule drwxr-xr-x 5 root sys 512 19.28/ << バ−ジョン。 drwxrwxrwx 2 root sys 512 lock/ << 空ディレクトリ drwxr-xr-x 2 root sys 512 site-lisp/ << 空ディレクトリ % ls -aF 19.28 etc/ mips-sgi-irix5.3/ lisp/ % ls /usr/local/lib/mule/19.28/lisp COPYING ediff.el lpr.el rnewspost.el ChangeLog ediff.elc lpr.elc rnewspost.elc ChangeLog.1 edmacro.el ls-lisp.el rot13.el ChangeLog.2 edmacro.elc ls-lisp.elc rot13.elc ChangeLog.3 edt.el lselect.el rsz-mini.el Makefile edt.elc lselect.elc rsz-mini.elc README egg-jsymbol.el lucid.el s-region.el | % ls /usr/local/lib/mule/19.28/etc 3B-MAXMEM INTERVIEW SERVICE etags.1 AIX.DUMP JOKES SUN-SUPPORT etags.notes APPLE LEDIT TERMS etags.vms BABYL LNEWS TUTORIAL ledit.l | FAQ-Mule.jp << この2つ辺り参考にすること。 TUTORIAL.jp Xkeymap.txt << カスタマイズする時に参考にいるかも。 termcap.dat termcap.ucb % ls /usr/local/info にも一杯ファイルができた。 (3) Mule のカスタマイズ検討 * こりゃかなわん どうも Mule は X-toolkit 版で使うものらしい。 インタ−ネットで Mule について調べ ると、ほとんどが X-toolkit 版をとりあげている。端末の kterm や INDY では winterm の中で動かすと、X-toolkit 版と動きが違う。違っているものらしい。変なの。しかし何 てことだ。winterm は X Window の画面ではないのか。それが terminfo なる端末画面と 同居している。このためキ−の設定が非常にややこしいことになっている。キ−設定が関 係する部分をざっとあげただけでもこれだけある。こりゃかなわん。もう端末画面なんて のは止めてくれ−。おかしなコ−ドは出てくるわ、困ったもんだ。 ・winterm の terminfo によるキ−設定。 ・winterm のキ−バインド。 ・X Window のキ−シムでのキ−バインド。 ・X Window のアプリケ−ションでのキ−バインド。 ・Mule のキ−バインド。 ・Wnn かな漢字変換時のキ−バインド。 * Mule の挙動 ・winterm で何もしていない状態で $ mule -nw では →←↑↓キ−、PageUp、Alt-x キ −が効かない。vi を起動した後だと →←↑↓キ−は有効になる。 ・Mule の X-toolkit 版だと、これらのキ−は効く。 ・winterm で何もしていない状態で、F1 キ−を押すと % 001q と出る。 同じく ↓ キ− を押すと % B と出る。 ・winterm で vi を使うと、矢印キ−の ← は ^[[D こう表示される。→ は ^[[C、↑は ^[[A、↓ は ^[[B となる。これ以降の winterm の画面で全部このように表示される。 ・winterm で何もしていない状態で、F3 キ−を押すと % 003q と出る。 ・Mule の X-toolkit 版を起動すると、F3 キ−を押すと % ^[[003q と出る。これ以降の winterm の画面で全部このように表示される。 ・Mule では BackSpace キ−に C-h が割り当てられていて、 本来のバックスペ−ス機能 に BackSpace キ−をするため、 (load "term/bobcat.el") を ~/.emacs に入れると書 かれているが、どうもこれはよくない。 ・Wnn の日本語変換時のキ−の動きはまた別になる。 * 分かったこと ・~/.emacs ファイルの設定は、その場で直ちに有効になる。 ・$ winterm とやるとプロセスは iwsh -name winterm -name winterm と出ている。 ・~/.Xdefaults が評価されて、~/.login が評価される。(Cシェルのロッグイン) ・Wnn の端末用クライアントの uum は winterm では起動できない。 % /usr/bin/Wnn6/uum Your terminal is not strong enough. Goodbye ! Sorry. Something is wrong with terminfo, maybe. ・winterm から % kterm -km euc とやって、kterm ウィンドウを開いた場合は、 uum は 問題なく起動する。% kterm -km euc は EUC コ−ドを扱うよということ。 ・ESC キ−は ^[ と表わす。 ~/.emacs での設定の define-key では \e または \033 と 表わす。 ・ESC キ−のコ−ド、エスケ−プは 1b とか 033 である。 1b は ASCII コ−ド表をみれ ば分かる。16進数で 1*16+11=27 を表わす。033 は8進数で 3*8+3=27 である。 * マシンの termcap を調べる どうも矢印キ−や Function キ−の挙動がおかしい。キ−にどのようなコ−ドが割り当て られているのか調べてみる。INDY は System V のOSなので termcap はなく、terminfo を調べることになる。termcap は BSD 4.3 系UNIXの端末デ−タベ−スで、 terminfo より先にできたものである。termcap は ASCII テキストでかかれているが、terminfo は termcap をコンパイルしたバイナリ形式になっている。書式はほとんど同じであり、INDY では /usr/share/lib/terminfo/ 以下にある。 terminfo の中身を見るには、infocmp という専用コマンドで termcap のデ−タ形式とし て内容を見ることになる。INDY にはデフォルトでは infocmp はインスト−ルされていな い。CD-ROM の "IRIX 5.3 for Indy including R5000" によりインスト−ルしなければな らない。以下 Inst コマンドで選択、インスト−ル実行する雰囲気。 Inst>i eoe2.sw.terminf Terminal InformationUtilities Inst>go % echo $TERM iris-ansi % /usr/bin/infocmp -C iris-ansi # Reconstructed via infocmp from file: /usr/share/lib/terminfo/i/iris-ansi iris-ansi|IRIS emulating 40 line ANSI terminal (almost VT100):\ :am:pt:\ :co#80:li#40:kn#4:\ :AL=\E[%dL:DL=\E[%dM:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:\ :UP=\E[%dA:al=\E[L:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\ :cm=\E[%i%d;%dH:ct=\E[3g:dl=\E[M:ho=\E[H:\ :is=\E[?1l\E>\E[?7h\E[100g\E[0m\E7\E[r\E8:k1=\E[001q:\ :k2=\E[002q:k3=\E[003q:k4=\E[004q:k5=\E[005q:\ :k6=\E[006q:k7=\E[007q:k8=\E[008q:k9=\EOP:kb=\b:\ :kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:nd=\E[C:\ :rc=\E8:sc=\E7:se=\E[m:so=\E[1;7m:sr=\EM:st=\EH:\ :ue=\E[m:up=\E[A:us=\E[4m:ve=\E[9/y\E[12/y\E[=6l:\ :vs=\E[10/y\E[=1h\E[=2l\E[=6h:bc=\E[D:ko=le,nd,up,ho: :k3=\E[003q は F3 キ−、:kd=\E[B は ↓キ−である。一応ちゃんとなっているような気 がする。 どうも何かの設定で、\E エスケ−プ・コ−ドが画面に出ないようになっている みたいである。そのため F3 なら % ^[[003q と表示されるはずが、% 003q しか出ないの でないか。vi や Mule の X-toolkit 版を起動すると、エスケ−プ・コ−ドを出すように 端末デ−タベ−スが変更されるのでないか。こりゃどう考えても、winterm がおかしい。 * おまけ ASCII コ−ド表 米国規格協会、ANSIが1962年に最初に定めた。案外この表どこにでもあるようで、 見たい時にぱっと探すことができない。Xウィンドウの環境があれば % xfd -fn 7x13 と か a14 とかやれば出て来る。日本語のカタカナは 7..F のところに入っている。ASCIIの 1バイトで表わすことができるのは、ここまでである。ひらがなや漢字に特殊文字は EUC や Sift-JIS などの2バイト・コ−ドで表わされる。EC は ESC, SP はブランクである。 | 0 1 2 3 4 5 6 7 .. F MS-DOS のファイルでは CR LF が行の終わりを示 ----|------------------------ す。CR(0x0d) 復帰、CL(0x0f) 改行。 0 |NUL DE SP 0 @ P (`) p 1 | SH D1 ! 1 A Q a q ttt 2 | SX D2 " 2 B R b r -------- 3 | EX D3 # 3 C S c s |', -_ [Return] 4 | ET D4 $ 4 D T d t 5 | EQ NK % 5 E U e u % od -x ttt << IRIX 5.3 のUNIX。 6 | AK SN & 6 F V f v 0000000 272c 202d 5f0a 7 | BL EB ' 7 G W g w 8 | BS CN ( 8 H X h x $ dump ttt << Apollo 自作コマンド。 9 | HT EM ) 9 I Y i y 0000: 27 2c 20 2d 5f 0a ', -_, A | LF SB * ; J Z j z B | HM EC + : K [ k { キ−ボ−ドのファンクション・キ−など、それぞ C | CL → , < L \ l | れのキ−ボ−ドで異なるのは、7 .. Fのとこで割 D | CR ← - = M ] m } り当てられる。また左側部分の実際の割り当ては、 E | SO ↑ . > N ^ n ~ Apollo のキ−ボ−ドだと SH,SX,EX は ^A,^B,^C F | SI ↓ / ? O _ o というようになっていたりする。 (4) Mule をカスタマイズする * 矢印キ−を % mule -nw モ−ドで使えるようにする vi もたまには使いたいので、vi のキ−設定で % mule -nw も使えるようにする。キ−ボ −ドは 101 タイプの英語キ−ボ−ドとする。 ~/.Xdefaults --------------------------------- |IWsh*keyMapping1:\ << keyMapping0 でもいいみたい。 | Left(any):send("\033[D");\ << "\e[D" でもいい。 | Right(any):send("\033[C");\ | Up(any):send("\033[A");\ | Down(any):send("\033[B");\ ~/.emacs ------------------------------------------------- |; 矢印キ−を使えるようにする。; はコメント。 |(global-set-key "\033[D" 'backward-char) ; left ← |(global-set-key "\033[C" 'forward-char) ; right → |(global-set-key "\033[A" 'previous-line) ; up ↑ |(global-set-key "\033[B" 'next-line) ; down ↓ ~/.login ------------------------------------------------------------------ |# Set the interrupt character to Ctrl-c and do clean backspacing. |if (-t 0) then | stty intr '^C' echoe |endif | |#eval `tset -s -Q` << 最初はこうなっている。 |if (! $?TERM) then << 通常は、tset -s -Q が実行されないようにする。実行 | eval `tset -s -Q` されると ~/.Xdefaults で設定したキ−が、 元に戻っ |endif てしまう。 | |# Set the default X server. |if ($?DISPLAY == 0) then | if ($?REMOTEHOST) then | setenv DISPLAY ${REMOTEHOST}:0 | else | setenv DISPLAY :0 | endif |endif * その他カスタマイズ ~/.emacs ------------------------------------- |; K&R 流のCプログラムのインデント ; 全部設定することはない。 |;(setq inhibit-startup-message t) ; 好みに応じて。 |;(setq c-indent-level 4) |;(setq c-continued-statement-offset 4) |;(setq c-argdecl-indent 4) |;(setq c-brace-offset -4) |;(setq c-label-offset -4) | |(setq-default tab-width 4) ; タブを4にする。 |(setq-default indent-tabs-mode nil) ; タブをブランクにする。 |(setq scroll-step 1) ; スム−ズなスクロ−ルにする。 |(setq blink-matching-paren nil) |(setq kill-whole-line t) |(setq line-number-mode 1) ; 何行目か表示する。 | |; Delete キーをちゃんとそうする。 |(global-set-key "\^?" 'delete-char) ;"\DEL" "\Delete" はダメ。 | |; **** これ以下、端末モードでのみ有効 **** |; F1 キーを1行削除にする。 |(defun katou () | (interactive) | (beginning-of-line) | (kill-line)) |(global-set-key "\eOP" 'katou) ; or "\033OP" | |; **** X-toolkit 版では以下なくて有効になっている **** |(global-set-key "\033[150q" 'scroll-down) ; Page Up キ− |(global-set-key "\033[154q" 'scroll-up) ; Page Down キ− | |(set-primary-environment 'japanese) |(set-file-coding-system *euc-japan*) |(set-keyboard-coding-system *euc-japan*) |(set-display-coding-system *euc-japan*) |;(set-current-process-coding-system *euc-japan*) これを入れるとエラ−。 ~/.Xdefaults ---------------------------------- |! Mule Color Setting |!Emacs*foreground: #000000 |!Emacs*background: #afafaf |!Emacs*borderColor: #111111 |!Emacs*pointerColor: #ff0000 |!Emacs*title: katou | |IWsh*keyMapping1:\ | F1(any):send("\033OP");\ | Up(any):send("\033[A");\ | Down(any):send("\033[B"); * ファイル編集作業で覚えておくといいコマンド % expand -4 file1 > file2 一個のタブを4つのブランクにする。既存のファイルでタ ブ・コ−ドが入っていて、ファイルの編集に邪魔になる場 がままある。このコマンドでブランクにすることができる。 % nkf -e file1 > file2 漢字変換フィルタ−、network kanji filter。この例では file1 を強制的に EUC 変換して file2 に吐き出している。 -j オプションで JIS に、-s でシフト JIS に変換する。 (5) 他のUNIX用エディタ * いろいろ telnet でほかのマシンに入って、vi やるには?。termcap の違いとか難しい。vt100 画 面にしておいて telnet すれば、なんとかできるが。使い易いとはとてもや言えない。そ ういう時は NFS を張ってエディット作業するしかないのかな。 なんとかして Apollo のエディタ以外にも、UNIXのエディタを使えるようにしたいが。 XZ EDITOR というのはどうかな http://www.village-center.co.jp/soft/xyz/。Vim とか はどうかな、Vi IMproved といって vi より使い易いと言う触れ込みだ。 vi 互換のエディタがいろいろできている。vim, elvis, nvi, jvim, jelvis。 vi は手に 馴染むと離せなくなるらしいが。どうしたらそんなことが言えるのか教えて欲しい。 DOS の行エディタのエドリンと遜色ないような気がしてならないが。 Linux に入っている vi は何か少し使いやすいみたいだぞ。カスタマイズされているよう だ。いや、これが Vim とやらだ。-- INSERT -- と画面下の方に出て来るのが何よりの証 拠。これならこの vi アンチの小生にも使えるかも知れない。 Vim について。Bram Moolenaar 氏が作成した一応フリ−ソフト。vi でできなかった範囲 によるカット&ペ−ストできる。これは素晴しい。Mule より多機能ではないが、 エディ タとしては十分である。http://www.vim.org/。GUI バ−ジョンは GVim と言う。 * Vim のコンパイル ftp://ftp.vim.org/pub/vim/unix からソ−スをダウンロ−ドする。2001/09/26 リリ−ス の Vim 6.0 を取ることにする。これが正式版の一番新しいのである。 インスト−ルする マシンは INDY IRIX 5.3 である。ファイルは以下のように4つダウンロ−ドすること。 % pwd /usr/local/source/vim % zcat vim-6.0-rt1.tar.gz | tar xvf - % zcat vim-6.0-rt2.tar.gz | tar xvf - % zcat vim-6.0-src1.tar.gz | tar xvf - % zcat vim-6.0-src2.tar.gz | tar xvf - % cd vim60; ls -F Makefile README_src.txt configure* runtime/ README.txt README_unix.txt pixmaps/ src/ % echo $PATH .:/usr/local/bin:/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin % configure --enable-multibyte 日本語にも対応させるという指示 creating cache auto/config.cache checking whether make sets ${MAKE}... yes checking for gcc... gcc | checking --enable-multibyte argument... yes checking --enable-xim argument... defaulting to auto checking --enable-fontset argument... no | % make % make install * Vim を使ってみる ~/.vimrc --------------- |set showmode << 状態を表示する。-- INSERT -- というように画面下に出る。 |set backup << セ−ブ時にバックアップを作る。チルダが前についたファイル名で。 |set tabstop=4 << タブを4にする。デフォルトのままだとタブは8になっている。 |set expandtab << タブコ−ドをブランクにする。普通、空のとこはブランクでいい。 ディスプレイ 15 inch、INDY IRIX 5.3 の端末画面 wintermでエディット作業するに 当り、画面を出すコマンドを用意した。文字はデフォルトより少し大きめにしてある。 /usr/local/bin/wopen ---------------------------------------------------------------------------- |winterm -fn '-sgi-screen-medium-r-normal--18-180-72-72-m-90-iso8859-1, --mincho-*--14-*,-*--14-*' % vim readme INDY の端末画面で Vim を起動する。 ---------------------------------------- | readme (/usr/local/source/vim) -- VIM ファイル名、ディレクトリも表示される。 |--------------------------------------- | へのもへなんたらかんたら ESC+: で setと入れると設定したオプシ | ョンのみが表示される。 |:set |--- Options --- ESC+: で set allとやると全てのオプシ |backup expandtab tabstop=4 ttyfast ョンが表示される。一杯ある。 ---------------------------------------- ESC+: は Escape キ−を押してから ':' コロン・キ−を押すということ。 viの操作でも おなじみのコマンド入力モ−ドである。以下 ESC+: はただの : と示す。 :set nowrap もやるといいだろう、長い1行でも折り返されない。:set number で行番号 を表示する。行番号の表示をなくすには :set nonumber とやる。 * Vim の便利な機能 [ 便利なビジュアルモ−ド! ] ESC+v でビジュアルモ−ドというのになる。カ−ソルを移動すると、つれてその範囲が反 転する。これで範囲指定のカット&ペ−ストができる。d で削除。y でヤンク、つまりバ ッファに保存する。その後 p でペ−ストする。ESC+CTRL+v をやると-- VISUAL BLOCK -- というモ−ドになり矩形領域を切り出すことができる。これは便利だ。viの場合だと、こ こから何行をコピ−するという指定しかできないのだ。ESC+CTRL+v は Escapeキ−を押し てから Ctrl キ−と v キ−を同時に押すということ。ちょっとキ−操作の表現、混乱。 [ リモ−トのファイルを編集 ] % vim ftp://192.168.1.20/katou/ttt.txt ftp の他に rcp, scp, http が使える。 scp てところで何だ。初めて聞いたぞ。 ftp だとユ−ザ名とパスワ−ドを入れるよう 追記:分かりました。セキュアシェル 出て来る。あらかじめ設定しておくこともで SSH のコマンドでした。下参照のこと。 きるとか。しかし、これは有難い機能だ−。 vim の画面のコマンド入力モ−ドで :e ftp://192.168.1.20/katou/ttt.txt でもできる。 [ ウィンドウの分割ができる ] ・ウィンドウを分割するには CTRL+ws か :split file_name と入れる。 ・ウィンドウをクロ−ズするには CTRL+wc か :close と入れる。 ・ウィンドウを移動するには CTRL+wp で上、CTRL+wn で下へ。 [ カ−ソルの移動を覚えよう ] 基本的には vi と同じである。なかなか覚えられない。せめて一週間に1個でいいから覚 えないかん。コンフィグファイルをいじるだけでも、以下の操作ぐらい覚えておくとよい。 マシンの前に紙書いて貼っておくか。G ファイルの最後へ、ggファイルの最初へを先ず覚 える。^ 行頭へ、$ 行末へ。 大文字の J で現在の行に次の行を移動させる、これ覚えな いとすごい不便。Ctrl+f 1ペ−ジスクロ−ルダウン、Ctrl+b 1ペ−ジスクロ−ルアップ、 Ctrl+e 1行スクロ−ルダウン、Ctrl+y 1行スクロ−ルアップ。 * Vim の参考 「Software Design」西岡托洋氏の記事3本。2000/09 "初めてのVim"、 > 2001/02 "ここまで使えるVim"、2001/04 "ここまで使えるVim続編" 「UNIX MAGAZINE」 2001/10, P.59〜73 "プログラミングに活かす vim 6.0" > ネットワ−ク越しのファイル編集、大江氏と河野氏による。 * リモ−トのファイルを編集の続編 `24/03 事の発端はインタ−ネットの iDC にホスティング・サ−バを借りたこと。 占有でまるっ と1台、ル−トのアカウントをもらった。サ−バへのアクセスは SSH でやるという。 先 ずは手元のマシンの indy に OpenSSH をインスト−ルして、 iDC サ−バにアクセスして みた。vim でリモ−トファイルの編集をしようとしたところ、かなり反応が遅い。それで 手元のマシンの sola にも OpenSSH の環境を作りテストしてみた。indy からロッグイン katou で sola のファイルにアクセス、katou% vim stp://sola/p1.txt。画面がおかしく なることもなく、ちゃんと編集作業ができた。%vim scp:// の scp は OpenSSH のコマン ドである。vim については設定など何もいじってない。下の図では、indy が SSH クライ アント、sola と soto がその SSH サ−バ。それに sola は soto のクライアントにもな っている。つまり手元のテスト環境と実際の作業環境がある訳である。 SSH Client SSH Client & Server SSH Server 192.168.1.20 indy □ sola □ # /usr/local/sbin/sshd -------- インタ−ネット |IRIX 5.3 |Solaris 2.6 | soto | iDC でのサ−バ ------------------------------------------- -------- /nix/katou/.ssh/ /usr/people/katou/.ssh/ /usr/home/katou/.ssh/ id_rsa.pub -----> id_rsa.pub --> authorized_keys2 --> authorized_keys2 id_rsa id_rsa /usr/people/katou/p1.txt /usr/home/p2.txt indy(katou)% vim stp://sola/p1.txt << 既存のファイルでも新規でもいい。マシ :!scp sola:p1.txt /tmp/v813513/0 ン indy で、ロッグインのユ−ザ katou。 Enter passphrase for key '/usr/people/katou/.ssh/id_rsa: かとう No matching autocommands Hit ENTER or type command to continue この間で普通にエディット作業する。 つまりリモ−トにあるファイルをロ−カ :wq ルにコピ−してきて編集した後、リモ− "/tmp/v813513/1" [New] 7L,59c written トに送るという一連の作業が行なわれる。 :!scp /tmp/v813513/1 sola:p1.txt Enter passphrase for key '/usr/people/katou/.ssh/id_rsa: かとう * INDY へ Vim インスト−ル後の状態 % ls -al /usr/local/bin lrwxr-xr-x 1 root sys .. eview -> vim lrwxr-xr-x 1 root sys .. evim -> vim lrwxr-xr-x 1 root sys .. ex -> vim lrwxr-xr-x 1 root sys .. gview -> vim lrwxr-xr-x 1 root sys .. gvim -> vim lrwxr-xr-x 1 root sys .. gvimdiff -> vim lrwxr-xr-x 1 root sys .. rgview -> vim lrwxr-xr-x 1 root sys .. rgvim -> vim lrwxr-xr-x 1 root sys .. rview -> vim lrwxr-xr-x 1 root sys .. rvim -> vim lrwxr-xr-x 1 root sys .. view -> vim -rwxr-xr-x 1 root sys .. vim lrwxr-xr-x 1 root sys .. vimdiff -> vim -rwxr-xr-x 1 root sys .. vimtutor -rwxr-xr-x 1 root sys .. xxd % ls -F /usr/local/share/vim/vim60 bugreport.vim ftplugin/ menu.vim colors/ ftplugin.vim mswin.vim compiler/ ftplugof.vim optwin.vim delmenu.vim gvimrc_example.vim plugin/ doc/ indent/ procset.ps evebcdic.ps indent.vim scripts.vim evim.vim indoff.vim syntax/ eviso.ps keymap/ tools/ filetype.vim lang/ tutor/ ftoff.vim macros/ vimrc_example.vim % ls /usr/local/share/vim/vim60/plugin README.txt explorer.vim gzip.vim netrw.vim rrhelper.vim README.txt ----------------------------------------------------------------------- |The plugin directory is for standard Vim plugin scripts. |Standard plugins: |explorer.vim file browser |gzip.vim edit compressed files |netrw.vim edit files over a network |rrhelper.vim used for --remote-wait editing explorer.vim ----------------------------------------------------------------------- |File: explorer.vim |Author: M A Aziz Ahmed (aziz@acorn-networks.com) |Last Change: Thu, 21 Jun 2001 07:42:08 | | |To use it, just edit a directory (vi dirname) or type :Explore to |launch the file explorer in the current window, or :Sexplore to split |the current window and launch explorer there. |If the current buffer is modified, the window is always split. |It is also possible to delete files and rename files within explorer. |See :help file-explorer for more details | | netrw.vim ----------------------------------------------------------------------- |netrw.vim: (global plugin) Handles file transfer across a network |Maintainer: Charles E. Campbell, Jr. PhD ... | | |Reading: |:Nread ? give help |:Nread "machine:file" uses rcp |:Nread "machine file" uses ftp with <.netrc> |:Nread "machine id password file" uses ftp |:Nread "ftp://machine[#port]/file" uses ftp (autodetects <.netrc>) |:Nread "http://[user@]machine/file" uses http (wget) |:Nread "rcp://machine/file" uses rcp |:Nread "scp://[user@]machine/file" uses scp | |Writing: |:Nwrite ? give help |:Nwrite "machine:file" uses rcp |:Nwrite "machine file" uses ftp with <.netrc> |:Nwrite "machine id password file" uses ftp |:Nwrite "ftp://machine[#port]/file" uses ftp (autodetects <.netrc>) |:Nwrite "rcp://machine/file" uses rcp |:Nwrite "scp://[user@]machine/file" uses scp |http: not supported! | |User And Password Changing: | Attempts to use ftp will prompt you for a user-id and a password. | These will be saved in g:netrw_uid and g:netrw_passwd | Subsequent uses of ftp will re-use those. If you need to use | a different user id and/or password, you'll want to | call NetUserPass() first. | | :NetUserPass [uid [password]] -- prompts as needed | :call NetUserPass() -- prompts for uid and password | :call NetUserPass("uid") -- prompts for password | :call NetUserPass("uid","password") -- sets global uid and password | | * Vim コンパイルの configure のオプション % configure -help Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print `checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR --enable and --with options recognized: --with-vim-name=NAME what to call the Vim executable --with-ex-name=NAME what to call the Ex executable --with-view-name=NAME what to call the View executable --with-global-runtime=DIR global runtime directory in 'runtimepath' --with-features=TYPE tiny, small, normal, big or huge (default: normal) --with-compiledby=NAME name to show in :version message --enable-perlinterp Include Perl interpreter. --enable-pythoninterp Include Python interpreter. --with-python-config-dir=PATH Python's config directory --enable-tclinterp Include Tcl interpreter. --with-tclsh=PATH which tclsh to use (default: tclsh8.0) --enable-rubyinterp Include Ruby interpreter. --enable-cscope Include cscope interface. --enable-workshop Include Sun Visual Workshop support. --enable-sniff Include Sniff interface. --enable-multibyte Include multibyte editing support. --enable-hangulinput Include Hangul input support. --enable-xim Include XIM input support. --enable-fontset Include X fontset output support. --with-x use the X Window System --enable-gui[=OPTS] X11 GUI [default=auto] [OPTS=auto/no/gtk/gnome/ motif/athena/beos/photon] --enable-gtk-check If auto-select GUI, check for GTK [default=yes] --enable-gnome-check If GTK GUI, check for GNOME [default=no] --enable-motif-check If auto-select GUI, check for Motif [default=yes] --enable-athena-check If auto-select GUI, check for Athena [default=yes] --with-gtk-prefix=PFX Prefix where GTK is installed (optional) --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional) --disable-gtktest Do not try to compile and run a test GTK program --with-gnome-includes=DIR Specify location of GNOME headers --with-gnome-libs=DIR Specify location of GNOME libs --with-gnome Specify prefix for GNOME files --with-motif-lib=STRING Library for Motif --with-tlib=library terminal library to be used --disable-gpm Don't use gpm (Linux mouse daemon). --disable-nls Don't support NLS (gettext()). * Cobalt Qube3 に vim 入ってました $ /usr/bin/vim -help VIM - Vi IMproved 5.6 (2000 Jan 16, compiled Aug 9 2000 05:03:25) usage: vim [options] [file ..] edit specified file(s) or: vim [options] - read text from stdin or: vim [options] -t tag edit file where tag is defined or: vim [options] -q [errorfile] edit file with first error Options: -- End of options -v Vi mode (like "vi") -e Ex mode (like "ex") -s Silent (batch) mode (only for "ex") -R Readonly mode (like "view") -Z Restricted mode (like "rvim") -m Modifications (writing files) not allowed -b Binary mode -l Lisp mode -C Compatible with Vi: 'compatible' -N Not fully Vi compatible: 'nocompatible' -V[N] Verbose level -n No swap file, use memory only -r List swap files and exit -r (with file name) Recover crashed session -L Same as -r -H start in Hebrew mode -F start in Farsi mode -T Set terminal type to -o[N] Open N windows (default: one for each file) + Start at end of file + Start at line -c Execute first -s Read commands from script file -w Append commands to script file -W Write commands to script file -u Use instead of any .vimrc -x Edit encrypted files -i Use instead of .viminfo -h print Help (this message) and exit --version print version information and exit $ vim --version VIM - Vi IMproved 5.6 (2000 Jan 16, compiled Aug 9 2000 05:03:25) Included patches: 1-3, 5-6, 10-11 Compiled by root@crlf.cobalt.com, with (+) or without (-): +autocmd -browse ++builtin_terms +byte_offset +cindent +cmdline_compl | +viminfo +wildignore +wildmenu +writebackup -X11 -xfontset -xim -xterm_clipboard -xterm_save system vimrc file: "/usr/share/vim/vim56/macros/vimrc" user vimrc file: "$HOME/.vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -O2 -m486 -fno-strength-reduc... Linking: gcc -rdynamic -o vim -lncurses -rdynamic -L/usr/local/lib /usr/lib/p... ------------------------------------------------------------------------------------ [ 付録 ] ftp.vim.org サイト % ftp ftp.vim.org Connected to ftp.nluug.nl. 220-There are currently 117 users logged in (Max 600). 220-Welcome to the FTP archive of The Netherlands Unix Users Group (NLUUG) and | ftp> cd pub/vim 250-This is the top ftp directory for Vim - Vi IMproved 250-Version 6.0 is the latest officially released version. 250- DIRECTORY SYSTEM 250- amiga Amiga 250- extra extra sources 250- mac MacIntosh 250- os2 OS/2 250- patches fixes for released versions 250- pc MS-DOS and MS-Windows 3.1/95/98/NT 250- unix Unix 250-Older versions: 250- atari Atari MiNT 250- be BeOS / BeBox 250- farsi Farsi language files 250- vms VMS 250-Other items: 250- doc extra documentation 250- tools some useful tools 250- unreleased alpha/beta test versions 250- 250-for more binaries (HP-UX, AIX, IRIX, Debian, RedHad, SparcLinux, NextSTEP, 250-OSF, SunOS, Solaris, BeOS, etc.) see http://www.vim.org/binaries.html ftp> ls -rw-rw-r-- 1 506 450 3226 Apr 28 2001 MIRRORS -rw-rw-r-- 1 506 450 8823 May 31 2001 README drwxrwxr-x 2 506 450 4096 Sep 26 18:14 amiga drwxrwxr-x 2 506 450 4096 Nov 2 1998 atari drwxrwxr-x 2 506 450 4096 Nov 2 1998 be -rw-r--r-- 1 506 450 37990 Jul 9 2000 beanie.gif drwxrwxr-x 2 506 450 4096 Sep 26 18:16 doc drwxrwxr-x 2 506 450 4096 Sep 26 18:20 extra -rw-rw-r-- 1 506 450 79254 Sep 1 1997 faq.html drwxrwxr-x 2 506 450 4096 Nov 2 1998 farsi -rw-rw-r-- 1 506 450 134 Sep 1 1997 green_ball.gif drwxrwxr-x 3 506 450 4096 Nov 5 16:31 iccf -rw-rw-r-- 1 506 450 4648 Jun 7 2001 index.html -rw-rw-r-- 1 506 450 2858 Aug 20 1999 lwedchoice-200.gif drwxrwxr-x 2 506 450 4096 Mar 18 2000 mac -rw-rw-r-- 1 506 450 125 Sep 1 1997 new.gif drwxrwxr-x 2 506 450 4096 Sep 26 18:56 os2 drwxrwxr-x 3 506 450 4096 Nov 6 22:07 patches drwxrwxr-x 2 506 450 4096 Sep 26 19:10 pc drwxrwxr-x 2 506 450 4096 Nov 2 1998 tools drwxrwxr-x 2 506 450 4096 Sep 26 18:51 unix drwxrwxr-x 12 506 450 4096 Mar 20 2000 unreleased -rw-rw-r-- 1 506 450 5185 Aug 20 1999 vim_anim.gif -rw-rw-r-- 1 506 450 1091 Aug 20 1999 vimlogo.gif drwxrwxr-x 2 506 450 4096 Feb 10 2000 vms ftp> cd unix 250-SIZE FILE CONTENTS 250-2776551 vim-6.0.tar.bz2 version 6.0 runtime + sources 250-1178487 vim-6.0-rt1.tar.gz version 6.0 runtime part 1 250- 613167 vim-6.0-rt2.tar.gz version 6.0 runtime part 2 250-1246831 vim-6.0-src1.tar.gz version 6.0 sources part 1 250- 389522 vim-6.0-src2.tar.gz version 6.0 sources part 2 250- 250-1266852 vim-5.8-rt.tar.gz version 5.8 runtime files 250-1112952 vim-5.8-src.tar.gz version 5.8 sources 250- 415140 vim-5.7-5.8-rt.diff.gz diff between 5.7 and 5.8 runtime 250- 164832 vim-5.7-5.8-src.diff.gz diff between 5.7 and 5.8 sources 250- 250-1098901 vim-5.7-rt.tar.gz version 5.7 runtime files 250-1230942 vim-5.7-src.tar.gz version 5.7 sources 250- 189089 vim-5.6-5.7-rt.diff.gz diff between 5.6 and 5.7 runtime 250- 98263 vim-5.6-5.7-src.diff.gz diff between 5.6 and 5.7 sources 250- 250-1408862 vim-5.0.tar.gz Unix files for version 5.0 (incl new ctags) 250- 7918 ctags-2.0-2.0.2.diff.gz new ctags 2.0.2 for version 5.0 250- 250-1033905 vim-4.6.tar.gz all files for version 4.6 250- 468153 vim-3.0.tar.gz all files for version 3.0