vim-jp / vimdoc-ja / vi_diff

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

メインヘルプファイルに戻る English | 日本語 | 編集
vi_diff.txt   For Vim バージョン 9.1.  Last change: 2022 Apr 03


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


Vim と Vi の違い                                        vi-differences

このファイルはVimとVi/Exの違いを一覧表示し、ViになくてVimにあるものの概要を説
明します。

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

1. シミュレートされているコマンド       simulated-command
2. なくなっているオプション             missing-options
3. 制限                                 limits
4. もっとも興味深い機能追加             vim-additions
5. Vim の他の特徴                       other-features
6. サポートされているViの機能           vi-features
7. コマンドライン引数                   cmdline-arguments
8. 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'

Viはtermcapエントリの変更を許可しませんでした。Viを終了し、termcapエントリを編
集して再試行する必要があります。Vimには terminal-options があります。

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

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


行の最大の長さ             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 バイト

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

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

'maxmem' ('mm') オプションは一つのバッファに使われるメモリの最大の量 (キロバイ
トで) を決めるのに使います。'maxmemtot' はすべてのバッファで使われるメモリの最
大の量(キロバイトで)を決めるのに使います。Amiga では '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-Windows
        - VMS
        - Macintosh
        - IBM OS/390
        Note: いくつかのシステムではリソース使用量を削減するために機能を無効に
        する必要があります。いくつかの時代後れのシステムでは以前のバージョンの
        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、Win32 (Windows
        XP か、より最新のもの), Amiga, Macintosh でサポートされています。

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

端末ウィンドウ                                          :terminal
        Vimは端末エミュレータが動くウィンドウを作ることができます。これは、任
        意のコマンド、シェル、またはデバッガを実行するために使用できます。

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

テキストプロパティ                                      textprop.txt
        Vimはプラグインによるテキストの強調表示をサポートしています。プロパティ
        タイプは prop_type_add() で指定でき、プロパティは prop_add() で配
        置できます。

スペルチェック                                          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       大文字にする
        {Vi はビジュアルモードを持っていません、"visual" という名前はノーマル
        モードでExモードと区別するために使われています}

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

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

コマンドライン編集/履歴                                 cmdline-editing
        カーソルキーを使うことでコマンドラインのどの場所からでも挿入を行ったり
        削除を行ったりすることができます。右/左矢印キーは前/後に一つの文字移動
        するのに使うことができ、Shift キーを押しながら右/左矢印キーを押すと前/
        後に一つの単語移動することができます。CTRL-B/CTRL-E はコマンドラインの
        初め/終わりに移動するのに使うことができます。
        {Vi: 行の最後の文字だけを変更できます}
        {Vi: <Esc> を押すとコマンドラインが実行されます。これはほとんどの人に
        とって予想外のことです。それゆえ Vim では変更されました。しかし、<Esc>
        がマッピングの一部であるときは、コマンドラインが実行されます。<Esc> を
        打ったときにもViの振る舞いをしたいなら、":cmap ^V<Esc> ^V^M" を使って
        ください。}
                                                        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、
        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" はタグスタックの内容をリスト表示します。

Viはタグを検索するときに 'wrapscan' を使用します。タグにジャンプすると、Viは別
のファイルの2行目から検索を開始します。'wrapscan' が設定されていない場合、他の
ファイルの1行目のタグを見つけられません。

'tags' オプションはタグファイル名のリストを設定することができます。ですので複
数のタグファイルを使うことができます。ファイル名が "./" で始まる場合は、"./"
はそのファイルのパスに展開されます。こうすることで編集しているファイルがある
ディレクトリと同じディレクトリのタグファイルを使うことができるようになります
{Vi: 一部のバージョンでは常に二分探索を使用します}
{Vi には、タグファイル内のコマンドに対するセキュリティ保護機能はありません}

