  viを使い倒そう
  はっとりまさあき
  last update: Mar. 14, 2009

  この文書はvi[22mというテキストエディタの使い方に関するものです。といっても
  本物のvi(Solaris等の商用UNIX付属のviでしょうか?)は、 Linuxディストリ
  ビューションには入っていませんので、 viクローンの使い方です。文書内で
  はviクローンをviと呼んでいます。
  ______________________________________________________________________

  目次

  1. viとは?
  2. なぜviなのか?
  3. これだけ覚えれば使えます(1st Step)
     3.1 起動方法
     3.2 すべての操作はコマンドで!!
     3.3 大切なモードのお話

  4. 少し進んだ使い方(1) -コマンドモード- (2nd Step)
     4.1 作業の取消をしたい(アンドゥ)
     4.2 カーソルのある行の先頭/末尾にカーソルを移動したい
     4.3 現在ページの先頭行/末尾行にカーソルを移動したい
     4.4 カーソル位置の上下ページにジャンプをしたい
     4.5 カーソルのある行と次の行を連結したい
     4.6 N文字単位のカーソル移動をしたい
     4.7 N行単位のカーソル移動をしたい
     4.8 N文字単位のコピーとペースト(貼り付け)をしたい
     4.9 カーソルのある1行のコピーとペースト(貼り付け)をしたい
     4.10 N行単位のコピーとペースト(貼り付け)をしたい
     4.11 1文字だけ書き直しをしたい
     4.12 1単語だけ書き直しをしたい
     4.13 N文字だけ書き直しをしたい
     4.14 直前操作の繰返しをしたい

  5. 少し進んだ使い方(2) -exモード- (3rd Step)
     5.1 別の名前で保存をしたい
     5.2 viを操作中に一時的にシェル操作をしたい
     5.3 文字列の検索をしたい
     5.4 文字列の置換をしたい

  6. 少し進んだ使い方(3) -マークを用いた編集作業- (4th Step)
     6.1 マークの付け方
     6.2 マークで領域指定しての削除
     6.3 マークで領域指定してコピー

  7. 初期化ファイル.exrcの書き方(5th Step)
  8. viによる日本語入力(6th Step)
     8.1 はじめに
     8.2 日本語対応viのための環境設定の方法
        8.2.1 bashを使っている場合
        8.2.2 csh,tcshを使っている場合
     8.3 日本語変換の方法
        8.3.1 日本語変換辞書サーバ(jserver)の起動
        8.3.2 .Xdefaultsの編集
        8.3.3 viを起動するターミナル
        8.3.4 kinput2の起動
        8.3.5 変換開始と終了
        8.3.6 変換操作とキーの割り当て

  9. 最後に
  10. 謝辞
  11. 追記(Mar. 20, 2001)

  ______________________________________________________________________

  1.  viとは?

  viとはLinuxはもちろん、多分すべてのUNIX系OS上で必ず使えるテキストエ
  ディタです。テキストエディタとは、ASCIIコードや日本語文字コード(EUC,
  JIS, SJIS) で書かれた文書ファイルの作成や編集をするためのソフトウェア
  です。 emacs/xemacs、Windowsのメモ帳(notepad)や秀丸エディタ等と機能的
  には同じものです。

  Windowsユーザーでメモ帳(notepad)を使ったことがない人は珍しくないと思い
  ます。ところが、Linuxを始めとするUNIX系のOSでは、ユーザーの文書やプロ
  グラムソースだけでなく、各種ドキュメントや非常に重要なシステム設定ファ
  イルに至るまで、多くのファイルがテキスト形式になっており、これらに変更
  を加えたり、新たに作成したりするためには、テキストエディタは必要不可欠
  なものなのです。

  viはこれまで、UNIX上の標準的エディタとして管理者用途から一般ユーザーの
  文書作成まで、広く利用されてきました。ところが諸々の経緯により通常のエ
  ディタとはちょっと変わった操作方法になっているがゆえに、これまで多く
  のLinux(UNIX)入門者を苦しめ、追い払って(?)きました。

       この辺の話は、やや古めのUNIXの入門書等にでているかも知れませ
       ん。興味のある方は調べてみて下さい。

  emacsがあればユーザーレベルのファイル編集のお仕事は事が足りますが、
  Linuxを管理する上で不可欠な、 rootでの各種設定ファイルの編集操作はviで
  行うのが一般的です。 Linuxは個人で使われることが多いでしょうから、ユー
  ザーがrootでもあることがほとんどだと思います。ですから、これからLinux
  を始めようという貴方が

  viを知ることに全く損はない

  と断言します。

  一般的なエディタではカーソルの移動や文字の削除の操作は、指をホームポシ
  ションから離さなくてはならないことが多いですが、 viはホームポジション
  に手をおいたままあらゆる編集操作が可能な点が特徴の一つです。

  emacsでもそうした設定になっているようですが、 [Ctrl]キーや[ESC]キー
  ([Alt]キー) とアルファベットキーを組み合わせたコマンド体系に私の指がつ
  いていかず、私の手にはいまだに馴染んでいません。ということで、私はプロ
  グラムコーディング・文書作成・編集作業・メール作成等の作業をすべて vi
  で行なっています。

       と言いながら、最近はxemacs+Mewでメールを読み書きすることが多
       いです。それ以外は当然viですが。

  2.  なぜviなのか?

  システム構成やそのときの状況によるので一概には言えないことですが、 vi
  の必要性について私なりに考えたことを以下に書きます。

  万が一、ハードディスクトラブルなどでLinuxがシステムダウンした際には、
  レスキューフロッピーやシングルユーザーモードでシステムを立ち上げて、設
  定ファイルの内容を書き換えたりしてシステム復旧を試みるわけですが、この
  ような場合emacsよりもviが動く可能性が高いです。

  それは、emacsはviよりもかなり大きなプログラムでディスク占有率も大きい
  ため、ディスククラッシュの際、emacsに関わるデータが破壊されている可能
  性が確率的に高くなり、結果的にコンパクトなviが生き残る可能性があるため
  です。

  レスキューフロッピーで立ち上げた場合などでも、 /binディレクトリが生き
  ていてこれがmountできればviは使えます。一方emacsは、/usr以下の諸々の
  ファイルが生きていないと動作に不都合を来たすと考えられます。

  また、viはコンパクトですから、レスキューフロッピーの中にviを仕込んで置
  くことも可能です。 emacsは当然フロッピー1枚に収まるサイズではありませ
  ん。

  そんなわけで、viも使えた方が何かと便利ですよ、とここでは薦めています。

       (余談1)
       Linuxの入門書等では、「ユーザーがrootでもあることがほとんど
       なので、 tcshよりbashを覚えた方が、起動スクリプト等の見通し
       が良くなるし、一つのシェルを覚えるだけでよいので、お勧めで
       す!!」という紹介がよくあります(私自身もtcshよりbashが便利な
       部分が多いとは思います)。ならば、エディタだってrootが必ず使
       う必要のあるviを勧めるのが筋では?  と少し思ったりします
       が"emacsは環境である"[22mという言葉もあるので、環境にはなり得な
       いviの肩身は狭いのかも知れません。それでも私はこれからもviを
       使い続けるでしょう (emacsも使えたらかっこいいだろうな、と思
       いつつ)。

  3.  これだけ覚えれば使えます(1st Step)

  3.1.  起動方法

  Xのkterm、xterm、rxvt等のターミナルウィンドウ、あるいはXの起動していな
  いコンソール上で次にようにして起動してみます。 viはLinuxのどのディスト
  リビューションにも必ず付属されるエディタですから、特別な環境設定なしで
  動きます。この例ではtest.txtという新しいテキストファイルを作成します。

      # vi test.txt

      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      ~
      "test.txt" [New File]

  こんな具合に画面が切り替わり、viが起動したはずです。

  次は何もせずに終了してみましょう。

  :q![ENTER]と入力します。

      # vi test.txt
      #

  となり終了しました。

  3.2.  すべての操作はコマンドで!!

  viではすべての操作をコマンドを入力することで行います。以下に基本的な操
  作方法(コマンド)を示します。

     文字列挿入系の操作
        カーソルの前に文字列を挿入 : i押し、文字列[ESC]

        カーソルの後に文字列を挿入 : a押し、文字列[ESC]

        カーソルの下に文字列を挿入 : o押し、文字列[ESC]

        カーソルの上に文字列を挿入 : O押し、文字列[ESC]

        なお、文字列の中には、改行とかスペース、タブも含まれます。また、
        文字列入力中の修正・削除は[BS]キーで可能です。文字列の入力が終
        り、別の編集作業に移る場合には、必ず[ESC]を押して下さい。文字列
        挿入系以外の編集操作が可能となります。

        最近のviは、デフォルトで文字列挿入状態になると画面(viのスクリー
        ン)の左下に [INS] とか -- INSERT -- といった 表示がされるようで
        すので、文字列挿入可能になったかどうかの判断は、これを目安にする
        とよいでしょう。 [ESC]を押すとこの表示は消えます。

     カーソル移動系の操作
        カーソルを一つ左()に移動 : h

        カーソルを一つ下()に移動 : j

        カーソルを一つ上()に移動 : k

        カーソルを一つ右()に移動 : l

        最近のviはいわゆるカーソルキーでもカーソル移動ができますが、これ
        ではviを使う意義も半減してしまいます。もしviを使い込んでみようと
        思い立ったら、このカーソル移動方法を身体に覚え込ませましょう。

        また、"less"というテキストファイル表示コマンドがありますが、この
        カーソル操作もほぼviと同じです(上下移動のみです)。

     削除系の操作
        カーソル位置の1文字を削除 : x

        カーソルのある行を削除 : dd

     保存終了
        ZZ

  3.3.  大切なモードのお話

  ところで、viには大きく分けて3つの動作モードがあります。

  o  文字を入力する "インサートモード"

  o  文字列の編集作業をする "コマンドモード"

  o  ターミナルの左下に:(コロン)あるいは/(スラッシュ)を出して作業をする
     "exモード"

     vi上の作業はこれらのモードを行ったり来たりしながら行ないますが、こ
     の切替を行なうのが[ESC]キーと文字列挿入系コマンドです。また、exモー
     ドにはコマンドモードで:あるいは/を入力すると切り替わります。切り替
     わると、ターミナルの左下に:あるいは/が表示され、コマンド待ち状態に
     なります。

  特に[ESC]キーは文字列入力を抜ける場合に使うだけでなく、今自分がviをど
  ちらのモードで使っているのかわからなくなってしまった場合や、打ち込んだ
  コマンドをキャンセルする場合に押すという重要な機能があります。 [ESC]
  キーを入力した場合のアクションは次のようになります。

     コマンドモードだったら...
        ビープ音がなってコマンドモードがリセット状態に戻ります。

     インサートモードだったら...
        音は鳴らずにコマンドモードに切り替わります。

     exモードだったなら
        ターミナルの下に表示されていた:が消えてコマンドモードに切り替わ
        ります。

  ですから、何か作業をする前に必ず[ESC]キーを押す癖をつけることで、意図
  しない妙な入力ミスや編集処理を回避できます。

  ということで、viを使う際の座右の銘(?)として、

       困ったとき、何かする前にはまず[22m[ESC]キー

  をあげておきます。これ以降コマンドの解説が出てきますが、実際に使ってみ
  る場合には、事前に[ESC]キーを忘れずに入力して下さい。

       xtermなどで-vb(visual bell)オプションを設定している場合は、
       ビープ音の代わりに画面がフラッシュします。

       (余談2)
       私事ですが、私はNEWS-OS(3.x)でUNIXを使い始めました。その頃
       のNEWS-OSには、エディタはviしかなかったので(emacsは当時のマ
       シンには非常に重いソフトだった)、半分仕方なしに、キーボード
       と格闘しながら覚えました。ところがしばらくすると、 vi以外の
       エディタはかったるくて使えなくなってしまいました。 MS-DOS上
       でもviクローンのjstevieを使っていたくらいです。一般的にUNIX
       のツールには、とっつきは悪いけど慣れると手放せなくなるものが
       多いです。文書組版ツールのLaTeX、グラフ作成ツールのgnuplot、
       作図ツールのtgif、テキスト処理ツールのawk/sed、そしてvi[22mが私
       にとってはそれにあたります。これらがないと、私の本業で頻繁に
       行うデータ整理やドキュメント作成はできません。

  これまでの説明の範囲で最低限のviの操作が可能ですが、本格的にviを操作す
  る上で知っていると便利な使い方、というか私が日頃viを使う上で欠かせない
  使い方を、次のセクションで御紹介します。実はもっといろいろな機能があ
  る(らしい)のですが、私の把握している範囲でよく使う機能、ということで御
  理解下さい。

  4.  少し進んだ使い方(1) -コマンドモード- (2nd Step)

  4.1.  作業の取消をしたい(アンドゥ)

  u

  4.2.  カーソルのある行の先頭/末尾にカーソルを移動したい

  カーソルを行の先頭に移動 : 0

  カーソルを行の末尾に移動 : $

  4.3.  現在ページの先頭行/末尾行にカーソルを移動したい

  先頭行 : H

  末尾行 : L

  4.4.  カーソル位置の上下ページにジャンプをしたい

  カーソル位置から1ページ下に移動 : [CTRL]+f

  カーソル位置から1ページ上に移動 : [CTRL]+b

  4.5.  カーソルのある行と次の行を連結したい

  J

  4.6.  N文字単位のカーソル移動をしたい

  右方向にN文字移動 : 数字Nを押し、l

  左方向にN文字移動 : 数字Nを押し、h

  4.7.  N行単位のカーソル移動をしたい

  上方向にN行移動 : 数字Nを押し、k

  下方向にN行移動 : 数字Nを押し、j

  4.8.  N文字単位のコピーとペースト(貼り付け)をしたい

  右方向にN文字 : 数字Nを押し、ylし希望カーソル位置でp

  左方向にN文字 : 数字Nを押し、yhし希望カーソル位置でp

  4.9.  カーソルのある1行のコピーとペースト(貼り付け)をしたい

  カーソルの下の行にコピー : Yを押し、希望カーソル位置でp

  カーソルの上の行にコピー : Yを押し、希望カーソル位置でP

  4.10.  N行単位のコピーとペースト(貼り付け)をしたい

  上方向のN行(1) : 数字Nを押してyk、次に希望カーソル位置でpを押すとカー
  ソルの下の行にコピー

  上方向のN行(2) : 数字Nを押してyk、次に希望カーソル位置でPを押すとカー
  ソルの上の行にコピー

  下方向のN行(1) : 数字Nを押してyj、次に希望カーソル位置でpを押すとカー
  ソルの下の行にコピー

  下方向のN行(2) : 数字Nを押してyj、次に希望カーソル位置でPを押すとカー
  ソルの上の行にコピー

  4.11.  1文字だけ書き直しをしたい

  書き直したい文字の上にカーソルを重ね、rを押して正しい文字を入力

  4.12.  1単語だけ書き直しをしたい

  書き直したい単語の先頭にカーソルを重ね、cw、次に正しい文字を入力

  4.13.  N文字だけ書き直しをしたい

  書き直したい単語の先頭にカーソルを重ね、数字Nを押してcl、次に正しい文
  字を入力

  4.14.  直前操作の繰返しをしたい

  .(ピリオド)を押す。同じ文字列を何回も挿入するような場合に便利で、私は
  個人的にこのコマンドが最も好きです。

  5.  少し進んだ使い方(2) -exモード- (3rd Step)

  5.1.  別の名前で保存をしたい

  :w NewFilename[ENTER]

  もし、NewFilenameが存在する場合には、 :w! NewFilename[ENTER]

  5.2.  viを操作中に一時的にシェル操作をしたい

  :sh[ENTER]で一時的にシェルに戻れます。再度viに戻るときはexitコマンドを
  使います。

  5.3.  文字列の検索をしたい

  /検索したい文字列[ENTER] でカーソルが所望の文字列に移動。

  nを押すとページ下方を検索、Nを押すとページ上方を検索。

  "/"(スラッシュ)、"\"(バックスラッシュ、円マーク)、"."(ピリオド)等の記
  号を含んだ文字列を検索する場合には、これらの記号の前に、 \(バックス
  ラッシュ)をつける必要があります。また、日本語対応のvi(jvim,jelvis)を
  使っている場合は、文字列に日本語を使えます。

  5.4.  文字列の置換をしたい

  :%s/置換前文字列/置換後文字列/[ENTER] でカーソル近辺の文字列を1つだけ
  置換。

  :%s/置換前文字列/置換後文字列/g[ENTER] で文書内の該当文字列をすべて置
  換。

  :B,Es/置換前文字列/置換後文字列/g[ENTER] で行番号B〜E内の該当文字列を
  すべて置換。

  日本語対応のvi(jvim,jelvis)を使っている場合は、文字列に日本語を使えま
  す。

  6.  少し進んだ使い方(3) -マークを用いた編集作業- (4th Step)

  MS-DOSやWindowsのテキストエディタでは、領域を指定してから削除やコピー
  を行なうことができますが、もちろんviでもできます。これもコマンドで行な
  います。 viのマークはマークをつけても文字が反転表示されたりしないの
  で、ちょっと色気がないかも知れませんが、やりたいことはできます。

  6.1.  マークの付け方

  1. マークを付けたい先頭位置にカーソルを移動する。

  2. mx(xはアルファベットなら何でもOK)

  3. マークを付けたい終了位置の次の位置にカーソルを移動する。

  4. `(バッククォート)xと入力すると、マークをつけた位置にカーソルが戻る(
     マーク位置の確認)。

  6.2.  マークで領域指定しての削除

  1. マークを付けたい先頭位置にカーソルを移動する。

  2. mx(xはアルファベットなら何でもOK)

  3. マークを付けたい終了位置の次の位置にカーソルを移動する。

  4. d`(バッククォート)xと入力すると、マークをつけた位置から現在カーソル
     位置の手前まで文字(行)が削除される。削除された文字(行)はバッファに
     入っているので、所望のところで貼り付け(pあるいはP)することはもちろ
     ん可能。

  6.3.  マークで領域指定してコピー

  1. マークを付けたい先頭位置にカーソルを移動する。

  2. mx(xはアルファベットなら何でもOK)

  3. マークを付けたい終了位置の次の位置にカーソルを移動する。

  4. y`(バッククォート)xと入力すると、マークをつけた位置から現在カーソル
     位置の手前までの文字(行)がバッファに入る。

  5. コピーしたい位置にカーソルを移動して、pあるいはP。

       (参考:jvim/vimの領域指定の方法)
       vimおよび日本語対応viのjvimでは、領域指定をMS-DOS/Windowsの
       エディタのように行なうこともできます。
       v(小文字)を押し、カーソルを移動させるとカーソルが移動した領
       域の文字が反転表示されて、マークをつけたのと同じになります。
       また、V(大文字)を押すと、カーソルのある行全体が反転表示さ
       れ、この状態でカーソルを上下に移動させると、行単位での領域指
       定が可能です。いずれの方法も所望の領域を反転表示させてから、
       dで削除、yでバッファにコピーが可能です。この方法の領域指定を
       解除する場合は、vあるいはVを押すか、 [ESC]キーを押してカーソ
       ルキーのいずれかを押すと、指定が解除されます。後者の場合は
       ビープ音がなるでしょう。

  7.  初期化ファイル .exrc の書き方(5th Step)

  次に、viの起動時に環境設定用として読み込まれる.exrcというファイルを紹
  介します。これは、次のようなviの動作環境を設定するためのファイルで、通
  常はユーザーのホームディレクトリに置かれます。

  o  タブ幅をカーソル何個分にするか(tabstop)

  o  行番号を表示するか(number)

  o  先頭にタブをつけた行で改行した場合、次行のカーソル位置をタブをつけ
     た位置にするかどうか(autoindent)

  o  文字列挿入モードの表示を行なうか(showmode)

  o  括弧を閉じた時に、これと対になる頭の括弧にカーソルを飛ばす
     か(showmatch)

  showmatchは、ネストが深いルーチンで括弧が確実に閉じられているかどうか
  を確認することができるので、通常の文書作成時よりもC言語等でプログラム
  を作成する際に便利です。

  次に私の使っている.exrcの例を示します。

  ______________________________________________________________________
      set tabstop=2
      set showmode
      set autoindent
      set nonumber
      set showmatch

  ______________________________________________________________________

  例えば、showmode、autoindentをOFFにしたい場合は次のようにします。要
  はno[22mをつければいいだけです。ただ、defaultでOFFの設定の場合は、そのエン
  トリを外せば良いです。

  ______________________________________________________________________
      set tabstop=2
      set noshowmode
      set noautoindent
      set nonumber
      set showmatch

  ______________________________________________________________________

  8.  viによる日本語入力(6th Step)

  8.1.  はじめに

  Kondara MNU/LinuxやVine Linuxといった最近の日本語対応ディストリビュー
  ションでは、 Wnn、Cannaを問わず、個人で特に設定することなくkinput2によ
  る日本語入力が可能になっています。ですので、以下の説明はやや時代遅れの
  内容となっていますが(2001/02/26現在)、参考のため、作成時の内容のまま載
  せます。

  こうした便利な環境の構築をしていただいたディストリビューション開発者の
  方々に感謝いたします。

  8.2.  日本語対応viのための環境設定の方法

  /bin/viは日本語に対応していない場合がありますので、日本語の文書を入力
  する場合は、マルチバイト対応vim、nvi、jvim、 jelvisといった日本語入力
  に対応したviクローンを使う必要があります。

  viによる日本語入力を常用する場合は、これらのコマンドを"vi"という名前で
  起動できるように、コマンド名の別名置換の設定をするのが便利です。

  以下はjvimが/usr/local/bin/にある場合の例です。

  8.2.1.  bashを使っている場合

  ホームディレクトリの.bashrcに設定を書き加えます。

        # cd
        # vi  .bashrc
         (以下の設定をファイルの後ろの方に追加して保存終了します)
        alias vi='/usr/local/bin/jvim'
        # source  .bashrc

  8.2.2.  csh,tcshを使っている場合

  ホームディレクトリの.cshrcに設定を書き加えます。

        % cd
        % vi .cshrc
         (以下の設定をファイルの後ろの方に追加して保存終了します)
        alias vi '/usr/local/bin/jvim'
        % source  .cshrc

  8.3.  日本語変換の方法

  emacsでは、cannaやWnnの日本語変換サーバと直接やりとりして日本語変換処
  理を行ないますが、 viでは私の知る範囲で5つの方法があります。

  o  kinput2を使う(canna,Wnn4/6)

  o  xwnmoを使う(Wnn4/6)

  o  vje-deltaを使う(vje-delta)

  o  uumを起動した端末上でvi(jvim)を起動する(Wnn4/6)

  o  jvimでonewを起動する(canna, Wnn4/6)

  最初の3つはX環境でしか使えませんが、後の2つはkonというコンソールを日本
  語化するソフトを動かせば、コンソール上でも使えるはずです。

  これらの方法それぞれについての解説は、 viの解説を趣旨とする本文書の範
  囲を越えてしまうのでここでは説明しません、と言いたいところですが、それ
  では困ってしまう方もいらっしゃいますので、ここでは、私が日頃使っている
  Wnn4.2(Wnn6)+kinput2 [22mによる日本語入力についてのみ簡単に解説します。

  8.3.1.  日本語変換辞書サーバ(jserver)の起動

  日本語変換処理をしてくれる辞書の機能を持つのがこれです。 Wnnの場
  合、jserverというプログラムがこれを担当しています。

  例えば以下のようにjserverのプロセスが表示されれば、 jserverは動いてい
  ます(これはWnn4.2のインストールしてある私のマシンの例です)。

       Wnn4.2は今は、FreeWnnという名前になっています。

    #ps ax | grep jserver
    140  ?  S    0:23 /usr/local/bin/Wnn4/jserver
    #

  上の例のようにjserverのプロセスが表示されなかった場合、まずは手動で起
  動しましょう。

    # which jserver                  (jserverの所在確認)
    /usr/local/bin/Wnn4/jserver
    # /usr/local/bin/Wnn4/jserver    (jserverの起動)
    # ps ax | grep jserver           (jserverの起動確認)
    12345 ?  S    0:23 /usr/local/bin/Wnn4/jserver
    #

  8.3.2.  .Xdefaults の編集

  次に、kinput2をX環境およびviで使うための設定を準備します。具体的には、
  各ユーザーのホームディレクトリにある.Xdefaultsに設定を追加します。この
  設定は.Xdefaultsの最後に追加した方が間違いがないと思います。この作業は
  もちろん(?)viで行なって下さい(笑)。

  以下に私の.Xdefaultsのリソース設定例を示します。特に重要なのは、VT100
  云々のところで、これがないとktermからkinput2を呼び出すことができません
  ので、 viでもkinput2が使えなくなってしまいます。

  ______________________________________________________________________
      !!
      !! setup for jserver and Wnn
      !!
      *CcWnn.jserver:  localhost
      *CcWnn.wnnEnvrc: /home/mkhatto/.Wnn4/wnnenvrc
      *CcWnn.ccdef:    /home/mkhatto/.Wnn4/myccdef
      !!
      !! setup for kinput2
      !!
      *VT100*translations: \
        #override Shift<Key>space: \
          begin-conversion(JAPANESE_CONVERSION)
      !!
      Kinput2.mappedWhenManaged: false
      Kinput2.width:  1
      Kinput2.height: 1
      Kinput2*ConversionStartKeys: Shift<Key>space
      Kinput2*OverTheSpotConversion.modeLocation: bottomleft
      !!
      *KinputProtocol.BackwardCompatible: true
      *KinputProtocol.XlcConversionStartKey:  Shift<Key>space
      !!
      !!

  ______________________________________________________________________

  8.3.3.  viを起動するターミナル

  X環境でviを使って日本語入力する場合、 viを起動するターミナルが日本語に
  対応していなければなりません。 Linuxの場合、ktermやrxvtがこれにあたり
  ます。xtermは日本語に対応していません。

  8.3.4.  kinput2の起動

  kterm等から、次のように入力して下さい。特に問題がなければ、寡黙に起動
  されます。

    # /usr/X11R6/bin/kinput2 -jserver localhost &
    #

  警告メッセージが出てkinput2がうまく起動されない場合の多くは、
  Wnn(jserver)の設定がうまくいっていない場合です。日本語環境に対応した
  ディストリビューションで、 Wnnを正常にインストールしてあれば、こうした
  問題はほとんど発生しないはずですが、もし問題が発生した場合は、 Wnn関係
  のパッケージを再インストールするとよいでしょう。

  8.3.5.  変換開始と終了

  先ほど説明した.Xdefaultsのリソース設定の中に実は起動の方法が書いてあり
  ます。

  ______________________________________________________________________
      !!
      !! setup for kinput2
      !!
      *VT100*translations: \
        #override Shift<Key>space: \
          begin-conversion(JAPANESE_CONVERSION)
      !!

  ______________________________________________________________________

  そうです、[SHIFT]+[SPACE]のキー操作で、 kinput2による変換開始を行なう
  ことができます。このキー設定を変えれば任意のキー操作により変換の開始を
  行なうことができます。

       この辺りのことは、『Linuxを256倍使うための本』(ASCII)に詳し
       く出ています。よろしかったら御一読下さい。

  8.3.6.  変換操作とキーの割り当て

  defaultのキー操作は、/usr/lib/X11/ccdef/rule.func に書かれています。以
  下にその内容を示します。

  ______________________________________________________________________

    # conversion function key bindings

    # function key bindings
    ""  '^J'    ""  convert
    ""  Kanji   ""  convert
    ""  '^C'    ""  convert-s
    ""  '^G'    ""  unconvert
    ""  '^F'    ""  forward
    ""  '^B'    ""  backward
    ""  '^N'    ""  next
    ""  mod1-n    ""  next-s
    ""  '^P'    ""  previous
    ""  mod1-p    ""  previous-s
    ""  Right   ""  forward
    ""  Left    ""  backward
    ""  Down    ""  next
    ""  Up    ""  previous
    ""  '^A'    ""  move-top
    ""  '^E'    ""  move-bottom
    ""  shift-Right ""  expand
    ""  shift-Left  ""  shrink
    ""  '^L'    ""  fix
    ""  '^U'    ""  clear
    ""  '^M'    ""  carriage-return
    ""  '^I'    "^I"  fix
    ""  '^H'    ""  backspace
    ""  Delete    ""  delete
    ""  F1    ""  to-katakana
    ""  mod1-1    ""  to-katakana
    ""  F2    ""  to-hiragana
    ""  mod1-2    ""  to-hiragana
    ""  F3    ""  to-hankaku
    ""  mod1-3    ""  to-hankaku
    ""  F4    ""  to-zenkaku
    ""  mod1-4    ""  to-zenkaku
    ""  shift-Escape  ""  symbol-input
    ""  @keypad   "&"
    ""  @printable  "&"

  ______________________________________________________________________

  この場合、 ^C([Ctrl]+C)で変換し、 ^L([Ctrl]+L)で決定するようになってい
  ます。これを変更したい場合は、次のようにします。

    # mkdir /home/hoge/Wnn4
    # cp /usr/lib/X11/ccdef/ccdef Wnn4
    # cp /usr/lib/X11/ccdef/rule.func Wnn4
    # cd Wnn4
    # chmod u+w ccdef
    # chmod u+w rule.func
    # vi ccdef
      (ccdefを変更)

     .....................

      ### もしあなたがたまごのキーバインディングに慣れているならば
      ### 'rule.func' の代わりに 'rule.eggfunc' をインクルードして下さい
      #   include 'rule.func'
          include '/home/hoge/Wnn4/rule.func'

     .....................

    # vi rule.func
      (rule.funcをお好みのキー設定に変更)

    # kinput2 -jserver localhost -ccdef /home/hoge/Wnn4/ccdef &
      (自分の設定でkinput2を起動する)

  これで、自分の設定したキー設定でkinput2を起動することができます。

  9.  最後に

  viは実はまだまだここで紹介できない機能を持っていますが、何分私自身がこ
  の程度の範囲でしか使っていないものですから、この程度の紹介しかできませ
  ん。ですが、このくらい使えれば、仕事でも趣味でもそれなりに使えると思い
  ます。

  見た目は地味で寡黙でも、実は高性能のエディタであるviをあなたも使ってみ
  ませんか。キー操作に慣れた頃には、きっと私みたいにはまっていること請け
  合いです。

  この文書に関する御意見、御要望は、 [4mmkhatto@gmail.com[24m までお願いいたし
  ます。なおこの文書は配布自由ですが無保証です。

  10.  謝辞

  この文書をまとめるにあたりまして、会津大学の木村さんからコマンド周りの
  説明のコンセプトについて、貴重なアドバイスをいただきました。ま
  たLTGP-MLに御参加の皆様から、貴重な御意見・御要望をいただきました。こ
  こで紹介いたします(順不同)。もし、抜けがあったらごめんなさい。

  柴田さん
  今井さん
  松浦さん
  池田＠東北大 さん
  しん＠未来ネット さん
  西本＠早大理工情報 さん
  小野＠京大環境地球 さん
  Tetsuichi Hosokawa さん

  また、この文書をJFで公開して頂くにあたりまして、 JF-MLにご参加の皆様に
  も御意見をいただききました。ありがとうございました。

  この場をお借りしまして、お礼を述べさせていただきます。ありがとうござい
  ました。

  11.  追記(Mar. 20, 2001)

  最近のディストリビューションでは、viの実体が多様化しているようです。特
  に、libcのglibc-2.x系への移行に伴って、日本語が通らないものがパッケー
  ジ化されているようです。

       実際にはすべてのディストリビューションの調査はできませんの
       で、一部推測も入っています。ご了承下さい。

  o  VineLinuxのviはnviですが、日本語編集が時々おかしくなります (2000
     年12月現在では直っています)。

  o  RedHat-6.xにはvimが入っていますが、これも日本語がまともに扱えません
     (Alpha版での確認。多分、RedHat-6.x/7Jでは対応しているのではないかと
     思います)。

  o  Kondara MNU/Linuxのviはマルチバイト対応のvimであり日本語編集(EUCの
     み)が可能です。

  o  いずれのパッケージでも、 /bin/viは日本語が通らず、 /usr/bin/vi(実体
     はvimやnvi)は日本語が通るパターンが多そう。

  ユーザー環境での日本語入力を伴う文書編集作業はemacs系のエディタ、日本
  語編集の不要な管理者作業用のエディタはvi、というような棲み分けが暗黙に
  行われているのかも知れません。

  なお、Debianのviに関しては、JF-MLで佐野さんから以下のような情報をいた
  だきましたので、ここでご紹介します。佐野さんありがとうございました。

  ______________________________________________________________________
  ______________________________________________________________________

  Debian の場合、alternatives という仕組があって、複数の候補の中からシス
  テム管理者が「標準の vi」を選択できます。

  ただし、/bin/vi はありません。

  「軽いエディタ」としては /bin/ae という vi 風にも emacs 風にもなるとい
  うフルスクリーンエディタが用意されています。

  vi は /usr/bin/vi として用意されていて、実態はシステム管理者の設定次第
  で vim/nvi/elvis/jvim/nvi-m17n などのどれにでもできます。

  最小インストールだと m17n でない nvi がインストールされますが、 task-
  japanese をインストールすれば jvim-canna と nvi-m17n-canna がインス
  トールされるので、たぶんこの状態なら nvi-m17n-canna が標準の vi になっ
  ているだろうと思います。

  ______________________________________________________________________
  ______________________________________________________________________

  今現在の私の環境はKondara MNU/Linuxですので、標準vimでも日本語は使える
  ことは使えますが、それでもjvimを自分でmakeして使っています。その理由
  はjvimでは、

  1. helpが日本語化されていること

  2. JISコード文書の編集も可能なこと

  3. 日本語入力についてはトラブルが皆無であること

     等のメリットがあるからです (Kondaraのvimでは改行なしで行をまたいだ
     日本語入力を行うと表示が壊れてしまい、 [Ctrl]+rで再表示する必要があ
     るという既知のバグがあります)。

       jvimは完全に日本語ローカライズされたプログラムなので、
       Kondaraの目指すシングルバイナリでの国際化とは思想が異なりま
       す。よって、jvimがKondaraにそのまま入ることはないでしょう。

