vim-jp / vimdoc-ja / vi_diff

vi_diff - Vim日本語ドキュメント

メインヘルプファイルに戻る English | 日本語
vi_diff.txt   For Vim バージョン 8.0.  Last change: 2016 Aug 16


                  VIMリファレンスマニュアル       by Bram Moolenaar


Vim と Vi の違い                                        vi-differences

ヘルプファイルを通して Vim と Vi/Exの違いは波括弧の中で "{Vi にはない}" のよう
に示されています。このファイルは他のファイルで触れられていない部分のみを列挙し
ます。それと違いの概略を説明します。

Vim は大体において POSIX 1003.2-1 に従っています。知られている唯一の足りないコ
マンドは ":open" コマンドです。細かな違いはたぶんたくさんあります(Vimが間違っ
ているか、Posixの指標がはずれているかのどちらか)。

1. シミュレートされているコマンド       simulated-command
2. なくなっているオプション             missing-options
3. 制限                                 limits
4. もっとも興味深い機能追加             vim-additions
5. Vim の他の特徴                       other-features
6. コマンドライン引数                   cmdline-arguments
7. POSIX 準拠                           posix-compliance

==============================================================================
1. シミュレートされているコマンド                       simulated-command

このコマンドは Vi にはありますが Vim ではシミュレートしているだけです。

                                                        :o :op :open
:[range]o[pen]                  :visualと同様。Exモードを終了します。
                                {Vi: オープンモードで編集を開始する}

:[range]o[pen] /pattern/        上と同様で、さらに現在行の中で "pattern" に
                                マッチする桁へカーソルを移動します。

Vimにオープンモードはありません。まったく便利ではないからです。Viなら ":open"
でオープンモードを開始しますが、VimではExモードを抜けます。その結果、Viの場合
と同じコマンドが実行できるようになります。ただ、1行だけを再描画するのでなく、
画面全体を再描画する点が違います。
==============================================================================
2. なくなっているオプション                             missing-options

これらのオプションは Vi にはあって、Vim にはないものです。これらのオプションを
セットしてもエラーメッセージは出ませんが、設定した値は使われませんし表示もされ
ません。 

autoprint (ap)          二者択一  (初期値 オン)         'autoprint' 'ap'
beautify (bf)           二者択一  (初期値 オフ)         'beautify' 'bf'
flash (fl)              二者択一  (初期値 ??)           'flash' 'fl'
graphic (gr)            二者択一  (初期値 オフ)         'graphic' 'gr'
hardtabs (ht)           数値      (初期値 8)            'hardtabs' 'ht'
        ディスプレイ上で一つの <Tab> が移動するスペースの数
mesg                    二者択一  (初期値 オン)         'mesg'
novice                  二者択一  (初期値 オフ)         'novice'
open                    二者択一  (初期値 オン)         'open'
optimize (op)           二者択一  (初期値 オフ)         'optimize' 'op'
redraw                  二者択一  (初期値 オフ)         'redraw'
slowopen (slow)         二者択一  (初期値 オフ)         'slowopen' 'slow'
sourceany               二者択一  (初期値 オフ)         'sourceany'
w300                    数値      (初期値 23)           'w300'
w1200                   数値      (初期値 23)           'w1200'
w9600                   数値      (初期値 23)           'w9600'

==============================================================================
3. 制限                                                 limits

Vim で編集できるファイルの制限はかなり少ないです。 {Vi: <Nul>文字を扱えず、ま
た 128をこえる文字を扱えません。行の長さにも制限がありますし、他にも多くの制限
があります。}

                                                        E340
行の最大の長さ             16ビット int を使っているマシン(Amiga と MS-DOS の
                           リアルモード)は 32767 文字、それ以外は 2147483647
                           文字。それより長い行は分割されます。
最大行数                   2147483647 行
最大のファイルのサイズ     long integer が32ビットである場合2147483647バイト(2
                           ギガバイト)です。64ビットの長さであればもっと多くな
                           ります。またスワップファイルswap-fileの為のディス
                           クの空き容量にも制限されます。
                                                        E75
ファイルのパスの長さ       Unix と Win32: 1024 文字、それ以外は 256 文字
                           (もしくはシステムがサポートしている長さ分だけ)
展開されたオプションの文字列の長さ
                           Unix と Win32: 1024 文字、それ以外は 256 文字
表示される最大の長さ       Unix と Win32: 1024 文字、それ以外は 255 文字
マッピングでの lhs の最大の長さ
                           50 文字
異なるハイライトの種類の数: 30000以上
数値変数の範囲:            -2147483648 から 2147483647 (64ビットシステムでは
                           もっと大きい場合があります)
タグファイルにおける一行の最大の長さ: 512 バイト

アンドゥとレジスタの中のテキストに関する情報はメモリに保持されます。ですので、
使用可能な(仮想)メモリの量を超えて(大きな)変更を行っている場合はアンドゥレベル
の数とレジスタに保持されうるテキストは制限されることになります。コマンドライン
履歴やクイックフィックスモードでのエラーメッセージなどの他のものもまたメモリに
保持されます。

メモリの使い方を制限する
--------------------------

'maxmem' ('mm') オプションは一つのバッファに使われるメモリの最大の量 (キロバイ
トで) を決めるのに使います。'maxmemtot' はすべてのバッファで使われるメモリの最
大の量(キロバイトで)を決めるのに使います。Amiga と MS-DOS では 'maxmemtot' は
使えるメモリの量に依存して設定されます。
これらは厳格な制限ではなく、いつテキストをスワップファイルに移動するかの目安で
す。もし Vim がファイルにスワップを行うのが嫌であれば 'maxmem' と 'maxmemtot'
の値をかなり大きい値に設定しておきます。そうするとスワップファイルはリカバリー
の時にのみ使われるようになります。もしどんなスワップファイルも欲しくなければ
'updatecount' を 0 に設定するか、Vim を起動するときに "-n" 引数をつけます。

==============================================================================
4. もっとも興味深い機能追加                             vim-additions

Vi との互換性                                           'compatible'
        Vim には Vi の99%の機能が含まれますが、Vi のうちのいくつかはバグか少な
        くとも改良が必要だと考えられるものがあります。しかしそれでもなお Vim
        は可能な限り「本当の」 Vi のように振る舞うモードで起動します。Vim にも
        う少しよい動作をして欲しい場合は 'compatible' オプションを解除してみて
        ください。
                :set nocompatible
        それか Vim を "-N" 引数つきで起動してください:
                vim -N
        もし .vimrc ファイルがあれば 'nocompatible' つきでVimが起動します。
        startup も見てください。'cpoptions' オプションはたくさんの特定のアイ
        テムに関する Viと同一の動作をするかどうかのオン/オフを切り替えることが
        できます。