前に編集されたファイルは代替ファイルリストに覚えておかれます。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" はすべてのホワイトスペースを削除するとい
う紛らわしい仕様でした)。
{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"
コマンドは現在セットされているすべてのマークをリストします。"']" と "`]" は前
に操作を行った場所の最後か、テキストを挿入したかプットした場所の最後に移動しま
す。"'[" と "`[" は初めに移動します。{Vi: 大文字のマークはない}

'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 {register} はレジスタの内容を挿入するのに使うことができます。

'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> キーを押すと元に戻ります。

アンドゥの情報はメモリに保持されます。使用可能なメモリの量でアンドゥの回数とア
ンドゥ可能なサイズが制限されます。このことは 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. サポートされているViの機能                           vi-features

VimはほとんどすべてのViコマンドを大半は同じやり方でサポートしています。それ
は、'compatible' オプションが設定されていて、'cpoptions' にすべてのフラグが含
まれている場合です。 'compatible' をリセットし、'cpoptions' からフラグを削除す
ることによる影響は、特定のコマンドのヘルプで確認できます。

ヘルプファイルは、VimにはあるがViにはない機能を {not in Vi} でマークするために
使用していました。しかし、これらの備考はヘルプファイルを煩雑にしていたので、私
たちは今それを反対の方法でやっています: 以下はViが既にサポートしているものの一
覧です。これ以外のものはVimによって追加されました。


以下のExコマンドはViでサポートされています: ~

`:abbreviate`   短縮入力を登録する
`:append`       テキストを追加する
`:args`         引数リストを表示
`:cd`           ディレクトリの移動
`:change`       変更リストを表示する
`:chdir`        ディレクトリの移動
`:copy`         行のコピー
`:delete`       行を削除
`:edit`         ファイルの編集
`:exit`         `:xit` と同じ
`:file`         カレントファイルの名前を設定または表示
`:global`       パターンにマッチした行でコマンドを実行する
`:insert`       テキストを挿入
`:join`         行の結合。Vi: join! はない
`:k`            マークを設定
`:list`         行を表示
`:map`          マップの設定または表示
`:mark`         マークを設定
`:move`         行を移動する
`:Next`         引数リストの1つ前のファイルを編集 {Vi: count はない}
`:next`         引数リストの次のファイルを開く {Vi: count はない}
`:number`       行番号を表示
`:open`         openモードを開始(Vim では未実装)
`:pop`          タグスタックの1つ古いエントリへジャンプ(一部のバージョンでのみ)
`:preserve`     すべてのテキストをスワップファイルに書き出す {Vi: 終了するかも
                しれない}
`:previous`     `:Next`と同じ {Vi: 一部のバージョンでのみ}
`:print`        行単位で印刷する
`:put`          テキストにレジスタの内容を挿入
`:quit`         Vi を終了
`:read`         テキストにファイルを挿入
`:recover`      スワップファイルからファイルを復元 {Vi: 別の方法で回復し、回復
                するものがあればメールを送信する}
`:rewind`       引数リストの先頭のファイルを開く。++opt はない
`:set`          オプションを設定する。でも、`:set inv{option}`, `:set option&`,
                `:set all&`, `:set option+=value`, `:set option^=value`
                `:set option-=value` `:set option<` はない
`:shell`        シェルを実行する
`:source`       Vi or Ex コマンドをファイルから読み込む
`:stop`         エディタをサスペンドするかシェルにエスケープする
`:substitute`   テキストの検索と置換。Vi: '&', 'i', 's', 'r' または 'I' フラグ,
                確認プロンプトは 'y' と 'n' のみサポート, ハイライトなし
`:suspend`      ":stop" と同じ
`:t`            ":copy" と同じ
`:tag`          タグへジャンプする
`:unabbreviate` 短縮入力を削除
`:undo`         最後の変更を取り消す {Vi: 1レベルのみ}
`:unmap`        マップを削除
`:vglobal`      パターンにマッチしない行でコマンドを実行する
`:version`      バージョン番号その他の情報を表示
`:visual`       ":edit" と同じ、ただし "Ex" モードから抜ける
`:wq`           ファイルに保存して Vi を終了する
`:write`        ファイルに保存
`:xit`          バッファが変更されていたら保存し、Vi を終了する
`:yank`         行をレジスタへヤンク
`:z`            いくつかの行を表示 {Vi のすべてのバージョンにはない}
`:!`            行をフィルタにかける、または、外部コマンドを実行する
`:"`            コメント
`:#`            ":number" と同じ
`:*`            レジスタの内容を実行する
`:&`            最後に実行した ":substitute" を繰り返す
`:<`            'shiftwidth' 1つ分だけ行を左へシフト
`:=`            カーソルのある行の行番号を表示
`:>`            'shiftwidth' 1つ分だけ行を右へシフト
`:@`            レジスタの内容を実行。しかし、`:@` はない。`:@@` は一部のバー
                ジョンでのみ

これらのコマンドに共通するのは、Viが `:edit` やファイルを開く他のコマンドの
++opt 引数をサポートしていないことです。


以下のノーマルモードコマンドはViでサポートされています: ~

note: 説明文中のWORD、N、Nmoveなどの意味については、normal-index の先頭を参
照してください。

CTRL-B        N 画面後方にスクロールする
CTRL-C        現在の(検索)コマンドを中断する
CTRL-D        N 行(デフォルト: 画面の半分の行数)下にスクロールする。Vimは
                'scroll' 画面行をスクロールし、Viはファイル行をスクロールする。
                行が折り返されると違いが出る。
CTRL-E        N 行上にスクロールする (N 行余分)
CTRL-F        N 画面前方にスクロールする
CTRL-G        カレントファイル名と位置を表示する
<BS>          "h" と同じ
CTRL-H        "h" と同じ
<NL>          "j" と同じ
CTRL-J        "j" と同じ
CTRL-L        画面を再描画する
<CR>          カーソルを N 行下の最初の文字へ移動する
CTRL-M        <CR> と同じ
CTRL-N        "j" と同じ
CTRL-P        "k" と同じ
CTRL-R        一部のViバージョン: CTRL-L と同じ
CTRL-T        タグリストの N 個古いタグにジャンプする
CTRL-U        N 行上へスクロールする (デフォルト: 画面の半分の行数) {Vi は
                ファイル行を使っていたが、Vimは 'scroll' 画面の行をスクロール
                する。行が折り返されると違いが出る}
CTRL-Y        N 行下へスクロールする
CTRL-Z        プログラムを中断する(または新しいシェルを起動する)
CTRL-]        カーソル下の識別子で :ta する {Vi: カーソルの後の識別子}
CTRL-^        代替ファイルを編集する {Vi: count はない}
<Space>       "l" と同じ
!             {filter} コマンドで Nmove テキストをフィルタ処理する
!!            {filter} コマンドで N 行をフィルタ処理する
"               次の削除、ヤンク、貼り付けにレジスタ {a-zA-Z0-9.%#:-"} を使う
                (大文字は追記する) ({.%#:} は貼り付けでのみ動作する)
$             カーソルを N 番目の次の行の行末へ移動する
%             現在の行の次の (波/角) 括弧を検索し、そのマッチに移動するか、
                マッチするコメント括弧に移動するか、またはマッチするプリプロ
                セッサディレクティブに移動する (Vi: countは未サポート)
&             最後の :s を繰り返す
'             マークにジャンプする (Vi: 小文字のマークのみ)
(             カーソルを N 文後方に移動する
)             カーソルを N 文前方に移動する
+             <CR> と同じ
,             最後の f、t、F または T を反対方向に N 回繰り返す
-             カーソルを N 行上の最初の文字へ移動する
.             置き換えられた最後の変更を N 回繰り返す
/             {pattern} の N 番目の出現箇所を前方に検索する
0             カーソルを行の最初の文字へ移動する
:             Exコマンドの入力を開始する
;             最後の f、t、F または T を N 回繰り返す
<             Nmove 行を 'shiftwidth' 1つ分左にシフトする
<<            N 行を 'shiftwidth' 1つ分左にシフトする
=             "indent" で Nmove 行をフィルタリングする
==            "indent" で N 行をフィルタリングする
>             Nmove 行を 'shiftwidth' 1つ分右にシフトする
>>            N 行を 'shiftwidth' 1つ分右にシフトする
?             {pattern} の N 番目の出現箇所を後方に検索する
@             レジスタ {a-z} の内容を N 回実行する
                {Vi: 名前付きレジスタのみ}
@@            前の @{a-z} を N 回繰り返す
A             行末の後にテキストを N 回追加する
B             カーソルを N WORD 後方へ移動する
C             カーソル位置から行末まで変更する
D             カーソルの下の文字を行の終わりまで、さらに N-1 行まで削除する
                [レジスタxへ]。"d$" と同義
E             カーソルを前方の N WORD の終わりに移動する
F             カーソルを左に N 番目に現れる {char} に移動する
G             カーソルを N 行目に移動する。デフォルトは最終行
H             カーソルを画面上から N 行目に移動する
I             行の最初の文字の前にテキストを N 回挿入する
J             N 行を連結する。デフォルトは 2
L             カーソルを画面下から N 行目に移動する
M             カーソルを画面の中央の行に移動する
N             最後の '/' か '?' を反対方向に N 回繰り返す
O             カーソルの上に改行してテキストを挿入し、N回繰り返す
                {Vi: 空白の [count] 画面行}
P             カーソル前にテキストを N 回貼り付ける [レジスタ x から]
                {Vi: count はない}
Q             "Ex" モードへ切り替える
R             置換モードに入る: 既存の文字を上書きする。入力したテキストを
                N-1 回繰り返す
S             N 行を [レジスタ x へ入れ] 削除し、挿入を開始する。"cc" と同義
T             カーソルを左に N 番目に現れる {char} の後ろまで移動する
U             1行のすべての最新の変更を元に戻す
                {Vi: 最後に変更された行から移動していない間}
W             カーソルを N WORD 前方に移動する
X             カーソルの前の N 文字を削除する [レジスタ x に入れる]
Y             N 行ヤンクする [レジスタ x に]。"yy" と同義
ZZ            変更されていれば現在のファイルを保存して終了する
[[            カーソルを N セクション後方に移動する
]]            カーソルを N セクション前方に移動する
^             カーソルを行の最初の文字に移動する
_             カーソルを N-1 行下の最初の文字に移動する
`             カーソルをマーク {a-zA-Z0-9} へ移動する
a             カーソルの後ろにテキストを N 回追加する
b             カーソルを N word 後方に移動する
c             Nmove テキストを削除して [register x へ入れ] 挿入を開始する
cc            N 行削除して [register x へ入れ] 挿入を開始する
d             Nmove テキストを削除する [レジスタ x へ入れる]
dd            N 行を削除する [レジスタ x へ入れる]
e             カーソルを前方の N word の終わりに移動する
f             カーソルを右に N 番目に現れる {char} に移動する
h             カーソルを左に N 文字移動する
i             カーソルの前にテキストを N 回挿入する
j             カーソルを N 行下に移動する
k             カーソルを N 行上に移動する
l             カーソルを右に N 文字移動する
m             カーソル位置にマーク {A-Za-z} を設定する
n             最後の '/' か '?' を N 回繰り返す
o             カーソルの下に改行してテキストを挿入する
                {Vi: 空白の [count] 画面行}
p             カーソル後にテキストを N 回貼り付ける [レジスタ x から]
                {Vi: count はない}
r             N 文字を {char} に置き換える {Vi: CTRL-V <CR> は依然として改行
                に置き換えらる。何かを <CR> に置き換えることはできない}
s             (置換え) N 文字を削除して [レジスタ x へ入れ] 挿入を開始する
t             カーソルを右に N 番目に現れる {char} の前まで移動する
u             変更を元に戻す {Vi: 1 レベルのみ}
w             カーソルを N word 前方に移動する
x             カーソル下およびカーソルの後の N 文字を削除する [レジスタ x へ
                入れる]
y             Nmove テキストをヤンクする [レジスタ x へ入れる]
yy            N 行をヤンクする [レジスタ x へ入れる]
z<CR>         現在の行を先上位へ
z-            現在の行を最下位へ
z+            カーソルを N 行目上へ
z^            カーソルを N 行目上へ
{             カーソルを N 段落後方へ移動する
|               カーソルを N 桁位置へ移動する
}             カーソルを N 段落前方へ移動する
~             カーソルの下の N 文字の大文字と小文字を切り替える。
                Vim: 'tildeop' に依る {Vi: count はない、'tildeop' はない}
<Del>         "x" と同じ


以下のコマンドはViの挿入モードでサポートされています: ~

CTRL-@          前に挿入したテキストを挿入して挿入モードを停止する
                {Vi: 最初の文字として入力した場合のみ。最大128文字まで}
CTRL-C          'insertmode' が設定されていなければ、略語をチェックせずに挿入
                モードを終了する
CTRL-D          現在の行の shiftwidth 1つ分のインデントを削除する
                {Vi: CTRL-Dは自動インデントの後に使用した場合にのみ機能する}
<BS>            カーソルの前の文字を削除する {Vi: 自動インデントを削除しない、
                行をまたがない、挿入の過去の開始位置を削除しない}
CTRL-H          <BS> と同じ
<Tab>           <Tab> 文字を挿入する
CTRL-I          <Tab> と同じ
<NL>            <CR> と同じ
CTRL-J          <CR> と同じ
<CR>            改行する
CTRL-M          <CR> と同じ
CTRL-T          現在の行に shiftwidth 1つ分のインデントを挿入する {Vi: インデ
                ント内の場合のみ}
CTRL-V {char}   次の非数字を文字通りに挿入する {Vi: 10進数バイトエントリなし}
CTRL-W          カーソルの前の単語を削除する
CTRL-Z          'insertmode' が設定されている場合: Viを中断する
<Esc>           挿入モードを終了する('insertmode' が設定されていなければ)
CTRL-[          <Esc> と同じ
CTRL-D        現在行のすべてのインデントを削除する
CTRL-D        現在行のすべてのインデントを削除し、次行にそれを復元する
<Del>           カーソル下の文字を削除する


以下のオプションはViでサポートされています: ~

'autoindent'      'ai'      新しい行のために前の行のインデントを使う
                            {Vi はこれとは少し違ったやり方をする:  <Esc> や
                            <CR> を打ったときにインデントが削除された後、上下
                            に移動したときのカーソル位置は削除されたインデント
                            の後である。Vi は削除されたインデントのどこかにカー
                            ソルを置く}
'autowrite'       'aw'      変更された場合は自動的にファイルに書き込む
'directory'       'dir'     スワップファイルのディレクトリ名のリスト
                            {Vi: 一時ファイルを入れるディレクトリ。デフォルト
                            は "/tmp"}
'edcompatible'    'ed'      ":substitute" コマンドのフラグを切り替える
'errorbells'      'eb'      エラーメッセージのベルを鳴らす
'ignorecase'      'ic'      検索パターンの大文字小文字を無視する
'lines'                     ディスプレイの行数
'lisp'                      Lisp用の自動インデント {Vi: ちょっとだけ違う}
'list'                      <Tab> と <EOL> を表示する
'magic'                     検索パターンの特別な文字を変更する
'modeline'        'ml'      ファイルの先頭または末尾の 'modelines' を認識する
                                {一部のViバージョンではmodelinesと呼ばれている}
'number'          'nu'      各行の前に行番号を表示する
'paragraphs'      'para'    段落を区切るnroffマクロ
'prompt'          'prompt'  Exモードでプロンプトを有効にする
'readonly'        'ro'      バッファへの書き込みを禁止する {Vimは `:view` で
                            ファイルを編集する場合は 'readonly' を設定する}
'remap'                     マッピングの再帰を許可する
'report'                    レポートのしきい値の行数の変更
'scroll'          'scr'     CTRL-U と CTRL-D のスクロール行数
'sections'        'sect'    セクションを区切るnroffマクロ
'shell'           'sh'      外部コマンドに使用するシェルの名前
'shiftwidth'      'sw'      (自動)インデントステップに使用するスペースの数
'showmatch'       'sm'      括弧を挿入する場合は、対応する括弧に簡単にジャンプ
                            する
'showmode'        'smd'     現在のモードを示すステータス行のメッセージ
'tabstop'         'ts'      ファイル内の <Tab> が使用するスペースの数
'taglength'       'tl'      タグの有効文字数
'tags'            'tag'     tagコマンドで使用されているファイル名のリスト
                            {Vi: デフォルトは "tags /usr/lib/tags"}
'tagstack'        'tgst'    タグをタグスタックにプッシュする {すべてのViのバー
                            ジョンにはない}
'term'                      端末名
'terse'                     いくつかのメッセージを短くする
'timeout'         'to'      マッピングとキーコードのタイムアウト
'timeoutlen'      'tm'      'timeout' の時間 {一部のViバージョンでのみ}
'ttytype'         'tty'     'term' の別名
'verbose'         'vbs'     有益なメッセージを与える {ブール値オプションとして
                            一部のViバージョンでのみ}
'warn'                      バッファが変更されたときにシェルコマンドを警告する
'window'          'wi'      CTRL-F と CTRL-B のスクロール行数
                            {表示する行数を指定するためにもViはオプションを使
                            用する}
'wrapmargin'      'wm'      折り返しが始まる右からの文字
                            {Vi: 異なった働きをする。そしてあまり役に立たない}
'wrapscan'        'ws'      検索はファイルの末尾で折り返す
'writeany'        'wa'      "!" を必要とせずにファイルに書き込む

missing-options も参照。

==============================================================================
7. コマンドライン引数                                   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} をquickfixエラーファイルとして使います。
-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} を初期化ファイルに使います。

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

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

ViのPOSIX仕様についてはここにあります:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html
および関連するEx仕様:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html

以下は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:noet:ft=help:norl: