X68K> Vim v3.0 x68.7 vi editor X680x0 Human68k vi系スクリーンエディタ Vim version 3.0 x68.7 1995/02/06 小笠原博之 Vim は vi 系エディタの1つです。exコマンド行での各種補完やヒストリ、リージョ ンのビジュアルセレクト、ブロック編集、そしてマルチレベル undo など、かなり多 くの拡張機能を持っています。その最新版ともいうべき Vim 3.0 を x68k に移植しま した。修正内容は前回の Vim 2.0 移植の時とほぼ同じです。とはいえ、Vim 3.0 でつ いた画面分割によるウィンドウ編集や、入力時のワード補完、C言語のプリプロセッサ 行サーチなど新しい機能はかなり便利です。元ソースもかなり変わっていたので、取 り敢えず x68k で動くようにして簡単な日本語化作業を行いました。日本語対応は表 示やカーソル移動など簡単な編集において差し支えない程度です。 なお、付属のソース差分を使用すると、UNIX 版でも簡易日本語対応として使えるよ うになります。扱えるコードは EUC または SJIS のみで、ファイル入出力時のファイ ルコード変換等はしません。(コンパイルは SunOS4 でのみ確認) 『オリジナルの Vim について』 ● Vim とは --- README for version 3.0 of Vim より (直訳です) Vim は、UNIX の vi エディタとほとんど完全に互換性を持ったエディタです。唯一 'Q' コマンド (ラインエディタの ex モードに移行します、まずほとんど使われませ ん) が使用できませんが、それを補って余るほどの極めて多彩な機能拡張が施されて います。例えば、マルチレベルUNDO、コマンドラインヒストリ、ファイル名補完、ブ ロック編集などなど、詳しくは difference.doc を参照して下さい。 このエディタは、プログラムなどの ASCII テキストファイルを編集するのに優れて います。編集作業は、特に特殊なキーを使わずに全部キーボードの通常文字から与え ることができるので、たいへん操作を素早く行うことができます。もちろん、ファン クションキーはユーザーが自由に定義して使うことができます。 Vim は、普通 Amiga DOS や MSDOS、Windows NT やいろんなバージョンの UNIX 上 で使われています。Archimedes 対応化のコードも含まれています。もちろん、他の システムで動かすことだって難しくないでしょう。 ドキュメントについて tutor/readme - 初心者向けの練習コースです (いわゆるチュートリアル) reference.doc - Vim コマンドを全部説明してあるドキュメントです difference.doc - UNIX の vi との違いを説明してあります windows.doc - マルチウィンドウとバッファ関連コマンドのリファレンス index - アルファベット順に簡単なコマンド説明が書いてあります amiga.doc - Amiga 版の注意点 unix.doc - unix 版の注意点 msdos.doc - MSDOS 版での注意点 winnt.doc - Windows NT 版での注意点 archie.doc - Archimedes での注意点 Vim は「チャリティウエア」です。自由にコピーして使うことができます。この意 味について詳しいことは uganda.txt を参照して下さい。 コンパイル方法: cd src cp makefile. makefile make もし makefile.unix を使うのであれば、システムに合せてコメント(3行)を外して 下さい。 Makefile にはいろいろコンパイルオプションが書かれています。例えば、digraph を使わないなら DIGRAPHS オプションを外して再コンパイルすると多少メモリの節約 になるでしょう。また、Amiga や MS-DOS 版では画面の制御コードを内蔵してコンパ イルされますが、もし他の端末で使うことがあるなら TERMCAP オプションをつけて再 コンパイルしなければなりません。Makefile にも目を通しておいて下さい。 Please send comments, bug reports and suggestions to: stable address: Bram Moolenaar UUCP E-mail: mool@oce.nl molenstraat 2 2162 HP Lisse Fax: +31 2521 16381 The Netherlands Tel: +31 2521 13037 September 1994 - August 1995: Kibaale Children's Centre Tel: +256 481 21033 p.o. box 1658, Masaka, Uganda, East Africa Fax: +256 481 20514 『 X680x0 版の Vim について』 ●はじめに 前回 stevie, elvis, Xvi に続いて、Vim 2.0 も X68K に移植したわけですが、こ の Vim は各種存在する vi クローン系のエディタの中でも極めて豊富な機能を持って います。stevie にみられるバッファの限界値や未サポートの機能もほとんどありませ んし、便利な拡張も数多く見られ、完成度の高いエディタだといえます。 その Vim がとうとう v3.0 になりました。今度は Xvi にあったようなウィンドウ 分割による編集ができるなど、更に便利な拡張が施されています。 ただ、私自身が vi のすべての機能を使いこなしているわけでも、Vim の全機能を 理解しているわけでもありませんので、動作チェックも使う機能しか行っておらず、 完全であるとはいえないかもしれません。特に日本語まわりは完璧ではありません。 操作によっては表示が文字化けする可能性があります。その時は CTRL+L で再描画 させて回避して下さい。また検索などにおいてはいっさい手をつけていませんので、 日本語が含まれる場合、漢字の2byte目を差してしまう等の誤動作する可能性がありま す。 以下、起動方から順次移植して気がついたこと、追加変更したことなどを説明して いきたいと思います。(Human68k と書いてある項目は X68K でのみ有効です) この X68K 版は、実行ファイルバイナリと、元の Vim 3.0 とのソース差分、そして 最小限のいくつかのファイルのみの配布パッケージになっています。リファレンスマ ニュアルやチュートリアルファイル等は、オリジナルのアーカイブを入手して下さい。 入手方法がわからないという場合は私まで連絡して下さい。 ● X68K 版付属ファイルについて vim.x 実行プログラム本体 VimX68K.doc この説明ドキュメント README 元の README ドキュメント uganda.txt README に出てくるドキュメント vim.hlp ヘルプコマンドで呼び出されるファイル vim3kanji.lzh ソース差分、および追加ソースリスト vim.hlp は vim.x と同じディレクトリに入れておいて下さい。(Human68kのみ) ●起動方法 (Human68kのみ) vim [vimオプション] [編集ファイル名] で起動します。もし起動しても画面がおかしい時は次のようにして実行して下さい。 vim -T builtin_x68k [vimオプション] [編集ファイル名] -T は使用するターミナル名の指定です。-T オプションがない場合は環境変数 TERM からターミナル名を得ます。ここで指定している builtin_x68k は、vim が内部に持っ ている termcap 情報を使用することを意味しています。だから環境変数 TERM に set TERM=builtin_x68k と指定しておくこともできます、またもちろん、すでに ng や elvis 等で termcap を利用し、TERM の設定を行っている場合はこれらの設定なしに、そのまま vim とす るだけで起動するはずです。(ただしこの場合ファンクションキー #1〜#0 やカーソ ルキーは使えません) なお環境変数 TERM が未定義の場合は内部の builtin_x68k を 参照します。 ● TwentyOne.x の常駐 (Human68kのみ) 必ず TwentyOne.x を組み込んでおいて下さい。複数ピリオドを含んだファイルを作 る可能性があります。shortname オプションを設定している場合はこの限りではあり ませんが、マルチピリオドスイッチを付けないにしても TwentyOne.x は組み込んでお くようにして下さい。Vim X68K は内部の処理上の都合でパスの区切りが多重になる場 合があります。TwentyOne.x は a:/bin//vim.hlp などといったパスを有効にしてくれ るからです。 ●日本語対応 簡易対応です。日本語文字が通る、画面のアップデート時に日本語文字が化けない、 取り敢えず普通に動かすにはカーソル移動が矛盾しない、インサートモードで日本語 の入力が可能、削除が可能、といったところです。SJIS の 1byte JIS コード(いわゆ る半角カナ) も使えます。もし画面表示が化けておかしいと思ったら CTRL+L を実行 して下さい。 その他内部的な細かいところでは全く処理していません。文字検索や置換、リプレー スモード、などでは 2byte 目のコードが未処理のままになっています。またビジュア ルリージョン指定時も表示化けが起こりやすくなります。 ちなみに付属のパッチをソースにあてて -DKANJI -DSJIS (または -DKANJI -DEUC) を付けてコンパイルすれば、UNIX 版でもこれと同等の簡単な日本語対応になります。 コンパイル方法はソースアーカイブ内に含まれるドキュメントファイルを参照して下 さい。 ●日本語 FEP コントロール (Human68kのみ) stevie や Xvi の X68K 版同様、日本語 FEP コントール機能を追加してあります。 挿入モードで ESC を押してノーマルモードに戻った時、FEP 状態やキーボード LED 状態を全部解除してくれます。同時に挿入モードでの FEP およびキーボード LED 状 態を記憶し、再び挿入モードに入った時に FEP や LED 状態をセットします。 オプションで fepctrl (省略形 fc) を追加してあります。デフォルトは 3 です。 fepctrl=0 FEPコントロール機能を一切使用しない fepctrl=1 FEP解除機能のみ使用する fepctrl=2 FEPコントロール(ON/OFF)を使用する fepctrl=3 FEPコントロール使用、かつ FEP 状態リセット有効 fepctrl=1 の時は、挿入モードから出る時に ESC で FEP/LED の OFF のみ行います。 再び挿入モードに入っても、状態を戻すようなことはしません。 fepctrl=2 の時は、挿入モードに入った時常に元の状態に戻します。 fepctrl=3 の場合は挿入モードに入る時に状態を戻しますが、故意にその状態を忘れ させることができます。ノーマルモードでさらに ESC を押すと、挿入モードの時の状 態を忘れ、再び戻っても状態が戻りません。 例えば日本語の文章を入れていて、ノーマルモードになってから「.」等でそのコマ ンドを繰り返そうとすると、いちいち FEP の ON/OFF が行われて非常にうっとおしく なります。そこで、もう一度余計に ESC を叩いて忘れさせておいてから「.」を実行 すると、それがなくなり動作が速くなります。 X68K 版 stevie や Xvi に組み込んであるのはこの fepctrl=3 に相当します。 ●漢字コード 内部の漢字判定処理をどう扱うか選択するためのオプション kanjitype を追加し てあります。(省略形 kt) kanjitype= 0 内部の漢字対応処理を行わない 1 内部の漢字処理はSJISで判定する 2 内部の漢字処理はEUCで判定する これは表示や書き出すファイルのコードに影響を与えるものではなく、あくまで内 部での漢字対応処理をどう扱うかのみに関係します。例えば kanjitype が 0 の場合、 日本語未対応時と全く同じで、すべての文字が漢字判定を素通りし、カーソル移動も 全角文字を特別扱いしません。 デフォルトは 1 です。もし編集するファイルの漢字コードが EUC で、かつ EUC 表 示可能な端末上で作業を行うなら kanjitype=2 に設定して下さい。内部で漢字コード 変換等は一切行いません。(-DEUC のときはデフォルトタイプは 2 ) ● TERMCAP 実行には termcap ファイルが必要ですが、Vim は最初からいくつかの termcap エ ントリを内蔵しているため、特になくても差し支えありません。内蔵しているターミ ナル名のエントリは Human68k では次の3つです。 builtin_x68k builtin_ansi builtin_xterm これらのターミナル名は、環境変数 TERM、または起動時の -T オプションで指定 します。Vim の利用する各エントリの内容は、:se termcap コマンドで表示させるこ とができます。 UNIX 版では builtin_x68k は存在せず、builtin_ansi がデフォルトになります。 ●環境変数展開 :set helpfile=$HOME/vim.hlp などのように、オプション設定には環境変数を含ませることができます。また、X68K 版では内部の特殊な環境変数として「VIM68_EXECDIR」が使えます。これは vim.x の 置いてあるディレクトリパスに展開されます。上記の例にある helpfile も、デフォ ルトでは「$VIM68_EXECDIR/vim.hlp」となっています。 ●設定ファイルの読み込み (Human68kのみ) 起動時に実行する初期定義の順番は以下のようになっています 1. システムデフォルトの設定ファイル $VIM68_EXECDIR/Vimrc の実行 2. 以下の4つを順番に探し、最初に見つかったものを実行する (1) 環境変数 VIMINIT が定義されていればその内容を実行 (2) $HOME/.vimrc があれば、それを読み込んで実行 (3) 環境変数 EXINIT が定義されていればその内容を実行 (4) $HOME/.exrc があれば、それを読み込んで実行 3. set exrc が設定されていれば、カレントディレクトリにある .vimrc または .exrc のどちらかを実行する。 この初期設定ファイルは、:mkexrc コマンドで作ることができます。このとき現在 設定されているオプションの内容を、カレントに .exrc というファイル名で書き出す ことができます。(:mkvimrc の場合は .vimrc というファイルに書き出します) ●先行入力のキャンセル Vim は先行入力されたキー操作のキャンセルができます。CTRL+C は常に優先され、 これが押された時に残っているキーバッファの操作はクリアされるので、画面表示が 遅いなどバッファがたまってしまっても、即座に止めることができます。 ●ファイル名補完とワイルドカード展開 (Human68k) Vim の特徴のひとつに、コマンドライン行(:,/コマンド等)での編集操作がありま す。このときファイル名補完やワイルドカード展開も可能です。例えばファイル名補 完は TAB でできますし、CTRL+A ではマッチするファイル名を全部取り込んでくれま す。CTRL+D では対応するファイル名候補を表示します。 Vim 2.0 X68.4 ではワイルドカード展開部のコードを直接 Human の DOS CALL に 置き換えてソースを書き換えていましたが、今回はソースはオリジナルのままで、シェ ルの展開を使うようになっています。そのためワイルドカード展開に UNIX 系のシェ ルが必要で、また補完も遅くなっています。 通常のシェルに COMMAND.X や dash を使っている場合でもファイル名補完ができる よう、ワイルドカード展開用シェルは別登録するようになっています。この設定オプ ションは shellw (省略系 shw ) です。 set shellw=a:/bin/zsh.x デフォルトでは ksh を呼び出すようになっています。(注: 補完ファイル名の大文字 小文字の区別はシェルに依存します) また起動時のファイル名でもワイルドカード展開は有効なため、例えば COMMAND.X 上からでも vim *.doc といったファイル名起動ができます。 ●チャイルドシェルの実行 (Human68kのみ) :sh および CTRL+Z は、どちらもチャイルドシェルの実行になります。この時実行 されるシェルはオプション shell によって設定できます。この内容は起動時に環境変 数 SHELL から取り込まれますが、もし環境変数が未定義の場合は command.x になり ます。 シェルコマンドの実行フォーマットはオプション shelltype によって制御されま す。この値は bit0 によって -c を付けるか付けないかの指定ができます。ただし、 コマンドが常に「"」で囲まれるため command.x がこの形を受け付けてくれません。 そこで bit7 を拡張し、以下の4タイプを選択できるようにしてあります。 shelltype= 0 -c "コマンド" = 1 "コマンド" =128 -c コマンド =129 コマンド よって command.x を使用する場合は shelltype=129 でなければなりません。環境 変数 SHELL が未定義の場合は勝手に 129 になりますが、そうでない場合はデフォル トで 0 になります。もし SHELL= a:/command.x などのように設定してある場合は初 期化ファイル等で se shelltype=129 と定義しておいて下さい。 なお、ワイルドカード展開用シェルは常にシェルタイプ 0 で実行されます。 ● :file コマンド :file コマンド (CTRL+G) の表示に拡張を施してあります。行数だけでなく、行の カーソル位置の桁数とその行全体の桁数、そしてカーソル直下の文字コードを表示し ます(全角文字対応)。ただし、ここでのカーソル位置桁数表示は :se ruler のものと は異なり 0 から数えています。 ●画面サイズの獲得 (Human68kのみ) X68K では、編集画面サイズを得るために、以下の順に検索を行います。 1. termcap エントリの li と co 2. 環境変数 LINES および COLUMNS 3. B_CONSOL の戻り値(IOCSレベルでの画面サイズの取得) builtin_x68k の場合は li と co エントリがありませんので、2. または 3. が有効 になります。 ●スクリプトファイル (Human68kのみ) これは Vim 3.0 では不要になりました。(Vim 2.0 でマルチレベル UNDO 実現のた めに必要としていたテンポラリファイルのこと) 代わりに Vim 3.0 ではスワップファ イルというものが作られます。これは編集中の情報をファイルに書き出しておいてク ラッシュ時に編集状態を復元するために使われます。とはいえスワップファイルを作 成するようにしておくと、定期的にカレントディレクトリに対して DISK アクセスが 起こるため、この X68K 版ではデフォルトで OFF にしてあります。 ● jjoinspace オプション vi は J コマンドによる行の結合を行うと、その間にスペースが入るようになって います。日本語の場合はこのスペースがじゃまになることが多いので、それを変更す るためのオプション jjoinspace (省略形 jjs) を追加してあります。デフォルトは jjoinspace=3 です。 jjoinspace=0 日本語を特別扱いしません =1 前の文字が日本語の時だけスペースを入れません =2 後ろの文字が日本語の時だけスペースを入れません =3 前後の文字が日本語の時だけスペースを入れません ●改行マーク表示 オプション crmark (省略形 cm) を追加してあります。se crmark とすると改行文 字を表示するようになります。se list とは違い TAB 文字はそのまま表示します。 行末の空白を確認する場合などに便利です。 ●特殊コード 0xff 等のファイルに含まれる特殊コードは [FF] 等のようにして表示、編集できる ようにしました。(jstevieのまねです) ちなみに Vim では、特殊コードも直接数値を 入力してキーボードから入力することができます。例えば 0xff をファイルに挿入し たいなら、CTRL-V のあとに数値を3桁で 255 と打ちます。これは必ず3桁必要で10進 数を使います。 ●特殊キー (Human68kのみ) カーソルキー、ファンクションキー等の特殊なキーも対応しています。カーソルキー を利用して、挿入モードのまま移動、コマンド行編集やヒストリ操作、ができます。 ただしこれらの特殊キーは termcap への登録が必要になります。vim.x が内蔵して いる builtin_x68k では最初から定義されているので、カーソルキーを使いたい場合 は builtin_x68k を使う必要があります。または termcap へ登録して下さい。 :se termcap と実行すると、builtin_x68k の各エントリが表示されますので参考に して下さい。 ちなみにファンクションキーを内部キーコードで直接 map するときは termcap の 設定は必要ありません。また Vim 3.0 x68.6 では、カーソルキーを使わなければなら ない操作を他のキーに割り当てできるような拡張が行われています。そのため設定次 第では termcap エントリへのキー設定を不要にすることもできます。 なお、x68.6 から DOS 版同様デフォルトでいくつかのキーマップをするようになり ました。以下のキーが最初に定義されます。 ノーマルモード (括弧内は等価なコマンド) HELP ヘルプ表示(:help\r) INS インサートモードへ(i) HOME 行の先頭へ移動(0) ROLLUP 1画面進む(CTRL-F) ROLLDOWN 1画面戻る(CTRL-B) CLR 画面再描画(CTRL-L) F1 ファイル先頭行へ移動(1G) F2 ファイル最終行へ移動(G) インサートモード HELP ヘルプ表示(CTRL-O:help\r) INS インサートモード終了(ESC) HOME 行の先頭へ(CTRL-O0) ROLLUP 1画面進む(CTRL-OCTRL-F) ROLLDOWN 1画面戻る(CTRL-OCTRL-B) ●ファンクションキー (Human68Kのみ) キー定義は vi の map コマンドを使用します。これはノーマルモードで有効で、編 集モードまたはコマンドモードでは map! コマンドを使います。Vim ではこれを拡張 してあり、挿入モード時の動作とコマンド行での動作を imap, cmap コマンドによっ てそれぞれ独立して定義を行うことができるようになっています。 :map キーコード 展開文字列 ファンクションキーは、map コマンド時に [F1]〜[F10] を #1 〜 #9, #0 という名 前で用いることができます。 :map #1 1G ([F1] でファイル先頭にジャンプする定義例) [F1]〜[F10] 以外のキーは、直接内部キーコードを map することで定義できるよう になります。 :map ^_@ 1G これは先程の :map #1 1G と同じ働きをしますが、内部コードを使って定義したもの です。(^_ は CTRL+V,CTRL+_ として入力する) この map によるバインドは、termcap によるファンクションキー列より優先されるので、カーソルキーや HELP キーにも別 の機能を割り当てることができます。 各ファンクションキーの X68K での内部キーコードは以下のようになっています。 (注: これは X68K のキーボードが実際に送信する機種固有のコードです,x68.6から 変更されています) [F1] ^_@(#1) [F11] ^_J [F2] ^_A(#2) [F12] ^_K [F3] ^_B(#3) [F13] ^_L [F4] ^_C(#4) [F14] ^_M [F5] ^_D(#5) [F15] ^_N [F6] ^_E(#6) [F16] ^_O [F7] ^_F(#7) [F17] ^_P [F8] ^_G(#8) [F18] ^_Q [F9] ^_H(#9) [F19] ^_R [F10] ^_I(#0) [F20] ^_S [RUP] ^_T [RDW] ^_U [INS] ^_V [DEL] ^? [↑] ^_X [←] ^_Y [→] ^_Z [↓] ^_a [CLR] ^_b [HELP] ^_c [HOME] ^_d [UNDO] ^_e ●カーソルキーの逆定義機能 Vim では、カーソルキー等の特殊キーでしか操作できない機能があります。例えば exコマンド行編集時のカーソル移動やヒストリ参照はカーソルキーを使わなければな りません。これらの機能を他のキー操作に置き換え可能にするために、x68.5 では map コマンドで内部キーコードも指定できるよう拡張を行いました。例えば :cmap ^B ^VFnC :cmap ^F ^VFnD とキー操作をマップしておくと、ex コマンド行で CTRL+B は [←]、CTRL+F は [→] と全く同じ働きをするようになります。この機能はもちろん UNIX 版でも使えます。 キーマップを表示させた場合 "^VFn" は特殊キーコードの 1byte 目として '#' と表 示されます。 各カーソルキー、特殊キーの内部機能コードは以下のようになっています。 (注: 各機種の固有キーコードは、すべてこの機能コードに置き換えられます。つまり この機能コードは機種に依存せず共通です) [↑] ^VFnA [↓] ^VFnB [←] ^VFnC [→] ^VFnD [SHIFT]+[↑] ^VFnE [SHIFT]+[↓] ^VFnF [SHIFT]+[←] ^VFnG [SHIFT]+[→] ^VFnH [HELP] ^VFn] [UNDO] ^VFn^ ●デバイス指定オプション (Human68kのみ) X68K 版では、デバイス指定オプション -d を使って標準入出力だけを使うことが できるようになります。UNIX から tip で RS-232C を通して X68K にアクセスした 場合など、vim -T builtin_xterm -d rs 等の指定で多分起動できるんじゃないかと 思います(未確認)。 ●バイナリファイル名 view.x(Human68k) にリネームまたはリンクして使うことができます。 ●その他、ちょっとだけ Vim の便利な機能の説明 ・ウィンドウ分割 Vim 3.0 の目玉ともいえる機能です。Xvi のように画面分割できます。取り 敢えず以下のコマンドを覚えておくと便利でしょう。 CTRL+W s 現在の編集画面を分割する CTRL+W CTRL+W 次のウィンドウに移動する CTRL+W k 上のウィンドウに移動する CTRL+W j 下のウィンドウに移動する CTRL+W c ウィンドウを閉じる CTRL+W o 他のウィンドウを全部閉じる :sp file ウィンドウ分割で新たに編集ファイルを読み込む ・拡張括弧検索 vi の % コマンドは、カーソル位置にある括弧と対応する括弧にジャンプす ることができます。プログラムを作っていて括弧の対応を調べる時便利な機 能でしたが、Vim では以下のものも対応位置を検索することができます。 C言語のコメント /* 〜 */ C言語のプリプロセッサ #if/#else/endif の対応 それぞれカーソルが載っている時に % を押します。特にプリプロセッサの 条件文検索はプログラムを書く場合に非常に便利です。 ・挿入モードでのワード検索 挿入モードでキー入力している時に、CTRL+P および CTRL+N で、編集テキ スト内の単語を取り出すことができます。シェルのヒストリ機能に似ていま す。例えば printf( "%s %s %s\n", argv[0], argv[1], argv[2] ); というプログラムを書く場合、2番目以降の argv は CTRL+P と操作するだけ で入力できるので何度も同じ単語を打ち直す必要がありません。もちろんソー ス中に他にも printf があるなら、そこでも CTRL+P を何度か押すだけで入 力できるでしょう。最初にアルファベットを何文字か入力してから、CTRL+P または CTRL+N を操作することで、その文字で始まる単語のみ検索します。 ・ビジュアルセレクト v 文字単位 V 行単位 CTRL+V 任意の四角いブロック 通常 vi では範囲指定は数字や移動オペレータで与えますがこの機能を使う とカーソル移動で目で見ながら操作することができます。(範囲は反転表示) (ビジュアルセレクトでは、日本語が含まれている行の場合反転表示が化け ることがあります) ・逆挿入モード インサートモード状態で、CTRL+B によって通常挿入モードと逆挿入モードが 切り替えできます。日本語は逆挿入になりません。(Vim 2.0 では CTRL+P で したが v3.0 で CTRL+B に変更されています) ・横スクロールモード elvis のように、長い行を折り返さずに横スクロールさせることもできます。 例えば、:se nowrap ss=20 などなど。ss は横スクロール時の文字数指定で す。:se wrap で戻ります。 ・キーボードマクロ vi のマクロといえば :map ですが、ここでいうキーボードマクロとは emacs のようなキーボードからの操作をそのまま記録&再実行するものをいいます。 q (はa〜zの任意の1文字)で記録開始、q で停止、@ で実 行します。 ・マルチレベル UNDO 機能 編集動作を取り消します。vi だと直前の1つの動作しか取り消せませんでし たが、Vim では u を押すたびにどんどん過去の状態に遡ります。UNDO 自体 の取り消しは CTRL+R です。他の vi のつもりで何気なく u を2回たたいて しまったら、あわてず CTRL+R を使いましょう。 ・コマンド行編集 : や / 等のコマンド入力時に BS で戻すだけでなく、カーソルキーで行編 集やヒストリ、TAB キーによるコマンド名、ファイル名補完がききます。 ・カーソル位置のリアルタイム報告 :se ruler を実行しておくと、画面の右下に現在のカーソル位置の行数と桁 数をリアルタイムに表示するようになります。これは挿入モードでも有効で す。文字数と桁数が異なる場合は - で区切って両方表示します。 ・C言語モード :se smartindent でC言語モードになります。これは :se autoindent をよ り強力にしたようなもので、{ や } などもインデントを判断してくれます。 ・簡易単語検索 * を入力すると、その時のカーソル位置にある単語を検索文字列に取り込ん で検索を行います。 ・C言語数値定数演算 0x30 などと書いてある定数上にカーソルを置き、10進数で数値を入力してか ら CTRL-A を押すと、定数値に加算します。CTRL-X だと減算です。8,10,16 進定数が使えます。 ●悩み相談室 ◇編集中にヘルプを見るには? :help コマンドを実行して下さい。X68K では HELP キーが使えます。 ◇ Vvi のオプション一覧を表示するには? :se だけで変更したオプションのみ表示 :se all で全オプション表示 ◇ vi と完全コンパチにするにはどうしたらいいのか? :se compatible と実行します。マルチレベル UNDO 等、Vim の拡張機能が互 換性優先のため制限されます。 ◇セーブする時バックアップファイルを作らないようにするには? :se nobackup nowritebackup と実行します。 ◇ name.doc.bak や name.doc.swp とかいう、複数拡張子がつくのをやめるには? :se shortname と実行します。マルチピリオドを使わず、MS-DOS と同じよう に8文字+拡張子3文字以内でこれらのファイル名を生成するようになります。 ●拡張オプション一覧 名称(省略名) 種類 crmark (cm) BOOL 改行マーク表示制御 fepctrl (fc) NUM FEPコントロールオプション(Human68kのみ) jjoinspace(jjs) NUM 行連結時のスペース制御 kanjitype (kt) NUM 使用する漢字コードの種類 shellw (shw) STR ワイルドカード展開用シェル(Human68kのみ) ● .vimrc 作成例 私が HOME ディレクトリに置いて使っている .vimrc です。 --- .vimrc ------------------------------------------------------------------ se ai aw nobackup nowritebackup crmark cmap ^B ^VFnC cmap ^F ^VFnD cmap ^P ^VFnA cmap ^N ^VFnB ----------------------------------------------------------------------------- exコマンド行('/'による検索モード等も含む)で、CTRL-P/N/F/B によって編集とヒス トリ参照できるようにしてあります。元々の ^P/^N はファイル名補完の前/次候補で すが、これはほとんど TAB で用が足りるのでこれで十分(だと思う)です。 ●最後に Vim の修正は結構な手間です。Xvi や MicroEMACS 等では元々 8bit コードが通る ように作られているので、日本語化作業はカーソル移動や編集等の動作の修正だけで すみます。これらのエディタでは、描画最適化による 2byte コードの化けを除けば、 何もせずに即日本語ファイルの表示も可能でした。 ところがこの Vim はそうはいきません。やっかいなことに、設計上入出力が 7bit しか通らないようになっているのです。キー入力では 0x80 以上のコードに特殊キー を割り当ててあり、表示出力に至っては最上位 bit が画面描画のフラグに使われてい ます。だから、SJIS や EUC の 8bit コードが通るようにするだけでもかなりの修正 を強いられます。 というわけでたいへん言い訳がましいのですが…細かい部分ではかなり(ほとんど?) 日本語未対応のところが残っていますけど、今回はここまでやったということでどう かご勘弁を。気が向いたら徐々に直していきます。 開発は X680x0 + Human68k v2.03 上で行いました。コンパイルは gcc, has, hlk そしてライブラリに gnulib.a, libc.a を使わせていただきました。UNIX 上での確 認は SunOS4 (-DKANJI -DSJIS オプション) でのみ行っています。 termcap を使えばおそらく Ko-Window + BG-Term 上でもそのまま動作するでしょ う。(未確認) Ko-Window もどうぞよろしく。vi 使いにとってウィンドウはとても便 利です。 ● Vup 履歴 ・Vim 2.0 x68.0 94/01/20 Vim2.0 を取り敢えず X68K でコンパイルしただけ x68.1 94/01/22 日本語未対応状態での X68K 対応が一応完成 x68.2 94/01/26 日本語簡易対応,他いくつかの機能拡張追加 x68.2.1 94/01/27 各種デバッグ,日本語未対応部分の数箇所の修正 x68.2.2 94/01/29 ビジュアルモードでの表示化けを(多少)直した x68.3 94/02/01 X68Kでの表示方式を修正,内蔵termcapの改良,改行マークをカラーに x68.4 94/02/17 EUC漢字マップのミス修正,builtin_x68k が使用できないバグ修正 termlib を Vim 付属のものに変更,UNIX版でも suffixes が Human のものになってしまうバグ修正 ・Vim 3.0 x68.0 94/10/18 Vim 3.0 を入手しそのままコンパイルしただけ(日本語未対応) x68.5 94/10/22 x68.4のソース差分を元に8bit透過および日本語対応化 x68.6 94/10/26 FNキーコード一部修正,特殊文字を[HEX]表示する,INS時C-E,C-Yの 日本語対応,X68K用にerrorformatのデフォルトを直した x68.7 95/02/06 日本語版HELPファイルの作成, 環境変数 TERM が未定義の場合自 動で builtin_x68k を指定するようにした。Ko-Window版の作成 ●連絡先 小笠原博之 InterNet: oga@dgw.yz.yamagata-u.ac.jp SPS-NET: SPS0783 COR. DenDenNET: DEN0006 COR. (0238-26-3444, 133.24.72.9 login:den)