様々なシステムのサポート
        Vim は次のシステムで利用できます:
        - すべての Unix システム (テストされたすべてのシステムで動作しますが
          GUI と Perl インターフェイスはどこでも動作するわけではないかもしれま
          せん)。
        - Amiga (500, 1000, 1200, 2000, 3000, 4000, ...).
        - リアルモードの MS-DOS (他のドライバは必要ありません)
        - プロテクトモードの Windows 3.1 と MS-DOS (DPMI ドライバが必要です)
        - Windows 95 と Windows NT、ロングファイル名をサポート
        - OS/2 (emx.dll が必要です)
        - Atari MiNT
        - VMS
        - BeOS
        - Macintosh
        - Risc OS
        - IBM OS/390
        Note: いくつかのシステムではリソース使用量を削減するために機能を無効に
        する必要があります(特にMS-DOS)。いくつかの時代後れのシステムでは以前の
        バージョンのVimを使わねばなりません。

多段永続化アンドゥ                                              undo
        'u' は時をさかのぼり、'CTRL-R' は再び進めます。変更を覚えておく回数を 
        'undolevels' オプションでセットしてください(初期値 1000)。'undolevels'
        を0にセットすると Vi 互換のアンドゥになります。-1 にセットするとアン
        ドゥできないようになります。
        あるバッファに対する変更をすべてアンドゥした場合は、バッファは何も変更
        されていないと見なされます。つまり <!> なしで :q で終了させることがで
        きます。
        変更をアンドゥしてその後新しい変更をすると、Vimのアンドゥツリーにブラ
        ンチが作られます。これにより、テキストを永遠に失うという危険性なしにテ
        キストをどの状態にでも戻すことができます。undo-tree
        'undofile' オプションがセットされた場合には、アンドゥ情報がファイルに
        保存されます。これはつまり、Vimを一旦終了し再起動して同じファイルの編
        集をすれば、再起動前に行っていた変更もアンドゥできる、ということです。

グラフィカルユーザーインターフェイス(GUI)               gui
        GUI (メニュー、マウス、スクロールバー、などなど)のサポートが含められま
        した。独自のメニューを定義することもできます。CTRL/SHIFT/ALT とキーの
        組み合わではなく特殊なキーとマウスの組み合わせというよりよい方法がサ
        ポートされます。さまざまなプラットフォーム、X11 (Motif と Athena イン
        ターフェイス)、Win32 (Windows95 か、より最新のもの), BeOS, Amiga,
        Macintoshでサポートされています。

複数のウィンドウとバッファ                              windows.txt
        Vim ではスクリーンをいくつかのウィンドウに分けてそれぞれの中で異なる
        バッファを編集したり同じバッファを別の場所で編集したりできます。バッ
        ファはウィンドウに表示されていなくともロードして(変更を加えて)おくこと
        もできます。これは隠れたバッファと呼ばれます。この機能のために多くのコ
        マンドやオプションが追加されています。
        Vimはタブページを使うこともできます。各タブページは1個以上のウィンドウ
        を含みます。タブラベルを表示する行を使ってこれらのタブを素早く切替える
        ことができます。tab-page

構文ハイライト                                          :syntax
        Vim ではキーワードやパターンやその他のものをハイライトすることができま
        す。これは ":syntax" コマンドで定義し、ほとんどの言語やファイルのタイ
        プに対してハイライトをつけることができます。C、C++、Java、Pascal、
        Makefiles、シェルスクリプト、などなどの多くの一般的な言語のうちのほと
        んどのためのハイライト定義ファイルはすでに含まれています。ハイライトに
        使われる色は普通の端末で定義することができ、色端末と GUI では
        :highlight コマンドで定義できます。色を変更するのに便利な方法は
        :colorschemeコマンドを使うことです。
        ハイライトされたテキストをHTMLにエクスポートすることができます
        convert-to-HTML。ハイライトできる他の要素は、検索文字列のマッチ部分
        'hlsearch'、対応する括弧 matchparen、カーソル行とカーソル桁
        'cursorline' 'cursorcolumn'です。

スペルチェック                                          spell
        オプション 'spell' がセットされていると、スペリングの間違いがハイライ
        トされます。現在のところ約50の言語がサポートされています。言語はオプ
        ション 'spelllang' で選択できます。ソースコード中ではコメントと文字列
        だけがスペルチェックされます。

折畳み                                                  folding
        複数行の範囲を一行の「折畳まれた」行として表示することができます。これ
        によりファイルを一望することができ、テキストブロック間を素早く移動する
        ことが可能になります。折畳みの設定は手動、ファイルのシンタックス、イン
        デント等々で設定することができます。

差分モード                                              diff
        ファイルの2つのバージョンの差分をハイライトして表示することができます。
        テキストの一致する部分は折り畳みされます。コマンドを使って片方のバー
        ジョンのテキストをもう一方へ移動することができます。

プラグイン                                              add-plugin
        プラグインファイルを正しいディレクトリにただ置くだけで機能追加ができま
        す。これは他人が書いた Vim script を使い始める簡単な方法です。プラグイ
        ンは全ての種類のファイルについて設定することもできますし、ある1つのファ
        イルタイプについて設定することも可能です。
        パッケージ機能はこれをさらに簡単にします。 packages

非同期通信とタイマー                                    channel job timer
        Vim はバックグラウンドで他のプロセスとメッセージを交換できます。これに
        より、何か仕事をさせ結果を Vim に送り返すようなサーバーを実現可能にし
        ます。 channel
        Vim はジョブを開始させ、それと通信し、停止させられます。 job
        タイマーは、何かしらの仕事をする関数を、一定時間経過後に1回だけ、もし
        くは繰り返し実行することができます。 timer

一連のコマンドを繰り返す                                q
        "q{c}" で名前付きレジスタ{c}にタイプする文字の記録を始めます。後に続く
        "q" は記録を終了します。そしてレジスタにあるコマンドは "@{c}" コマンド
        で実行することができます。これは複雑な動作を繰り返すときに非常に便利で
        す。

柔軟な挿入モード                                        ins-special-special
        ファイルを動き回るのに矢印キーを挿入モードで使うことができます。このこ
        とはアンドゥとリドゥを考えると挿入モードが二つに分かれることになりま
        す。

        CTRL-O は一つのノーマルモードのコマンドを実行するのに使うことができま
        す。これはつまり <Esc> キーを打ってコマンドを打ってからそれから a を
        打ったのとほとんど同じことです。

ビジュアルモード                                        Visual-mode
        ビジュアルモードは、初めにいくつかのテキストを選択してからそれに対して
        コマンドを実行するのに使うことができます。これは初めにオペレータコマン
        ドを与えてからそのオペレータを施すテキストの最後まで移動するコマンドを
        実行するもう一つの(簡単な)方法です。
        v と V はビジュアルモードを開始します。v は文字ごとに選択し V
        は行ごとに選択します。カーソルを動かしてビジュアル部分を広げ、その部分
        はスクリーン上でハイライトされます。"o" を打つことでビジュアルなテキス
        ト部分の反対側の端が動かされることになります。ビジュアルなテキスト部分
        には次のオペレータを施すことができます:
                d       削除
                c       変更
                y       ヤンク
                > or <  インデントを挿入/削除
                !       外部プログラムを使ってフィルターを施す
                =       インデントを通してフィルターを施す
                :       ビジュアルな行に対して : コマンドを始める
                gq      'textwidth' 桁位置にテキストを整形する
                J       行を連結する
                ~       大文字小文字を入れ換える
                u       小文字にする
                U       大文字にする

ブロックオペレータ                                      visual-block
        長方形のテキストがビジュアルモードを使って選択することができます。
        CTRL-V でビジュアルモードを開始します。選択されたブロックは "d" で削除
        したり 'y' でヤンクしたり大文字小文字を "~"、"u"、"U" で変えることがで
        きます。削除もしくはヤンクされたブロックは "p" か "P" コマンドでテキス
        トに挿入することができます。

ヘルプシステム                                          :help
        ヘルプはウィンドウの中に表示されます。検索したりするテキストの中を移動
        する普通のコマンドはそのまま使えます。タグも複数のヘルプファイルの間を
        移動するのに使え、ハイパーテキストのリンクをクリックするような感覚で
        す。:help コマンドは引数を取りますので検索したい情報に素早くジャンプ
        できます。<F1> を押して素早くヘルプシステムにアクセスすることもできま
        す。ヘルプファイルのインデックスファイルは 'helpfile' オプションで設定
        することができます。

コマンドライン編集/履歴                                 cmdline-editing
        カーソルキーを使うことでコマンドラインのどの場所からでも挿入を行ったり
        削除を行ったりすることができます。右/左矢印キーは前/後に一つの文字移動
        するのに使うことができ、Shift キーを押しながら右/左矢印キーを押すと前/
        後に一つの単語移動することができます。CTRL-B/CTRL-E はコマンドラインの
        初め/終わりに移動するのに使うことができます。
                                                        cmdline-history
        コマンドラインは記録されます。上/下矢印キーを使うことで前のコマンドラ
        インを呼び出すことができます。'history' オプションで覚えておく行数を設
        定することができます。検索パターンのコマンド履歴はまた別に分かれていま
        す。

コマンドライン補完                                      cmdline-completion
        コマンドライン(スクリーンの一番下で)でなんらかの作業をしているときに 
        <Tab> キーを押すと補完を行うことができます。
           what          example        
        - コマンド       :e<Tab>
        - タグ           :ta scr<Tab>
        - オプション     :set sc<Tab>
        - オプションの値 :set hf=<Tab>
        - ファイル名     :e ve<Tab>
        - その他

        複数マッチしたものがある場合は、CTRL-N (次)と CTRL-P (前)でマッチした
        ものの間を移動することができます。<Tab> は CTRL-N のように振る舞います
        が、マッチしたものの最後で押すと最初にマッチしたものに戻ります。

        'wildchar' オプションでコマンドライン補完に利用する文字を設定できま
        す。デフォルトは<Tab>です。複数の補完候補がある不完全な状態でCTRL-D
        タイプすることで、全ての補完候補を表示することができます。CTRL-Aではす
        べての候補を入力することができます。CTRL-Lでは候補内で、一致する最長部
        分までを入力します。

挿入モードでの補完                                      ins-completion
        挿入モードで CTRL-N と CTRL-P を使うことでどこかに現れる単語を補完する
        ことができます。        i_CTRL-N
        CTRL-X を使うことでもう一つのモードに入ることができます。どの補完を行
        うことができるかというと:
        i_CTRL-X_CTRL-F       ファイル名
        i_CTRL-X_CTRL-K       辞書 'dictionary' ファイルにある単語
        i_CTRL-X_CTRL-T       類語辞典 'thesaurus' ファイルにある単語
        i_CTRL-X_CTRL-I       インクルードされるファイルにある単語
        i_CTRL-X_CTRL-L       すべての行
        i_CTRL-X_CTRL-]       タグファイルにある単語
        i_CTRL-X_CTRL-D       マクロ定義
        i_CTRL-X_CTRL-O       オムニ補完: ファイルタイプなどに特化した
                                賢い補完

長い行のサポート                                        'wrap' 'linebreak'
        'wrap' オプションがオフであれば、長い行は折り返されずに行の一部分だけが
        表示されます。カーソルが表示されていない部分に移動するとスクリーンも横
        にスクロールします。横にスクロールする桁数の最小の値を 'sidescroll' オ
        プションで設定することができます。zh と zl コマンドは横スクロールに
        使うことができます。あるいは、'linebreak' オプションがセットされている
        場合は長い行は単語の間で切られます。こうすることで段落を一つの行にして
        編集することが容易になります(例: 後で編集中のテキストを DTP プログラム
        に持っていく場合)。カーソルを上下するには gk と gj コマンドを使って
        ください。

テキストの整形                                          formatting
        'textwidth' オプションを設定することで行の長さを自動的に制限することが
        できます。このオプションはあまり便利ではなかった Vi での 'wrapmargin'
        オプションを補助するものです。gq オペレータはテキストの一部分を整形
        するのに使うことができます(例えば、gqap は現在の段落を整形します)。
        テキストの位置に関するコマンドは :center:left:right です。

拡張正規表現                                            pattern
        様々なテキスト要素にマッチさせるための、多くの拡張正規表現の要素があり
        ます。たとえば "\n" は改行にマッチします。
        "x\{2,4}" は、"x" が2個から4個続くテキストにマッチします。
        "\s" は空白文字にマッチします。

ディレクトリ、リモート、アーカイブの閲覧                netrw
        Vimはファイルシステムをブラウズすることができます。単にディレクトリを
        編集します{訳注: :e {directory} とする}。そのリスト中を普通のコマンド
        を使って移動し、<Enter>を押すとカーソル下のディレクトリやファイルに移
        ります。
        これはftp, http, sshなど越しのリモートファイルにも機能します。
        zipとtarのアーカイブもブラウズすることができます。tar zip

編集-コンパイル-編集 をスピードアップする               quickfix
        :make コマンドを使うことでコンパイルしてから初めのエラーにジャンプす
        ることができます。コンパイラのエラーメッセージが書かれたファイルを解析
        できます。最初のエラーにジャンプします。

        エラーファイルのそれぞれの行はファイルの名前、行番号、エラーメッセージ
        という風に調べられます。'errorformat' オプションは多くのコンパイラから
        の出力を扱うことができるように scanf のような形式の文字列のリストを指
        定することができます。

        :cn コマンドは次のエラーにジャンプするのに使うことができます。:cl
        コマンドはすべてのエラーメッセージをリストします。他のコマンドも使うこ
        とができます。'makeef' オプションはエラーメッセージが含まれるファイル
        の名前を指定します。'makeprg' オプションは :make コマンドで実行する
        プログラムの名前を指定します。'shellpipe' オプションはコンパイラからの
        出力をエラーファイルに書き込むときに使われる文字列を指定します。

複数のファイルから検索する                              :vimgrep
        複数のファイルからパターンを検索することができます。この機能はVimの高
        度な正規表現パターンを使い、すべてのシステム上で機能し、圧縮されたファ
        イルも検索できます。

C プログラムのインデントを改善                          'cindent'
        'cindent' オプションがオンの時はそれぞれのインデントは自動的に調整され
        ます。C の文法はだいたい解釈されますし、さまざまなスタイルでのインデン
        トは 'cinoptions' で設定することができます。インデントをするきっかけと
        なるキーワードは 'cinkeys' で指定することができます。

        コメントも自動的に整形することができ、'comments' オプションでどの文字
        がコメントをスタートさせ終了させるのかを指定することができます。この機
        能は C のコードでもっともよく動作しますがメール(行の最初の ">")や他の
        タイプのテキストでもうまく動作します。= オペレータで行を再インデント
        することもできます。

        他にも多くの言語に対して自動インデントをするためのインデントプラグイン
        が提供されています。30.3

インクルードされるファイルの中から単語を探す            include-search
        [i コマンドはカーソルの下の単語をインクルードされるファイルの中から
        検索することができます。'include' オプションをセットすることでファイル
        をインクルードするコマンドのパターンを記述することができます(デフォル
        トでは C のプログラムで検索できるように設定してあります)。
        [I コマンドはマッチしたすべてをリストし、[_CTRL-I コマンドはマッチ
        した場所にジャンプするコマンドです。
        [d[D[_CTRL-D も同様ですが、'define' オプションで指定されるパ
        ターンにマッチする行にのみします

自動コマンド                                            autocommand
        ファイルを読み込んだり書き込んだり別のバッファにジャンプしたりなどする
        時に、ファイル名によって自動的にコマンドを実行することができます。これ
        は C のプログラムを書いたり、ドキュメントを書いたり、普通のテキストを
        書いたりなどする時にオプションをセットしたりそれら特有のマッピングをし
        たりするときに便利です。これを利用することで圧縮されたファイルを編集す
        ることもできるようになります。

コマンドと表現                                          expression
        強力なスクリプト言語を形成するようにいくつかコマンドが追加されました。
        :if           条件によって実行します。例えば $TERM の値によってオプ
                        ションを変更したりできます。
        :while        コマンドを繰り返します。
        :for          リストをわたるループ。
        :echo         式の結果を表示します
        :let          値を内部変数やオプションなどに割り当てます。
                        変数の型は数値、文字列、リスト、辞書。
        :execute      式からなるコマンドを実行します。
        :try          例外を捕捉します。
        などなど。evalを参照。
        デバッグとプロファイリングがサポートされています。debug-scripts
        profile
        もしこれで十分でないなら、PythonRubyTclLuaPerl,
        MzScheme のインターフェイスが提供されています。

Viminfo                                                 viminfo-file
        コマンドライン履歴やマークやレジスタの内容を起動時に読み込まれるファイ
        ルに保存しておくことができます。Vim を終了させた後、再び Vim を起動し
        たときでも検索コマンドを繰り返したりコマンドラインを繰り返したりできま
        す。'0 を使って最後に編集していた場所にジャンプすることもまた可能で
        す。'viminfo' オプションで .viminfo ファイルに保存されるアイテムを選択
        することができます。初期値はオフです。

印刷                                                    printing
        コマンド:hardcopyはテキストをプリンタに送信します。構文強調も含まれ
        ます。

マウスサポート                                          mouse-using
        マウスは GUI バージョンと Unix、sysmouse がある BSD、gpm がある Linux、
        MS-DOS、Win32 上の xterm でサポートされています。カーソルの場所を変え
        たりビジュアル領域を選択したりレジスタの内容を貼り付けたりするのに使う
        ことができます。

キーの名前の使い方                                      <> key-notation
        特殊なキーはすべて <Up><End> などなどのような書き方ができるようにな
        りました。この名前はマッピングでも使うことができますしそれらを編集する
        のが容易になります。

バイナリファイルを編集する                              edit-binary
        Vim はバイナリファイルを編集することができます。実行形式のファイルを
        壊すことなくいくつかの文字を変更することができます。Vim は NUL 文字を
        削除しません(内部では <NL> と表されています)。
        -b            バイナリファイルの編集を始める時のコマンドライン引数
        'binary'      -b によってセットされるオプションで、ファイルの最後の
                        行に <EOL> を付加するのをやめさせます

多言語のサポート                                        multi-lang
        ダブルバイトやマルチバイトエンコーディングのファイルを編集できます。
        フォントを切り替えずに多言語を同時に編集可能なUTF-8をサポートしていま
        す。 UTF-8
        メッセージやメニューが多くの言語に翻訳されています。

行を越えるカーソル移動
        オプション 'virtualedit' がセットされていると、テキストがない場所を含
        め、画面全体どこでもカーソルを移動させることができます。これは表や図を
        容易に編集できて便利です。

==============================================================================
5. その他の Vim の機能                                  other-features

その他の優れた機能をランダムに集めてみました。


Vim が "-s scriptfile" 付きで起動された場合、"scriptfile" から読み込まれる文字
は実際あなたがそれをタイプしたように扱われます。もしエディタが終了する前にスク
リプトファイルの終わりに到達した場合は、さらにコンソールから文字を読み込みま
す。

"-w" オプションはタイプした文字をすべてスクリプトファイルに記録するのに使うこ
とができます。このファイルは後で別のファイルでその編集を繰り返したり、スクリプ
トファイルに修正を加えてから繰り返しを実行したりするのに使うことができます。

"-o" オプションはそれに続く引数の数だけウィンドウを開きます。"-o4" は4つのウィ
ンドウを開きます。

Viはフルスクリーンで動作するためにいくつかのtermcapのエントリが必要でした。Vim
が必要とするのは "cm" エントリ(cursor motion)だけです。


コマンドモードで:

'showcmd' オプションがセットされていると、スクリーンの最後の行にコマンドの文字
列が表示されます。これらはコマンドが終了した後に削除されます。

'ruler' オプションがセットされているとスクリーンの最後の行に現在のカーソルの位
置が表示されます。

"U" は最後に変更した行から離れた後でも、また "u" を実行した後でも動作します。

8bit 目がセットされている文字は表示されます。その文字が 'isprint' オプションに
含まれていなければ、'~' と 0xa0 の間の文字は "~?"、"~@"、"~A"、などなどのよう
に表示されます。

"][" は C の関数の次の終わりに移動します(一桁目が '}' の行)。
"[]" は C の関数の前の終わりに移動します(一桁目が '}' の行)。

"]f"、"[f" と "gf" はカーソルの下のファイル名の編集を開始します。CTRL-W f は
カーソルの下のファイル名の編集をウィンドウを分割してそこで開始します。

"*" はカーソルの下の識別子を前方に検索し、"#" は後方に検索します。
"K" はカーソルの下の識別子を引数として 'keywordprg' オプションに定義されている
プログラムを呼び出します。

'%' は前に数を前置することでそのファイルのパーセント数の場所にジャンプします。
数を前置しない場合はくくられているテキストの中では対応する括弧に移動します。

CTRL-] コマンドでは、カーソルは識別子の真ん中にあります。

使ったタグは覚えておかれます。タグスタックと共に使用されるコマンドは CTRL-T と
":pop" と ":tag" です。":tags" はタグスタックの内容をリスト表示します。

'tags' オプションはタグファイル名のリストを設定することができます。ですので複
数のタグファイルを使うことができます。ファイル名が '.' で始まる場合は '.' はそ
のファイルのパスに展開されます。こうすることで編集しているファイルがあるディレ
クトリと同じディレクトリのタグファイルを使うことができるようになります

前に編集されたファイルは代替ファイルリストに覚えておかれます。CTRL-^ に数を前
置することでこのリストのインデックスの番号のファイルにジャンプできます。
":files" コマンドで開いたファイルの一覧を見ることができます。
"#<N>" はリスト内の<N>番目のファイルの名前で置換されます。
"#<" は現在のファイル名から拡張子を取り除いたもので置換されます。

検索パターンも強化されました。<NL> 文字を検索パターンや ":s" コマンドの文字列
の一部に使うことができます。Vi では単にコマンドの終了と見なされます。

検索ではマッチした最後にカーソルをおくこともできますし、オフセット文字を使って
検索することもできます。

"~"、":next"、":Next"、"n"、"N" にカウントを前置することができるようになりまし
た。

'autowrite' オプションがセットされている場合でも ":next!" コマンドはファイルを
書き込みません。Vi ではファイルは上書きされましたが、これはバグだと思われます。
というのもそういう動作は期待されませんし ":rewind!" コマンドでは書き込まれない
からです。

Vi では置換モードで <CR> を打ち込んだときに文字を削除するのは 'ai' がセットさ
れている場合のみでした(しかし <Esc> キーが押されるまでは表示されませんでし
た)。Vim は常に文字を削除します(またすぐに表示します)。

:wnext コマンドが追加されました。":write" コマンドを実行して ":next" コマンド
を実行するのと同じです。

":w!" コマンドは上書き禁止されているファイルでも常に書き込みます。Vi では
":!chmod+w %:S" してから ":set noro" としなければなりませんでした。

'tildeop' がセットされていると "~" はオペレータとして動作します(移動コマンドを
後に続けます)。

"J" (連結)コマンドを実行するときにピリオドの後でスペースを挿入するのを一つだけ
にするように 'joinspaces' オプションを再セットすることができます(Vi では2つの
スペースが挿入されます)。

"cw" はいくつかの文字で構成されるホワイトスペースを変更できます(Vi では "cw"
はスペースを一つだけ変更するのに "dw" はすべてのホワイトスペースを削除するとい
う紛らわしい仕様でした)。

"o" と "O" は回数を前置することができます(Vi は表示の一部分を削除します)。

Ex コマンドの後につけるフラグはサポートされていません(予定もありません)。

UNIX システム以外では ":cd" コマンドはホームディレクトリに移動するのではなく
(ホームディレクトリはないです)、現在のディレクトリを表示します。":pwd" はすべ
てのシステムで現在のディレクトリを表示します。

":cd" コマンドの後でもファイル名(引数リストや開いたファイル)は元のファイルを指
します。Viではファイルに変更があると ":cd" できません。そうでなければファイル
名の解釈が変わってしまうからです。

":source!" コマンドはファイルから Vi コマンドを読み込みます。

":mkexrc" コマンドは現在の変更されているオプションとマッピングを ".exrc" ファ
イルに書き出すコマンドです。":mkvimrc" は ".vimrc" ファイルに書き出します。

マッピングで「最後が再帰的であるかどうか」のチェックはされません。つまり次のよ
うなマッピングもできます。
":map! foo ^]foo".

マッピングが数字で始まる場合は、Vi ではそのカウントが失われてしまっていました
(例: ":map g 4G" というマッピングを使っていると "7g" は4行目に移動してしまいま
した)。これは Vi のバグだと考えられます。Vim では多くの人が期待する動作である
ようにカウントを連結します(この例の場合は "74G" になります。

:put! コマンドは現在の行の上にレジスタの内容を挿入します。

Vi での "p" と "P" コマンドは挿入されるテキストが一行より短い場合は "." で繰り
返すことができませんでした。Vim では常に繰り返すことができます。

":noremap" コマンドは再マップされないマップを作るのに使うことができます。これ
は2つのキーの意味を交換するのに使うと便利です。":cmap", ":cunmap", ":cnoremap"
はコマンドライン編集でのみ動作するマッピングです。":imap", ":iunmap",
":inoremap" は挿入モードのみで動作するマッピングを定義できます。同様なコマンド
は短縮入力にもあります: ":noreabbrev", ":iabbrev", ":cabbrev", ":iunabbrev",
":cunabbrev", ":inoreabbrev", ":cnoreabbrev"

Vi では ":map foo bar" は前の ":map bug foo" というマッピングを削除していまし
た。これはバグと思われますので Vim ではその仕様は含まれません。":unmap! foo" 
は "map! bug foo" というマッピングを削除します。なぜならそうでなければマッピン
グを外すのが非常に困難になるからです(これは Vi と同じ動作です)。

':' レジスタは最後のコマンドラインを含んでいます。
'%' レジスタは現在のファイル名を含んでいます。
'.' レジスタは最後に挿入されたテキストを含んでいます。

":dis" コマンドはヤンクレジスタの内容を表示します。

CTRL-O/CTRL-I は古い/新しい場所に移動するのに使うことができます。これらの移動
する場所は '' コマンドで移動する場所と同じですが他のファイルの中でもありえます。
":jumps" コマンドは古い場所をリストします。

'shiftround' オプションがセットされていると ">" と "<" コマンドでは
'shiftwidth' の倍数になるようにインデントは調整されます。

'scrolljump' オプションはスクリーンからカーソルが出たときにスクロールする最小
の行数を設定することができます。もしスクロールが遅い場合はこれをセットしてくだ
さい。

'scrolloff' オプションでカーソルの上や下に保持しておく最小の行数を設定できます。
これを設定しておくとカーソルの前後を見渡せるようになります。かなり大きい数字に
セットしておけばカーソル行は常にウィンドウの中央に来ることになります。

大文字のマークはファイルを越えてジャンプするのに使うことができます。":marks"
コマンドは現在セットされているすべてのマークをリストします。"']" と "`]" は前
に操作を行った場所の最後か、テキストを挿入したかプットした場所の最後に移動しま
す。"'[" と "`[" は初めに移動します。

'shelltype' オプションは Amiga 上で使われるシェルのタイプを反映させるのに使う
ことができます。

'highlight' オプションはいくつかのコマンドで使われるハイライトモードを設定する
ことができます。

CTRL-A (加算) と CTRL-X (減算) コマンドが新たに追加されました。カウントを前置
することもでき(初期値 1)、カーソルの下もしくは後の数字をその値の分加算/減算す
るのに使うことができます。数は10進数、8進数(0で始まります)、16進数(0xで始まり
ます)でもよいです。マクロを使うときに非常に便利です。

:set コマンドでは "inv" を前置することで二者択一のオプションは逆の意味にするこ
とができます。

Vi と Vim の両方で ":substitute" コマンドで CTRL-M を使うことで改行を挿入する
ことができます。Vi ではこのためにテキストに実際の CTRL-M を挿入することができ
なかったのですが、Vim では CTRL-V を前に挿入してから実際の CTRL-M をおくことが
できます。


挿入モードで:

'revins' オプションがセットされていると挿入は逆方向に向かってなされます。これ
はヘブライ語を入力するためです。普通の文字を挿入するときはカーソルは逆方向にな
りませんしテキストは右方向に動きます。バックスペース、CTRL-WCTRL-U もまた逆
方向に動作します。置換モードではなんら影響しません。コンパイル時にのみ有効にす
ることができます。

オートインデントを削除するのにバックスペースキーをちょうど CTRL-D のように使う
ことができます。

'backspace' (bs) オプションが "eol" を含んでいると改行をこえてバックスペースし
たり CTRL-U したり CTRL-W することができます。'backspace' が "start" を含んで
いると挿入の初めをこえてバックスペースすることができます。

'paste' オプションがセットされているといくつかのオプションが解除され挿入モード
でのマッピングと短縮入力が使用不可になります。こうすることでウィンドウシステム
でテキストを貼り付けるときに不測の結果が生じるのを避けることができます。
'paste' オプションが解除されればオプションの前の値が復元されます。

CTRL-T/CTRL-D はカーソルがどこの桁位置にあっても常に現在の行のインデントを挿
入/削除します。

CTRL-@ (前に挿入したテキストを挿入する)は常に動作します(Vi: 初めの文字としてを
打ち込んだときにのみ)。

CTRL-A は CTRL-@ のように動作しますが挿入モードから抜けません。

CTRL-R {0-9a-z..} はレジスタの内容を挿入するのに使うことができます。

'smartindent' オプションがセットされていると、C プログラムはもっとうまく自動イ
ンデントされます。'cindent' オプションをセットしているとさらにうまくインデント
されます。

CTRL-Y と CTRL-E は現在のカーソルの上/下の文字をコピーするのに使うことができま
す。

CTRL-V を打った後に3桁の8進数を打つことができ、このバイトの値がテキストに一文
字として挿入されます。キーボードからは打ち込めない内部の文字を使うときに便利で
す。

'expandtab' (et) がセットされていると <Tab> は適切な数のスペースに展開されま
す。

ウィンドウは常にバッファの内容を反映します(Vi ではテキストを変更したりそのほ
かいくつかの場合では行われませんでした)。

Vim が DIGRAPHS を定義してコンパイルされていればダイグラフがサポートされます。
普通のダイグラフのセットが含まれるようになり、":digraph" コマンドで見ることが
できます。":digraph {char1}{char2} {number}" でさらに追加することもできます。
"CTRL-K {char1} {char2}" とするか "{char1} BS {char2}" ('digraph' オプションが
セットされている場合のみ) とすることでダイグラフを入力できます。

挿入をカウントを前置して行う場合、例 "10atest <Esc>"、Vi は初めの挿入に対して
のみ wrapmargin を扱うことができましたが、Vim ではすべてに対して扱います。

"i" か "a" コマンドでのカウント前置はすべてのテキストに対して利用できます。Vi
では一つの行に対してのみカウントを前置できました。"3iabc<NL>def<Esc>" は
"abcabcabc<NL>def" が Vi の動作で、"abc<NL>defabc<NL>defabc<NL>def" が Vim で
の動作です。


コマンドラインモードで:

<Esc> はコマンドラインを実行せずに抜けます。Vi ではコマンドラインを実行します
が、これはほとんどの人が予測する動作とは違いました(<Esc> を打つことで常にコマ
ンドモードに戻るべきでしょう)。いくつかの曖昧なマクロでの問題を避けるため、マ
クロでの <Esc> はコマンドを実行します。もし <Esc> で Vi のようにコマンドを実行
したい場合は次のように修正できます。
        ":cmap ^V<Esc> ^V<CR>"

一般:

'ttimeout' オプションは 'timeout' オプションに似ていますが、カーソルかファンク
ションキーに対してのみ働きます。'timeoutlen' オプションは待つ時間をミリ秒単位
で指定することができます。'esckeys' オプションがセットされていない場合、<Esc>
キーで始まるカーソルとファンクションキーは挿入モードでは解釈されません。

端末文字列がそれぞれオプションとしてあります。termcap がサポートされていなかっ
たり独自の文字列に変更したい場合に利用することができます。

'fileformat' オプションは <EOL> を選択して設定するのに使います: "dos"
<CR><NL>, "unix" <NL>, "mac" <CR>
'fileformats' オプションが空でない場合、Vim は <EOL> のタイプを自動的に判断し
ようとします。'fileformat' オプションはそれに従ってセットされます。

ジョブコントロールを持たないシステム(古い Unix システムと Unix 以外のシステム)
ではCTRL-Z、":stop"、":suspend" コマンドは新しいシェルを起動します。

出力のための対話的なウィンドウなしで Vim が Amiga 上で起動された場合、ウィンド
ウが開かれます(そうして :sh コマンドは動作します)。-d 引数で編集する装置を指定
することができます(例: "-d con:20/20/600/150")。

'columns' と 'lines' オプションはディスプレイの幅と高さを指定するのに使うこと
ができます。

ファイルの最初と最後の数行はオプションをセットするために読み込まれます。
'modelines' オプションがどれだけの数の行を読み込もうとするかを決めることができ
ます(初期値は5です)。モードラインでどんな Ex コマンドも実行できる(重大なセキュ
リティ問題です)バージョンの Vi がありますがそれとは違うということに注意してく
ださい。 trojan-horse

'insertmode' オプションがセットされていると(例えば .exrc で) Vim は挿入モード
で起動します。<Esc> キーを押すと元に戻ります。

アンドゥの情報はメモリに保持されます。使用可能なメモリの量でアンドゥの回数とア
ンドゥ可能なサイズが制限されます。このことは MS-DOS では問題になるかもしれませ
ん。Amiga ではほとんど問題にならないですし、Unix と Win32 では大体において決し
て問題になることはないです。

'backup' か 'writebackup' オプションがセットされていると: ファイルを上書きする
前にバックアップファイル(.bak)が作られます。"backup" オプションがセットされて
いるとバックアップファイルは残されたままになります。

Vim は変更されたファイルの一部分やメモリに入りきらないものを保持するためにファ
イルの最後が ".swp" であるファイルを作成します。このファイルはクラッシュした編
集セッションを "vim -r file" として復元するのに使われます。'updatecount' オプ
ションを 0 にするか Vim を "-n" オプションをつけて起動するとスワップファイルを
使うのをやめさせることができます。.swp ファイルをどこか別の場所に作成させたい
場合は 'directory' オプションを設定してください。

Vim は8.3形式のファイルシステムでも正しく動作することができます。また Amiga 上
での汚い DOS もしくは 雑種の DOS ファイルシステムでも使うことができますし、8.3
形式のファイルシステムを搭載したどんな Unix でも動作します。'shortname' もご
覧下さい。

エラーメッセージは少なくとも1秒は表示されます(Vi ではエラーメッセージは上書き
されます)

hit-enter プロンプトが出た場合でもどんなキーでも打つことができます。<CR>
<NL><Space> 以外の文字はコマンド(の最初)として解釈されます(Vi では ':' で始
まるコマンドしか受け付けませんでした)。 

番号付きレジスタと名前なしレジスタの内容はファイルが変更されたときに覚えておか
れます。

"No lines in buffer" メッセージはマッピングが拒否された理由で表示される、エラー
メッセージではなく普通のメッセージです。

Amiga の AUX: デバイスをサポートしています。

==============================================================================
6. コマンドライン引数                                   cmdline-arguments

異なるバージョンの Vi では異なるコマンドライン引数があります。これはちょっと紛
らわしいですので便宜のためにこの章では違いの概略を説明します。

5つの種類の Vi がここでは考慮されます:
        Elvis   Elvis version 2.1b
        Nvi     Nvi version 1.79
        Posix   Posix 1003.2
        Vi      Vi version 3.7 (Sun 4.1.x)
        Vile    Vile version 7.4 (不完全)
        Vim     Vim version 5.2

Vim だけがファイル名の後でもオプションを受け付けます。

+{command}      Elvis, Nvi, Posix, Vi, Vim: "-c {command}" と同じです。

-               Nvi, Posix, Vi: Ex をバッチモードで起動します
                Vim: 標準入力からファイルを読み込みます(バッチモードを使うには
                -s を利用してください)。

--              Vim: オプションの終わりです。この後はファイル名のみ書くことが
                できます。

--cmd {command} Vim: vimrcファイルを読み込む前に{command}を実行します

--echo-wid      Vim: GTK+がウィンドウのIDを標準出力に書き出します。

--help          Vim: ヘルプメッセージを表示して終了します。

--literal       Vim: ファイル名のワイルドカードを処理しません

--nofork        Vim: -fと同じです

--noplugin[s]   Vim: プラグインの読み込みをしません

--remote        Vim: 他のVimサーバーでそのファイルの編集をします

--remote-expr {expr}    Vim: 他のVimサーバーで{expr}を評価します

--remote-send {keys}    Vim: Vimサーバーに{Keys}を送って終了します

--remote-silent {file}  Vim: 可能なら他のVimサーバーでファイルの編集をします

--remote-wait   Vim: 他のVimサーバーでファイルの編集をして、それが終わるまで待
                     機します

--remote-wait-silent    Vim: --remote-waitと同じですが、それが不可能な場合でも
                             エラーをだしません。

--role {role}   Vim: GTK+ 2: メインウィンドウのroleを設定します

--serverlist    Vim: Vimサーバーのリストを出力して終了します

--servername {name}     Vim: Vimサーバーの名前を指定します

--socketid {id}         Vim: Vimを起動するGTKウィンドウのsocket

--windowid {id}         Vim: Vimを起動するWin32のウィンドウID

--version       Vim: バージョンメッセージを表示して終了します。

-?              Vile: 簡単な使い方を表示して終了します。

-a              Elvis: 指定されたファイル名をそれぞれ一つのウィンドウに読み込
                みます(Vim では -o を使ってください)。

-A              Vim: アラビア語モードで起動します(その機能が組み込まれているな
                     ら)

-b {blksize}    Elvis: ファイルのセッションに {blksize} のブロックサイズを使い
                ます。
-b              Vim: 'binary' モードをセットします。

-C              Vim: Vi 互換モードで起動します。

-c {command}    Elvis, Nvi, Posix, Vim: ファイルを編集バッファにロードした後
                {command} を Ex コマンドとして走らせます。
                Vim: 10個まで "-c" 引数をとることができます。

-d {device}     Vim: I/O に {device} を使います(Amiga のみ)。{+diffの機能を
                外してコンパイルされたときのみ}
-d              Vim: 'diff'を設定して起動しますvimdiff

-dev {device}   Vim: I/O に {device} を使います(Amiga のみ)

-D              Vim: デバッグモード

-e              Elvis, Nvi, Vim: あたかも "ex" が起動されたように Ex モードで
                起動します。

-E              Vim: "exim"のように、より良いExモードで起動しますgQ

-f              Vim: GUI をフォアグラウンドジョブとして起動します(Amiga: 新た
                にウィンドウを開きません)。
-f {session}    Elvis: {session} をセッションファイルとして使います。

-F              Vim: ペルシアモードで起動します(Farsi 付きでコンパイルされてい
                る場合)。
                Nvi: 編集を開始するときにファイルのすべてを読み込まず素早く起
                動します。

-G {gui}        Elvis: {gui} をユーザーインターフェイスとして使います。

-g              Vim: GUI で起動します。
-g N            Vile: N 行目から編集を開始します。

-h              Vim: ヘルプメッセージを表示します。
                Vile: ヘルプファイルを編集します。

-H              Vim: ヘブライモードで起動します(ヘブライオプションをつけてコン
                パイルされている場合)。

-i              Elvis: それぞれのウィンドウを挿入モードで起動します。
-i {viminfo}    Vim: {viminfo} を Viminfo ファイルとして使います。

-L              Vim: "-r" と同じです(またいくつかのバージョンの Vi でもそうで
                す)。

-l              Nvi, Vi, Vim: 'lisp' と 'showmatch' オプションをセットします。

-m              Vim: 変更を書き込むことを禁止し、'write' オプションを解除しま
                す。

-M              Vim: 変更を加えることを禁止し、'write' オプションと
                     'modifiable' オプションを解除します。

-N              Vim: 互換モードではないモードで起動します。

-n              Vim: スワップファイルを使いません。

-nb[args]       Vim: NetBeansへの接続を開きます

-O[N]           Vim: -oと同じですが、ウィンドウを縦分割します

-o[N]           Vim: [N]個のウィンドウを開きます。もしくは各ファイルに1個ずつ
                ウィンドウを開きます。

-p[N]           Vim: [N]個のタブページを開きます。もしくは各ファイルに1個ずつ
                タブページを開きます。

-P {parent-title} Win32 Vim: 親となるアプリケーションの内側でVimを開きます

-q {name}       Vim: {name} をクイックフィックスエラーファイルとして使います。
-q{name}        Vim: 同上。

-R              Elvis, Nvi, Posix, Vile, Vim: 'readonly' オプションをセットし
                ます。

-r              Elvis, Nvi, Posix, Vi, Vim: 復元モード

-S              Nvi: 'secure' オプションをセットします。
-S {script}     Vim: 起動後にスクリプトを実行します。

-s              Nvi, Posix, Vim: Exモードでは "-"(サイレントモード)と同じです。
                Elvis: 'safer' オプションをセットします。
-s {scriptin}   Vim: {scriptin} からスクリプトを読み込みます; Ex モードでない
                ときにのみ有効です。
-s {pattern}    Vile: {pattern} を検索します。

-t {tag}        Elvis, Nvi, Posix, Vi, Vim: {tag} を含むファイルを編集します。
-t{tag}         Vim: 同上。

-T {term}       Vim: {term} に端末名をセットします。

-u {vimrc}      Vim: {vimrc} ファイルを初期化ファイルとして読み込みます。

-U {gvimrc}     Vim: {gvimrc} ファイルを GUI 初期化ファイルとして読み込みます。

-v              Nvi, Posix, Vi, Vim: ノーマルモードで起動します(Vi ではビジュ
                アルモードを意味していました)。
                Vile: 閲覧モードで起動し、変更は不可です。

-V              Elvis, Vim: 冗長なモードで起動します。
-V{nr}          Vim: 特定レベルの冗長なモードで起動します。

-w {size}       Elvis, Posix, Nvi, Vi, Vim:'window'の値を{size}にセットします。
-w{size}        Nvi, Vi: "-w {size}" と同じです。
-w {name}       Vim: スクリプトファイル{name}に書き込みます(non-digit で起動し
                なければなりません)。

-W {name}       Vim: スクリプトファイル{name}に追加します。

-x              Vi, Vim: 暗号鍵の入力を尋ねさせます。encryptionもご覧下さい。

-X              Vim: Xサーバーに接続しません。

-y              Vim: evimのように簡単モードで起動します。

-Z              Vim: 制限モード

@{cmdfile}      Vile: {cmdfile} を初期化ファイルに使います。

==============================================================================
7. POSIX 準拠                                   posix posix-compliance

2005年、Vimの互換性をチェックするためにPOSIXテストを行いました。テストのほとん
どはパスしました。Vi互換モードで実行したときでもPOSIX準拠でない点が2,3ありまし
た。
                                                        $VIM_POSIX
Vim起動時にオプション 'cpoptions' にPOSIXフラグを含めるには、環境変数
$VIM_POSIX を設定してください。そうするとVimができるだけPOSIXに従うようになり
ます。これは Vi互換であることとは少し違います。

以下はVimがPOSIX仕様に従わない点とその理由です:

                                                        posix-screen-size
        Vimは端末からより確かな方法でサイズが得られると、環境変数 $COLUMNS と
        $LINES を無視します。'cpoptions' にフラグ 'l' を加えると $COLUMNS と
        $LINES が他の方法で得られたサイズを上書きするようになります。

        オリジナルのViではコマンド "{" と "}" は "{" で止まりませんが、POSIXは
        止まるように指定しています。POSIX流を望むなら 'cpoptions' にフラグ '{'
        を加えてください。

        コマンド "D", "o", "O" がカウントを受け付けます。繰り返されたときもで
        す。カウントを無視するようにしたければ 'cpoptions' にフラグ '#' を加え
        てください。

        'cpoptions' にフラグ '.' が入っていると、バッファが変更されているとき
        コマンド ":cd" が失敗します。

        ViにはATTENTIONメッセージはありません。ATTENTIONメッセージを出さなくす
        るには 'shortmess' にフラグ "A" を加えてください。

POSIXテストの実行についての注意:
- viテスト33はときどき未知の理由のために失敗します
- viテスト250が失敗します。新しいバージョンで挙動が変更されるでしょう。
    http://www.opengroup.org/austin/mailarchives/ag-review/msg01710.html
    (今はリンク切れ。現在の場所はおそらくここ:
    https://www.opengroup.org/sophocles/show_mail.tpl?CALLER=show_archive.tpl&source=L&listname=austin-review-l&id=1711)
- viテスト310が失敗します。エラーが起きたとき終了コードが非ゼロになる?
- exテスト24が失敗します。テストが間違っているためです。SUSv2とSUSv3の間に変更
  されました。
- exテスト47, 48, 49, 72, 73が失敗します。サイレントモードでは.exrcは読み込ま
  れず、$EXINITが使われないためです。
- exテスト76, 78が失敗します。printfの代わりにechoが使われるためです(修正され
  ました)。Also: problem with \s not changed to space.
- exテスト355が失敗します。"30z" のときに 'window' が使われないためです。
- exテスト368が失敗します。サイレントモードでシェルコマンドがエコーされないた
  めです。
- exテスト394が失敗します。コマンド "=" の出力がサイレントモードで見えないため
  です。
- exテスト411が失敗します。テストファイルが迷子の ':' を含んで正しくないためで
  す。
- exテスト475, 476が失敗します。サイレントモードでリプリント出力が見えないため
  です。
- exテスト480, 481が失敗します。tagsファイルがタブでなくスペースを含んでいるた
  めです。
- exテスト502が失敗します。サイレントモードで .exrc が読まれないためです。
- exテスト509が失敗します。サイレントモードで .exrc が読まれないためです。ま
  た、終了コードが2でなく1になるためです。
- exテスト534が失敗します。サイレントモードで .exrc が読まれないためです。


vim:tw=78:ts=8:ft=help:norl: