vim-jp / vimdoc-ja / intro

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

メインヘルプファイルに戻る English | 日本語 | 編集
intro.txt     For Vim バージョン 9.1.  Last change: 2024 Jan 25


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


序文                                                    ref reference

1. はじめに                     intro
2. インターネットの Vim 情報    internet
3. クレジット                   credits
4. ヘルプの表記法               notation
5. モードの紹介                 vim-modes-intro
6. モードの切り替え             mode-switching
7. ウィンドウに表示される内容   window-contents
8. 用語の定義                   definitions

==============================================================================
1. はじめに                                             intro

Vim は Vi IMproved (Viの改良版) です。かつては Vi IMitation (Viの模造品) でし
たが、多くの改良が加えられたので適切な名前に変更されました。Vim はテキストエ
ディタです。Unix のプログラム "Vi" のほとんどのコマンドと、さらに多くの新しい
コマンドを備えています。プログラムを書いたりテキストを編集するのにとても便利で
す。
すべてのコマンドはキーボードから入力します。そのため、キーボードから手を離す必
要も、スクリーンから目を離す必要もありません。お望みなら、マウスを使うこともで
きますし、GUIではスクロールバーやメニューを使うこともできます(gui.txt参照)。

このマニュアルの概要は help.txt にあります。Vim から <Help> や <F1> キー、
:help コマンドで開くことができます (単に :help と入力してください。引用符も
バーも必要ありません)。
ヘルプファイルが標準の位置にインストールされていない場合は、ヘルプファイルの名
前をオプション 'helpfile' に設定してください。タグでジャンプするのと同じように
ヘルプの項目へジャンプできます。ジャンプしたい項目にカーソルを合わせて CTRL-]
でジャンプできます。CTRL-T で元の場所に戻れます。

Vi と Vim の違いは vi_diff.txt に記載されています。

このマニュアルの内容は Vim が実行されるほとんどの環境で通用しますが、コンピュー
タや端末によって、少し違う動作をする場合があります。このドキュメントから外れる
内容については、システムごとに個別の説明があります。sys-file-list を参照。

                                                        pronounce
Vim は vi-ai-em ではなく、Jim のように一語として発音します。Vim はまた Jim の
ように名称なので、(最初の文字を)大文字で書きます。GUI 版の Vim は "gVim" (文頭
の場合は "GVim")と表記されます。

このマニュアルは全ての Vim コマンドとオプションのリファレンスです。Vi や Vim
の入門書ではありません (それを入れるとあちこちで説明が込み入ってしまうので)。
初心者には、実習 tutor があります。Vim の使い方を身につけるにはユーザーマニュ
アル usr_toc.txt を読んでください。

                                                        book books
ViとVimに関するほとんどの本には初心者向けのセクションがあります。その他、特定
の機能についてより多くの言葉を費やしています。Vimの本の概要はここにあります:
        http://iccf-holland.org/vim_books.html

==============================================================================
2. インターネットの Vim 情報                            internet

                        www WWW  faq FAQ distribution download
Vim のページには Vim についての最新情報が載っています。最新バージョンの Vim へ
のリンクもあります。FAQ はよく尋ねられる質問に対する回答集です。問題があったら
まずこれを読むとよいでしょう。

        Vimホームページ:        https://www.vim.org/
        Vim FAQ:                https://vimhelp.org/vim_faq.txt.html
        ダウンロード:           https://www.vim.org/download.php


質問がある場合、答えを探す場合は: https://vi.stackexchange.com/
"Vi and Vim Stack Exchange はテキストエディタのviとVim類を使っている人のための
質疑応答サイトです"


Vim について討論している Usenet News グループ           news usenet
        comp.editors
このグループでは他のエディタについても話し合われています。Vim について書く場合
は、そのことを必ず明記してください。
あなたはここでアクセスできます:
https://groups.google.com/forum/#!topic/comp.editors

                                                mail-list maillist
Vim のメーリングリストがいくつかあります:
<vim@vim.org>                                   vim-use vim_use
        現行バージョンの Vim の使い方に関する議論: 使いやすいマップ、質問、回
        答、特定のバージョンはどこで手に入るかなど。このメーリングリストにはた
        くさんの人が参加していて、(初心者の) 質問にも答えてくれます。遠慮せず
        どんどん質問してください。
<vim-dev@vim.org>                               vim-dev vim_dev vimdev
        Vim の開発に関する議論: 新しい機能、移植、パッチ、ベータ版など。
<vim-announce@vim.org>                          vim-announce vim_announce
        Vim の新バージョンに関するアナウンス: ベータ版や他システムへの移植につ
        いてもアナウンスがあります。このメーリングリストは購読専用です。
<vim-mac@vim.org>                               vim-mac vim_mac
        Vim のマッキントッシュバージョンの使用、改良に関する議論。
<vim-security@googlegroups.com>                 vim-security
        このリストは、Vim のセキュリティ関連の問題を (非公開で) 議論するための
        ものです。

最新の情報は http://www.vim.org/maillist.php を参照。

NOTE:
- アーカイブは誰でも見ることができます。例えば、Googleグループ。vim-security
  リスト以外の質問がある場合は、これを検索してください。
- メーリングリストに投稿するにはそのリストに登録する必要があります!
- 最初のメッセージはモデレートされているため、表示されるまでに数時間かかること
  があります。
- 登録したアドレスと同じアドレスで投稿する必要があります(スパムメールを避ける
  ため)。

                                                subscribe-maillist
メーリングリストに参加したい場合は、次の場所へメールを送って下さい。
        <vim-subscribe@vim.org>
"From:" のアドレスが正しいことを確認してください。メーリングリストのサーバーか
ら登録方法についてのヘルプが送られてきます。

                                                maillist-archive
より詳しい情報とアーカイブについては、Vim メーリングリストページを見てください。
http://www.vim.org/maillist.php


バグレポート:                           bugs bug-reports bugreport.vim

バグを報告するには3つの方法があります:
1. ランタイムのファイルについてのissueは、ヘッダにある email アドレス宛てか他
   の方法でメンテナーにレポートを送ってください。
2. GitHub に issue を立ててください: https://github.com/vim/vim/issues
   文章は vim-dev メーリングリストにも転送されます。
3. バグレポートは Vim 開発陣 <vim-dev@vim.org> に送ってください。
   これはメーリングリストです。最初にメンバーになる必要があります。たくさんの
   人がそのメッセージを見ます。もしセキュリティ上の問題などの理由でそれを望ま
   ないのであれば、現在の Vim メンテナー https://github.com/orgs/vim/people
   (ただし、Bram や vim-dev ML は除く) の誰かに連絡してください。将来的には、
   セキュリティの問題を扱うための適切なプロセスが設定されるでしょう。

メッセージは簡潔にお願いします。メールに回答する時間は、Vim を改良する時間から
消費されています! 常に再現可能な例をつけてください。そして、バグを引き起こす設
定やその他のものを探してください。

なるべくなら Vim を次のように起動してください: >

        vim --clean -u reproduce.vim

ここで、reproduce.vim は問題を再現するスクリプトです。関連があるならば(もしか
したら MS-Windows 固有のバグかも?)、違うマシンでも試してみて下さい。

可能ならばパッチを私に送って下さい! https://github.com/vim/vim でプルリクエス
トを作成すると、自動チェックが実行され、明らかな問題があれば報告されます。ただ
し、パッチを電子メールで送信することもできます(空白文字の変更を避けるために添
付ファイルを使用してください)。
{訳注: 本家へのレポートは英語でお願いします}

Vim のバージョンや設定情報を含めてくれると助かります。次のコマンドで情報を得る
ことができます: >
   :so $VIMRUNTIME/bugreport.vim
このコマンドはカレントディレクトリにあなたの環境に関する多くの情報を持った
"bugreport.txt" というファイルを作ります。このファイルを送る前に、そこにいかな
る秘密の情報も含まれていないことを確認してください!

Vim がクラッシュした場合は、クラッシュした場所を探してみてください。詳しくは
debug.txt を参照してください。

よく分からなかったり、その問題がすでに解決済みかどうか知りたい場合には、
vim-dev メーリングリストで質問してください。maillist

                                                        year-2000 Y2K
Vim の内部では、テキストの編集に日付を使っていないので、2000 年問題はありませ
ん。Vim は 1970 年 1 月 1 日 (正午) からの秒形式で時間を使います。これは、開い
ているファイルとスワップファイルのタイムスタンプをチェックするために使われます
が、致命的な問題は起きません。ただ警告メッセージが表示されるだけでしょう。

しかし、32bit 整数で秒があふれてしまう 2038 年問題はあるかもしれません。この問
題は、コンパイラ、ライブラリ、オペレーティングシステムに依存しています。
time_t、ctime() 関数が使われているときは特にそうです。time_t はスワップファイ
ル内に 4 バイトで格納されますが、これはファイルの回復時にファイルの日付、時間
を求めるために使われるだけなので、通常の編集作業には決して影響しません。

Vim の strftime() 関数は strftime() システムコールを直接使います。localtime()
は time() システムコールを、getftime() は stat() システムコールで返される時間
をそれぞれ使用します。システムライブラリが 2000 年対応なら、Vim もそうです。

ユーザーは外部コマンドを使用する Vim script を作るかもしれません。このことが
Y2K 問題を招くかもしれませんが、Vim 自身の問題ではありません。

==============================================================================
3. クレジット                                           credits author

Vim の大部分は Bram Moolenaar <Bram@vim.org> Bram-Moolenaar によって作成され
ました。

ドキュメントの一部は以下の方々によって書かれた Vi のマニュアルによります:
        W.N. Joy
        Alan P.W. Hewett
        Mark Horton

Vim エディタは Stevie をベースにしており、下記の方々のソフトウェア (のアイデア)
も参考にしています。他の人々は私に意見やパッチを送ってくれたり、Vim の良い点、
悪い点に関するフィードバックをしてくれました。

これらの人々の協力なくして、Vim は現在の姿にはならなかったことでしょう!

        Ron Aaron               Win32 GUIに関する変更
        Mohsin Ahmed            暗号化
        Zoltan Arpadffy         VMS移植の作業
        Tony Andrews            Stevie
        Gert van Antwerpen      MS-DOS上のDJGPPに関する変更
        Berkeley DB(3)          スワップファイルの実装に関するアイデア
        Keith Bostic            Nvi
        Walter Briscoe          Makefileの更新、様々なパッチ
        Ralf Brown              MS-DOS用のSPAWNOライブラリ
        Robert Colon            多くの役立つアドバイス
        Marcin Dalecki          GTK+ GUIへの移植、ツールバーのアイコン
                                gettext()
        Kayhan Demirel          ウガンダのニュースを送ってくれた
        Chris & John Downey     xvi (マルチウィンドウバージョンのアイデア)
        Henk Elbers             最初のVMSへの移植
        Daniel Elstner          GTK+ 2 への移植
        Eric Fischer            Macへの移植、'cindent'、その他の改良
        Benji Fisher            たくさんのユーザーの質問に答えてくれた
        Bill Foster             Athena GUIへの移植 (後で削除)
        Google                  Bram に週に一日 Vim の仕事をさせてくれる
        Loic Grenie             xvim (マルチウィンドウバージョンのアイデア)
        Sven Guckes             Vimのプロモーター、以前のWWWページ管理者
                                Sven-Guckes
        Darren Hiebert          Exuberant ctags
        Jason Hildebrand        GTK+ 2 への移植
        Bruce Hunsaker          VMSへの移植版の改良
        Andy Kahn               Cscopeサポート、GTK+ GUIへの移植
        Oezguer Kesim           Vimメーリングリストの管理者
        Axel Kielhorn           Macintosh移植の仕事
        Steve Kirkendall        Elvis
        Roger Knobbe            オリジナルのWindows NTへの移植
        Sergey Laskavy          モスクワからのVimのヘルプ
        Felix von Leitner       Vimメーリングリストの以前の管理者
        David Leonard           UnixへのPython拡張の移植
        Avner Lottem            ウィンドウでの右から左への編集
        Flemming Madsen         X11 client-server, 様々な機能とパッチ
        Tony Mechelynck         ユーザーから寄せられたたくさんの質問に回答
        Paul Moore              Pythonインターフェイス拡張、たくさんのパッチ
        Katsuhito Nagano        マルチバイトバージョンに関する作業
        Sung-Hyun Nam           マルチバイトバージョンに関する作業
        Vince Negri             Win32 GUIと一般的なコンソールの拡張
        Steve Oualline          最初のVimの本の著者frombook
        Dominique Pelle         Valgrind のレポートと多くの修正
        A.Politz                たくさんのバグ報告と修正
        George V. Reilly        Win32移植、Win32 GUIへの移植を始める
        Stephen Riehm           バグ収集家
        Stefan Roemer           さまざまなパッチとユーザーへのヘルプ
        Ralf Schandl            IBM OS/390への移植
        Olaf Seibert            DICEとBeBoxバージョン、regexpの改良
        Mortaza Shiran          Farsiのパッチ
        Peter da Silva          termlib
        Paul Slootman           OS/2への移植
        Henry Spencer           正規表現に関して
        Dany St-Amant           Macintoshへの移植
        Tim Thompson            Stevie
        G. R. (Fred) Walter     Stevie
        Sven Verdoolaege        Perlインターフェイス
        Robert Webb             コマンドライン補完、GUIバージョン、そして
                                多くのパッチ
        Ingo Wilken             Tclインターフェイス
        Mike Williams           PostScriptの印刷
        Juergen Weigert         Latticeバージョン、AUXの改良、UNIXとMS-DOSへ
                                の移植、autoconf
        Stefan 'Sec' Zehl       vim.orgの管理
        Yasuhiro Matsumoto      多くの MS-Windows の改良
        Ken Takata              修正と機能
        Kazunobu Kuriyama       GTK 3
        Christian Brabandt      多くの修正、機能、ユーザーサポート等
        Yegappan Lakshmanan     多くのquickfix機能

バグレポートや提案を送ってくれた人々に感謝します。あまりにたくさんいるので、こ
こで彼らの名前について触れることはできませんが。これらの人々のアイデアがなけれ
ば、Vim は今の Vim にはならなかったことでしょう: 彼らが Vim を生かしつづけたの
です!
love peace friendship gross-national-happiness


この文書には他のバージョンの Vi に対するいくつかの参照があります:
                                                        Vi vi
Vi      "オリジナル"。特に指定がなければSun OS 4.xのバージョンのViを指しま
        す。":version" は "Version 3.7, 6/7/85" を返します。別のバージョンに言
        及することもあります。Unix 上でのみ動きます。ソースコードは現在BSDスタ
        イルのライセンス下で利用可能です。Vi についての更なる情報は、以下の場
        所から得られます:
                http://ex-vi.sourceforge.net/
                                                        Posix
Posix   IEEE standard 1003.2, Part 2: Shell and utilitiesより。
        一般に "Posix" として知られる。Vi の動作仕様の原典です。
        posix-compliance を参照してください。
                                                        Nvi
Nvi     "New" Vi。BSD 4.4、FreeBSD に付属の Vi。オリジナルの Vi と高い互換性を
        持ち、少々の拡張がされています。使われているのはバージョン 1.79。
        ":version" は "Version 1.79 (10/23/96)" を返します。バージョン 1.81 が
        開発中ですが、ここ数年リリースされていません。
        ソースコードは自由に利用できます。
                                                        Elvis
Elvis   別の Vi クローン、Steve Kirkendallが作成しました。とてもコンパクトです
        が、Vim ほど高機能ではありません。開発は失速し、エルヴィスは建物を去っ
        てしまいました! ソースコードは自由に利用できます。
                                                        Neovim
Neovim  Vimのクローン。2014年にVimのソースをフォークして、異なる方向を進みまし
        た。非常にgithubに縛られていて、より多くの依存関係があり、開発をより複
        雑にし、移植性を制限しています。コードがリファクタリングされ、パッチが
        Vimと交換できなくなりました。リモートGUIとスクリプト言語との統合をサ
        ポートしています。

==============================================================================
4. ヘルプの表記法                                       notation

この文章を構文強調を使って表示すると、見たままの意味ではないテキストは特別に強
調表示されます。[]、{}、<>、で囲まれた項目や CTRL-X などです。

Note: Vim は入力可能な文字はすべてコマンドで使います。実際に、[]、{}、<> を入
力する場合もあります。それは文脈によって判断できるでしょう。


[]              角カッコで囲まれた文字は省略可能。

                                                    count [count]
[count]         コマンドに前置して、そのコマンドを繰り返したり、反復したりする
                ための省略可能な数字。省略した場合、特に注意が無ければ 1 を指
                定したのと同じになります。Note: このマニュアルでは、[count] は
                コマンドの説明では言及されません。解説する場合だけ説明します。
                これはコマンドを調べ易くするためです。'showcmd' オプションが有
                効だと、(部分的に) 入力されたカウントがウィンドウの下の方に表
                示されます。<Del> を使って末尾の数字を削除できます(N<Del>)。

                                                        [quotex]
["x]            テキストの保管場所として、任意のレジスタを指定できることを示す。
                registers を参照。x は 'a' から 'z'、'A' から 'Z'、'"'、のど
                れか一文字です。場合によっては (put コマンドで使うときなど)、
                '0' から '9'、'%'、'#'、その他の文字も使えます。大文字でも小文
                字でも同じレジスタを指しますが、小文字を使ったときはレジスタの
                内容が上書きされ、大文字を使ったときはレジスタの内容に追加され
                ます。"x を指定しなかった場合や、"" を指定した場合は、無名レジ
                スタが使われます。

                                                        {}
{}              中括弧の表記は、コマンドの一部として入力する必要があって、そこ
                には、いろいろな値を入力することができるときに使われます。Vim
                と Vi の違いを示す場合も中括弧で表記されます (これは文脈から区
                別できます)。

                                                        {char1-char2}
{char1-char2}   char1 から char2 の範囲のどれか一文字。例えば、{a-z} は小文字
                一文字。複数の範囲が指定される場合もあります。例えば、
                {a-zA-Z0-9} は英数字のどれか一文字です。

                                                {motion} movement
{motion}        カーソル移動コマンド。これらは、motion.txt で説明されていま
                す。例:
                        w               次の単語の最初に移動
                        b               現在の単語の最初へ
                        4j              4行下に移動
                        /The<CR>        つぎの "The" が、ある場所に移動
                オペレータコマンド (operator) を入力した後で、対象のテキスト
                を選択するため使われます。
                - 移動コマンドがカウントを含み、オペレータコマンドもカウントを
                  含むときは、二つのカウントが掛け合わされる。例えば、"2d3w"
                  は 6 単語を削除する。
                - 移動はバックもできる。例えば、"db" は単語の最初までを削除す
                  る。
                - 移動はマウスのクリックでもできる。ただし、マウスをサポートし
                  ていない端末もあります。
                - ":omap" コマンドを使って、オペレータコマンドに対して移動コマ
                  ンドを入力しているときに働くマップを定義できます。
                - Ex コマンドを使ってカーソルを移動できます。関数を使って複雑
                  な移動をすることもできます。どの ":" コマンドが使われても、
                  移動は常に文字単位で排他的です。そのため、改行を含めずに行末
                  の文字を選択することはできません ('virtualedit' を設定すれば
                  可能)。
                  Ex コマンドで、オペレータコマンドを使った場所より前にあるテ
                  キストを変更したり、他のバッファに移動した場合、結果は予測で
                  きません。オペレータコマンドを使った場所以降のテキストなら変
                  更できます。カレントバッファがアンロードされないなら、他の
                  バッファにジャンプすることも可能です。

                                                        {Visual}
{Visual}        選択されたテキストの範囲。"v"、"V"、CTRL-V コマンドで選択を開
                始し、カーソル移動コマンドで選択範囲を変更できます。
                オペレータコマンド (operator) を実行する前に使って、対象のテ
                キストを選択することができます。Visual-mode を参照。

                                                        <character>
<character>     下記の表に示した特殊文字。修飾キーが付くこともあります。修飾
                キーと ASCII 文字の組合せもこのように表記されます。

                                                        'character'
'c'             ASCII 文字 1 文字。

                                                        CTRL-{char}
CTRL-{char}     制御文字として入力された文字 {char}。CTRL キーを押しながら
                {char} を押す場合です。{char} は大文字でも小文字でも区別されま
                せん。CTRL-A と CTRL-a は同じです。SHIFT キーを使うと別のコー
                ドを生成する端末もあるため、シフトキーは使わないでください。

                                                        'option'
'option'        オプション (設定) はシングルクォートで囲んで表記されます。オプ
                ションは設定値を変更できます。options を参照。

                                                        quotecommandquote
"command"       説明の中にでてくる入力可能なコマンドは、ダブルクォートで囲んで
                表記されます。
`command`       コマンドの新しい表記法です。他のクォート表記のテキストや文字列
                と区別するために使われます。

                                        key-notation key-codes keycodes
このドキュメントでは、キーの名前として以下のものが使われます。これらは ":map"
コマンドでも使うことができます (キーの名前を挿入するには、CTRL-K を押してか
ら、名前を挿入したいキーを押します)。

表記            意味                  等価表現  10進数値        ~
-----------------------------------------------------------------------
<Nul>           ゼロ                    CTRL-@    0 (10として保存) <Nul>
<BS>            バックスペース          CTRL-H    8     backspace
<Tab>           タブ                    CTRL-I    9     tab Tab
                                                        linefeed
<NL>            ラインフィード          CTRL-J   10 (<Nul>に使用)
<CR>            キャリッジリターン      CTRL-M   13     carriage-return
<Return>        <CR>と同じ                              <Return>
<Enter>         <CR>と同じ                              <Enter>
<Esc>           エスケープ              CTRL-[   27     escape <Esc>
<Space>         スペース                         32     space
<lt>            小なり(less-than)       <        60     <lt>
<Bslash>        バックスラッシュ        \        92     backslash <Bslash>
<Bar>           垂直バー                |       124     <Bar>
<Del>           デリート                        127
<CSI>           コマンドの開始バイト    ALT-Esc 155     <CSI>
<xCSI>          GUIにおけるCSI                          <xCSI>

<EOL>           行の終端 (<CR><NL><CR><NL> のどれかで、
                システムと 'fileformat' に依存) <EOL>

<Up>            上カーソル                      cursor-up cursor_up
<Down>          下カーソル                      cursor-down cursor_down
<Left>          左カーソル                      cursor-left cursor_left
<Right>         右カーソル                      cursor-right cursor_right
<S-Up>          シフト + 上カーソル
<S-Down>        シフト + 下カーソル
<S-Left>        シフト + 左カーソル
<S-Right>       シフト + 右カーソル
<C-Left>        コントロール + 上カーソル
<C-Right>       コントロール + 上カーソル
<F1> - <F12>    ファンクションキー1から12       function_key function-key
<S-F1> - <S-F12> シフト + ファンクションキー1から12
                                                <S-F1>
<Help>          ヘルプキー
<Undo>          アンドゥキー
<Insert>        挿入キー
<Home>          ホーム                          home
<End>           エンド                          end
<PageUp>        ページアップ                    page_up page-up
<PageDown>      ページダウン                    page_down page-down
<kHome>         テンキーのホーム(左上)          keypad-home
<kEnd>          テンキーのエンド(左下)          keypad-end
<kPageUp>       テンキーのページアップ(右上)    keypad-page-up
<kPageDown>     テンキーのページダウン(右下)    keypad-page-down
<kPlus>         テンキーの+                     keypad-plus
<kMinus>        テンキーの-                     keypad-minus
<kMultiply>     テンキーの *                    keypad-multiply
<kDivide>       テンキーの /                    keypad-divide
<kEnter>        テンキーのEnter                 keypad-enter
<kPoint>        テンキーのピリオド              keypad-point
<k0> - <k9>     テンキーの0から9                keypad-0 keypad-9
<S-...>         シフトキー                      shift <S-
<C-...>         コントロールキー                control ctrl <C-
<M-...>         altまたはmetaキー               meta alt <M-
<A-...>         <M-...>と同じ                   <A-
<D-...>         コマンドキー (Mac) / super (GTK)  <D-
<t_xx>          termcapで "xx" エントリを持つキー
-----------------------------------------------------------------------

Note: シフトされたカーソルキー、ヘルプキー、アンドゥキーを使える端末はあまりあ
りません。Amiga上では、シフトされたファンクションキー 10 は、キーシーケンスに
使われるコード (CSI) を生成します。このコードを入力すると、他のキーを入力する
まで待機状態になります。

Note: 削除キーのコードは二つあります。127 は削除キーの 10 進 ASCII 値で、これ
は常に認識されます。削除キーが別の値を生成することもあり、その場合は、termcap
エントリの "kD" からその値を得ます。どちらも同じ効果をもちます。:fixdelも参
照してください。

Note: テンキーのキーは、"普通" のキーと同じ用途に使われます。例えば、<kHome>
<Home>と同じ効果を持ちます。テンキーのキーから、普通のキーと同じキーコードが送
信される場合、それは普通のキーとして認識されます。例えば、<kHome> から<Home>
と同じコードが送信される場合、<kHome> が押されたとしても、<Home> が押されたと
認識されます。その場合、<kHome> へのマッピングは機能しません。

                                                                <>
例ではよく <> 表記が使われます。これは、何を入力すべきかを明確に表記するために
使われますが、文字どおりに入力する必要がある場合もあります。例えば、":map" コ
マンドで使う場合など。規則は以下のとおりです:
 1.  バックスラッシュと '<' 以外の印字可能文字はそのまま表記される。
 2.  バックスラッシュは "\\" (ダブルバックスラッシュ)、または "<Bslash>" と表
     記される。
 3.  実際の '<' は "\<"、または "<lt>" と表記される。混乱を招く恐れがなけれ
     ば、'<' はそのまま使われる。
 4.  "<key>" は特殊キーを打つことを示す。これは上記の表で説明している表記で
     す。いくつか例を挙げます:
           <Esc>                エスケープキー
           <C-G>                CTRL-G
           <Up>                 上カーソルキー
           <C-LeftMouse>        コントロール + 左マウスクリック
           <S-F11>              シフト + ファンクションキー11
           <M-a>                Meta + a  ('a' with bit 8 set)
           <M-A>                Meta + A  ('A' with bit 8 set)
           <t_kd>               "kd" termcapエントリ(下カーソルキー)
    マルチバイト文字である{char}を使用して <M-{char}> を指定できますが、Vimは
    どのバイトシーケンスであるかを認識できないため、動作しません。

<> 表記を使うには、'cpoptions' から '<' フラグを除く必要があります
('compatible' がオフのときは、初期設定でそうなっています)。 >
        :set cpo-=<
<> 表記の特別な意味をなくすには <lt> を使います。バックスラッシュを使う方法も
機能しますが、それは 'cpoptions' が 'B' フラグを含んでいないときだけです。

CTRL-H を "<Home>" の 6 文字にマップする例: >
        :imap <C-H> \<Home>
        :imap <C-H> <lt>Home>
最初の例は 'cpoptions' に 'B' フラグが含まれていない場合のみ機能します。2 番目
の例は常に機能します。
マップで "<lt>" を文字どおりに使うには 次のようにします: >
        :map <C-L> <lt>lt>

マップ、短縮入力、メニューコマンドについては、例をコピー&ペーストして、そのま
ま使うことができます。あるいは、'<' と '>' も含めて、そのまま入力してください。
これは ":set" や ":autocmd" などの他のコマンドでは機能しません!

この表記は、ダブルクォートで囲んだ文字列の先頭に "\<" を付けて使用することがで
きます。例えば "\<C-Space>"。この結果、特殊なキーコードが生成されます。これを
読みやすいテキストに戻す変換には、`keytrans()` を使用します。
==============================================================================
5. モードの紹介                                 vim-modes-intro vim-modes

Vim には 7 つの基本モードがあります。

                                        Normal Normal-mode command-mode
ノーマルモード          ノーマルモードでは普通の編集コマンドを全て入力できま
                        す。エディタをスタートするとこのモードに入ります (オプ
                        ション 'insertmode' を設定しているときは違います。以下
                        を参照)。これはコマンドモードとも呼ばれます。

ビジュアルモード        ノーマルモードに似ていますが、移動コマンドで選択領域が
                        拡大されます。移動コマンド以外のコマンドを使うと、選択
                        領域に対してそのコマンドが実行されます。Visual-mode
                        を参照。
                        オプション 'showmode' がオンなら、"-- VISUAL --" が
                        ウィンドウの最下部に表示されます。

選択モード              これは、MS-Windows でテキストを選択するときの動作に似
                        ています。印字可能文字が入力されると、選択範囲を削除
                        し、挿入モードに入ります。Select-modeを参照。
                        オプション 'showmode' がオンなら、"-- SELECT --" が
                        ウィンドウの最下部に表示されます。

挿入モード              挿入モードでは、タイプされたテキストはバッファに挿入
                        されます。Insert-modeを参照。
                        オプション 'showmode' がオンなら、"-- INSERT --" が
                        ウィンドウの最下部に表示されます。

コマンドラインモード    コマンドラインモードでは、ウィンドウの下部に 1 行のテ
                        キストを入力できます。これは Ex コマンド、":"、パター
                        ン検索コマンド、"?"、"/"、そしてフィルタコマンド、"!"
                        で使用します。Cmdline-modeを参照。

Ex モード               コマンドラインモードに似てますが、コマンド入力後も Ex
                        モードに留まります。コマンドライン編集は、かなり制限さ
                        れます。Ex-modeを参照。

Terminal-Job モード     ターミナルウィンドウの中でジョブと相互作用します。入力
                        されたキーはジョブに渡され、ジョブの出力はターミナル
                        ウィンドウに表示されます。他のモードへの移行の仕方は
                        terminal を参照。

加えて、7 つのモードがあります。これらは基本モードの変種です。

                                Operator-pending Operator-pending-mode
オペレータ待機モード    ノーマルモードに似てますが、オペレータコマンドが実行さ
                        れた後で、その適用範囲を決定するための移動コマンド
                        ({motion}) を得るために、Vim が待機している状態です。

置換モード              置換モードは挿入モードの特別版です。挿入モードと同様の
                        ことができますが、一文字入力するごとに、その場所にある
                        文字が一つ削除されます。Replace-modeを参照。
                        オプション 'showmode' がオンなら、"-- REPLACE --" が
                        ウィンドウの最下部に表示されます。

仮想置換モード          仮想置換モードは置換モードに似ていますが、ファイルの文
                        字の上ではなく、画面上の任意の位置を置換できます。
                        Virtual-Replace-mode を参照。'showmode' がオンなら、
                        "-- VREPLACE --" がウィンドウの最下部に表示されます。

挿入ノーマルモード      挿入モードで CTRL-O を入力したときにこのモードに入りま
                        す (i_CTRL-O を参照)。ノーマルモードに似ていますが、
                        1つのコマンドを実行した後、Vimは挿入モードに戻ります。
                        オプション 'showmode' がオンなら、"-- (insert) --" が
                        ウィンドウの最下部に表示されます。

Terminal-Normal モード  ターミナルウィンドウでノーマルモードを使います。変更は
                        できないようになっています。ターミナルジョブモードに戻
                        るには、"a" や "i" のような挿入コマンドを使います。

挿入ビジュアルモード    挿入モードでビジュアル選択を開始すると、このモードに入
                        ります。例えば、CTRL-O を使い, その後 "v"、"V"、CTRL-V
                        を使ったときです。
                        ビジュアル選択が終了すると、挿入モードに戻ります。
                        オプション 'showmode' がオンなら、
                        "-- (insert) VISUAL --" がウィンドウの最下部に表示され
                        ます。

挿入選択モード          挿入モードで選択モードを開始すると、このモードに入りま
                        す。例えば、マウスをドラッグしたり、<S-Right> を押した
                        ときです。
                        選択モードが終了すると、挿入モードに戻ります。オプショ
                        ン 'showmode' がオンなら、"-- (insert) SELECT --" が
                        ウィンドウの最下部に表示されます。

==============================================================================
6. モードの切り替え                                     mode-switching

何らかの理由で、現在のモードがわからなくなったときは、<Esc> を 2 度押すことで
常にノーマルモードに戻ることができます。Ex モードでは機能しないので、その場合
は ":visual" を使ってください。
<Esc> を押したとき、スクリーンフラッシュや、ベルの音で、ノーマルモードに戻った
ことを知ることができます。挿入モードで CTRL-O の後に <Esc> を押した場合、ビー
プ音は鳴りますが、まだ挿入モードの中なので、もう一度 <Esc> を押してください。

                                                        i_esc
                移動先のモード                                      ~
                Normal  Visual  Select  Insert    Replace   Cmd-line  Ex ~
現在のモード                                                             ~
ノーマル                v V ^V    *4     *1        R gR     : / ? !   Q
ビジュアル       *2               ^G     c C        --        :       --
選択             *5     ^O ^G            *6         --        --      --
挿入             <Esc>    --      --              <Insert>    --      --
置換             <Esc>    --      --    <Insert>              --      --
コマンドライン   *3       --      --     :start     --                --
Ex               :vi      --      --     --         --        --

-- 不可

*1 ノーマルモードから挿入モードへは、コマンド "i"、"I"、"a"、"A"、"o"、"O"、
   "c"、"C"、"s"、"S" で入ります。
*2 ビジュアルモードからノーマルモードへは非移動コマンドで入れますが、そのコマ
   ンドは実行されてしまいます。<Esc>、"v"、"V"、"CTRL-V" (v_vを参照) を入力
   すれば、副作用なしにビジュアルモードから出られます。
*3 コマンドラインモードからノーマルモードへ移行するには次のようにします:
   - <CR> か <NL> を入力する。入力途中のコマンドは実行されます。
   - 行の全てを削除し (例、CTRL-Uを使う)、そして、<BS> を入力する。
   - CTRL-C または <Esc> を入力する、入力途中のコマンドを実行せずに終了できま
     す。
   最後の方法ですが、<Esc> が 'wildchar' に設定されている場合があります。その
   場合、コマンドライン補完が実行されますが、それを無視して、再び <Esc> を入力
   してください。
*4 ノーマルモードから選択モードに移行するには次のようにします:
   - 'selectmode' が "mouse" を含んでいるときは、マウスでテキストを選択する。
   - 'selectmode' が "key" を含んでいるときは、シフトキーを押しながら、特殊
     キーでカーソルを動かします。(:set keymodel+=startsel が必要)
   - 'selectmode' が "cmd" を含んでいるときは、"v"、"V"、"CTRL-V" を使う。
   - "gh"、"gH"、"g CTRL-H" を使う。g_CTRL-H
*5 選択モードからノーマルモードに移行するには、シフトキーを押さずに特殊キーで
   カーソルを動かします。(:set keymodel+=stopsel が必要)
*6 選択モードから挿入モードへ移行するには、印字可能文字 (普通の文字) を入力し
   ます。選択範囲は削除され、入力した文字が挿入されます。

'insertmode' がオンのときは、編集作業は挿入モードで始まります。

        CTRL-\_CTRL-N i_CTRL-\_CTRL-N c_CTRL-\_CTRL-N v_CTRL-\_CTRL-N
CTRL-\ CTRL-N と <C-\><C-N> を使って、どのモードからでもノーマルモードに移行で
きます。このコマンドを使えば、確実にノーマルモードになることができます。<Esc>
のときのようにビープ音はなりません。ただし、Ex モードでは機能しません。f
mのように引数をとるコマンドの後で使われたときは、'ttimeoutlen' で設定された
タイムアウトが適用されます。
フォーカスがターミナルウィンドウにあるとき、CTRL-\ CTRL-N は編集コマンドが入力
されるまでの間ノーマルモードに移行します。t_CTRL-\_CTRL-N を参照。

        CTRL-\_CTRL-G i_CTRL-\_CTRL-G c_CTRL-\_CTRL-G v_CTRL-\_CTRL-G
'insertmode' がオンのときは、CTRL-\ CTRL-G や <C-\><C-G> で挿入モードに移行で
きます。オフのときはノーマルモードに移行します。このコマンドを使えば、現在どの
モードにいるのかにかかわらず、'insertmode' に設定されたモードに移行することが
できます。

                                    Q mode-Ex Ex-mode Ex EX E501
Q                       "Ex" モードに切り替えます。このモードは ":" コマンドを
                        続けて入力するようなものですが、次の点が違います:
                        - 毎回 ":" を押す必要がない。
                        - コマンドを実行するごとに画面が更新されない。
                        - 通常のコマンドライン編集機能は使えない。
                        - マップと短縮入力は使えない。
                        つまり、"標準の" 行編集コマンドだけを使って入力します
                        (削除に<Del>または<BS>、行削除に CTRL-U を使用する)。
                        Vim が "ex" という名前かコマンドライン引数 -e を使用
                        して実行された場合には、このモードで起動します。
                        "Ex" モードを抜けるには、":vi" コマンド :visual を使
                        います。
                        Note: Vim の昔のバージョンでは "Q" がテキストを整形す
                        るコマンドでしたが、いまは gq になっています。ただし
                        vimrc_example.vim あるいは defaults.vim を使ってい
                        る場合は、"Q" と "gq" は同じ動作をします。ただし選択
                        モードを除きます。

                                        gQ
gQ                      "Ex" モードに切り替えます。"Q" と同じですが、実際に
                        ":" コマンドでコマンドを入力するのと同じように動作しま
                        す。コマンドライン編集や補完などがすべて利用可能です。
                        "Ex" モードを抜けるには、`:vi` コマンド(`:visual`)を使
                        います。

==============================================================================
7. ウィンドウに表示される内容                           window-contents

ノーマルモードと挿入/置換モードでは、スクリーンに現在のバッファの内容が表示さ
れます。つまり、見ているものが得られるもの (WYSIWYG) です。しかし、例外が二つ
があります:
- オプション 'cpoptions' が '$' を含んでいて、一行に収まる範囲を変更 (c) す
  るときは、テキストはすぐに削除されず、削除される文字の最後の位置に '$' が表
  示されます。
- あるウィンドウでテキストを挿入していて、別のウィンドウでも同じテキストを表示
  しているとき、挿入を完了するまでそのウィンドウの表示は更新されません。
  {訳注: 確認できず}

ウィンドウの幅より長い行は、折り返して表示されます。'wrap' がオフのときは折り
返されません (下記参照)。'linebreak' を設定すると空白文字で折り返すことができ
ます。

ウィンドウ内でバッファの最終行より下に表示領域がある場合、以下のように、それら
の行の始めに '~' が表示されます:

        +-----------------------+
        |some line              |
        |last line              |
        |~                      |
        |~                      |
        +-----------------------+

このように、'~' はバッファの最後に到達したことを示します。

ウィンドウに表示されている最後の行が表示しきれない場合、以下のように、最終行の
場所に '@' が表示されます:

        +-----------------------+
        |first line             |
        |second line            |
        |@                      |
        |@                      |
        +-----------------------+

このように、'@' はウィンドウに収まりきらない行があることを示します。

'display' に "lastline" フラグが含まれている場合、'@' はウィンドウの左側に表示
されません。最終行がウィンドウに完全に収まらない場合は、収まる部分のみが表示さ
れ、最後の 3 文字が次のように "@@@" で置き換えられます:

        +-----------------------+
        |first line             |
        |second line            |
        |a very long line that d|
        |oesn't fit in the wi@@@|
        +-----------------------+

長すぎてウィンドウに収まりきらない単一の行があるときは、特別な場合として扱われ
ます。Vim はカーソルのある場所付近のみを表示します。特殊記号は表示されません。
その行のどの部分でも編集できます。

'@' と '~' の強調表示を設定するには、オプション 'highlight' の '@' を設定しま
す。それらの文字と、バッファの中の本物の文字を区別することができます。

折り返された行の先頭には 'showbreak' に設定した文字が表示されます。

                                                        wrap-off
'wrap' がオフの場合、長い行は折り返されません。スクリーンに収まる分だけ表示さ
れます。カーソルが表示されていない部分に移動すると、スクリーンは水平方向にスク
ロールします。この方法の利点は、縦の列がありのままに表示されること、スクリーン
に収まらない行も編集できることです。欠点としては、一行の全ての文字を一度に見る
ことができないことが挙げられます。'sidescroll' にはスクロールする最小の列(カラ
ム)数を設定します。

全ての普通のASCII文字はスクリーンに直接表示されます。<Tab> は、それが表現する
数のスペースに置き換えられます。他の非表示文字は、"^{char}" に置き換えられま
す、このとき {char} には、その非表示文字に 64 を足した文字が入ります。つまり、
文字 7 (ベル文字) は "^G" と表示されます。127 から 160 までの文字は "~{char}"
で置き換えられます、このとき {char} には、その文字から 64 を引いた文字が入りま
す。これらの文字はスクリーン上では複数幅で表示されます。カーソルはその複数幅の
先頭にのみ移動させることができます

'number' がオンの場合、全ての行の先頭に行番号が表示されます。
Tip: 行を折り返したときに、行番号と行の表示を混ぜたくないときは、'showbreak'
に 8 つのスペースをセットします: >
        ":set showbreak=\ \ \ \ \ \ \ \ "

'list' がオンの場合、<Tab> 文字はいくつかのスペースとしてではなく、"^I" として
表示されます。'$' が行末に表示されるので、行の最後についた空白を見つけることが
できます。

コマンドラインモードでは、コマンドラインのみが正しく表示されます。バッファの
内容の表示は、コマンドラインモードから抜けたときに更新されます。

ウィンドウの最下行はステータスやその他のメッセージのために使われます。ステータ
スメッセージが使われるのは、オプションがオンのときのみです:

ステータスメッセージ            オプション     初期設定  Unixの初期設定 ~
現在のモード                    'showmode'      on          on
コマンドの文字                  'showcmd'       on          off
カーソルの位置                  'ruler'         off         off

現在のモードとは、"-- INSERT --" や "-- REPLACE --" のことです、'showmode'
を参照。コマンドの文字とは、入力されて、まだ実行されていないコマンドのことで
す。

遅い端末を使っている場合は、ステータスメッセージをオフにすることで編集のスピー
ドを上げることができます: >
        :set nosc noru nosm

エラーが起きたとき、エラーメッセージは少なくとも一秒間は表示されます(反転表示
で)。

いくつかのコマンドでは、そのコマンドが作用する行数が表示されます。何行以上でそ
の表示をするかは、'report' で設定できます (初期設定は 2)。

Amiga 上では、Vim は CLI ウィンドウで実行されます。Vim の名前と現在のファイル
名の絶対パスがタイトルバーに表示されます。ウィンドウがリサイズされると、Vim は
自動的にウィンドウを再描画します。ウィンドウは好きなだけ小さくできますが、小さ
すぎると1行のみで収まりきらなくなります。最下行に表示されるメッセージが読める
ように、最低でも40文字の幅を取ってください。

ほとんどの UNIX システム上で、Vim はウィンドウのリサイズを正しく認識、把握でき
ます。

==============================================================================
8. 用語の定義                                           definitions

  バッファ              テキスト行が入っている。一般にファイルから読み込む。
  スクリーン            Vim が使う領域全体。端末ウィンドウを指す場合もある。
                        "Vimウィンドウ" とも呼ばれる。
  ウィンドウ            バッファが表示される場所。1 つのバッファが複数のウィ
                        ンドウを持つことが可能。

一つのスクリーンは一つ以上のウィンドウを内包し、それらはステータスラインで区切
られ、最下行にはコマンドラインが表示されます。

        +-------------------------------+
screen  | window 1      | window 2      |
        |               |               |
        |               |               |
        |= status line =|= status line =|
        | window 3                      |
        |                               |
        |                               |
        |==== status line ==============|
        |command line                   |
        +-------------------------------+

コマンドラインはメッセージを表示するためにも使われます。コマンドラインに十分な
表示領域がない場合はスクリーンがスクロールします。

行には 4 種類あり、次の違いがあります:

  バッファ行            バッファ内の行。ファイルに読み書きする行のこと。
                        行の長さは制限なし。
  論理行                折り畳みが適用されたバッファ行。複数のバッファ行が折り
                        畳まれ論理行 1 行となり、次のように表示される:
                        "+-- 99 lines folded"。
                        行の長さは制限なし。
  ウィンドウ行          ウィンドウに表示される行: 折り返し、ラインブレークなど
                        が適用された後の論理行の一部。長さはウィンドウの幅以
                        下。それ以上長い行は折り返されるか切り詰められる。
  スクリーン行          Vim が使うスクリーンの行。全てのウィンドウのウィンドウ
                        行とステータスライン、コマンドラインからなる。長さはス
                        クリーンの幅以下。コマンドラインがそれ以上長くなったと
                        きは折り返して表示され、表示領域を作るために行がスク
                        ロールされる。

バッファ行      論理行          ウィンドウ行    スクリーン行 ~

1. one          1. one          1. +-- folded   1.  +-- folded
2. two          2. +-- folded   2. five         2.  five
3. three        3. five         3. six          3.  six
4. four         4. six          4. seven        4.  seven
5. five         5. seven                        5.  === status line ===
6. six                                          6.  aaa
7. seven                                        7.  bbb
                                                8.  ccc ccc c
1. aaa          1. aaa          1. aaa          9.  cc
2. bbb          2. bbb          2. bbb          10. ddd
3. ccc ccc ccc  3. ccc ccc ccc  3. ccc ccc c    11. ~ 
4. ddd          4. ddd          4. cc           12. === status line ===
                                5. ddd          13. (command line)
                                6. ~ 

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