vim-jp / vimdoc-ja / vim_faq

vim_faq - Vimドキュメント

メインヘルプファイルに戻る
vim_faq.txt   よく訊かれる質問

このファイルをインストールする方法については、vim内で
            :help add-local-help
とタイプしてください。

Last updated on: 17 October 2004

            VIM リファレンスマニュアル    by: Yegappan Lakshmanan

Frequently Asked Questions                                      faq FAQ

このVim FAQは、vim@vim.orgメーリングリストとcomp.editorsニューズグループに投稿
された質問とその答から作られました。Vimにおいて問題を解決する方法はいくつかあ
ります。このFAQを読めば、その数種類の可能性のうちの1つが得られます。このFAQ中
の情報とリンクを使って他の方法を探すこともできます。このFAQの答に対するクレ
ジットはPeppe, Benji, Charles Campbellと他多数の人々に帰属します。

                                                                faq-index
目次
                                                faq-general-information
SECTION 1 - 一般的な情報
faq-1.1   Vimとは何ですか?
faq-1.2   誰が Vim を書いたんですか?
faq-1.3   Vim は Vi と互換性がありますか?
faq-1.4   Vim が Vi よりも向上している点は何ですか?
faq-1.5   Vim は無料ですか?
                                                        faq-resources
SECTION 2 - 情報源
faq-2.1   どこに行けば Vim についてもっと学べるでしょうか?
faq-2.2   メーリングリストはありますか?
faq-2.3   メーリングリストのアーカイブはありますか?
faq-2.4   HTML/PDF/PS形式のVimユーザーマニュアルはどこで手に入りますか?
faq-2.5   ある問題が発生しました。それが私の設定によるものか、Vimそのものの
            問題かはどうすればわかりますか?
faq-2.6   どこでバグ報告をすればいいですか?
faq-2.7   FAQはどこで見つけられますか?
faq-2.8   このFAQに答えが見つからなかった時、どうすればいいですか?
faq-2.9   Vimに機能を追加するパッチを持っています。これをどこへ送ればいいで
            すか?
faq-2.10  Vimのtipを持っていたり新しいsyntax/indent/filetype/compilerプラグ
            インを開発したり、新しいスクリプトやカラースキームを開発しました。
            これをアップロードできる公開のウェブサイトはありますか?
                                                        faq-availability
SECTION 3 - 入手
faq-3.1   Vim の最新のバージョンは何ですか?
faq-3.2   どこで Vim の最新版を見つけられますか?
faq-3.3   どのプラットフォーム上で実行できるんですか?
faq-3.4   どこでVimのランタイムファイルの最新バージョンをダウンロードできま
            すか?
                                                                faq-help
SECTION 4 - ヘルプ
faq-4.1   どうやってヘルプファイルを利用するんですか?
faq-4.2   どうやってVimヘルプファイル中のキーワードを探すんですか?
faq-4.3   エラーメッセージE123が出ました。何がまずいのでしょうか?
faq-4.4   Vimの様々なモードについては何を読めばいいですか?
faq-4.5   新しいVimヘルプファイルを追加した後、どうすればVimのヘルプタグファ
            イルを生成することができますか?
faq-4.6   圧縮したヘルプファイルを使うことはできますか?
                                                        faq-editing-a-file
SECTION 5 - ファイルの編集
faq-5.1   ファイルを編集用に読み込むには?
faq-5.2   現在のファイルを別な名前で保存(save as)して新しいファイルを編集す
            るには?
faq-5.3   カレントディレクトリを現在のファイルのディレクトリにするには?
faq-5.4   ファイルの末尾に改行文字(EOL)をつけずにファイルを書き込むには?
faq-5.5   ファイルを最後に編集した場所から開くようにするには?
faq-5.6   Vimでファイルを編集中にそのファイルが他のアプリケーションによって
            変更されたとき、Vimは変更が検出されるたびに警告ウィンドウ(確認ダイ
            アログのような)を開きます。この警告を無効にするには?
faq-5.7   カーソル下のファイル名のファイルを開くには?
faq-5.8   現在のファイルを再読み込みするには?
faq-5.9   ファイルを定期的に自動保存するには?
faq-5.10  ファイルを読み取り専用モードで開くには?
                                                faq-editing-multiple-files
SECTION 6 - 複数のファイルを編集する
faq-6.1   Vim内で同時に複数のファイルを開くには?
faq-6.2   複数のファイル・バッファを切り替えるには?
faq-6.3   それぞれのファイルを別ウィンドウで開くには?
faq-6.4   「ワークセット」や「プロジェクト」のように自動的に複数のファイルを
            同時に読み込ませるようにするには?
faq-6.5   Neditやemacsのように単一のVimインスタンスで複数のトップレベルウィ
            ンドウを開くことはできますか?
faq-6.6   Vim内でディレクトリをブラウズするには?
faq-6.7   ftp/scp/rcp/httpでネットワークごしにファイルを編集するには?
                                                                faq-backup
SECTION 7 - バックアップ
faq-7.1   ファイルを保存したとき元のファイル名の末尾に"~"という文字をつけた
            ファイルが作られます。このファイルを作成するのを止めさせるには?
            (または)バックアップ機能を無効にするには?
faq-7.2   全てのバックアップファイルを特定のディレクトリに保存するように設定
            するには?
faq-7.3   ファイルを保存するとファイルパーミッションが変更されます。ファイル
            パーミッションを変更せずにファイルを保存するよう設定するには?
                                                                faq-buffers
SECTION 8 - バッファ
faq-8.1   バッファに対して変更を加えました。変更されたバッファを保存せずに、
            かつ変更を失うことなく他のバッファを編集するには?
faq-8.2   バッファを切り替えるときに自動的に保存するよう設定するには?
faq-8.3   カレントウィンドウのバッファを空バッファにするには?
faq-8.4   バッファ番号を指定してバッファを読み込むショートカットキーはありま
            すか?
faq-8.5   読み込んでいるバッファをそれぞれ別のウィンドウで開くには?
faq-8.6   Vimを終了することなくバッファを閉じる(削除する)には?
faq-8.7   :e filenameでいくつかのファイルを開きました。Vimを終了することなく
            そのバッファのうちの1つを閉じるには?
faq-8.8   ":%bd"コマンドで全バッファを削除しようとしても、全てのバッファが
            削除されません。なぜ?
faq-8.9   カレントバッファ/ファイルのバッファ番号を表示するには?
faq-8.10  ウィンドウを閉じることなくバッファを削除するには?
faq-8.11  Tabキーで全バッファを巡回するようにマップするには?
                                                                faq-windows
SECTION 9 - ウィンドウ
faq-9.1   ウィンドウとバッファの違いは?
faq-9.2   ウィンドウの幅を広げるには?
faq-9.3   ウィンドウをズームイン・ズームアウトするには?
faq-9.4   全バッファまたは全ウィンドウ、引数リスト中の全ファイルに対してex
            コマンドを実行するには?
                                                                faq-motion
SECTION 10 - モーション
faq-10.1  ファイルの先頭や末尾に移動するには?
faq-10.2  挿入モードで<Esc>キーを押してノーマルモードに移行すると、カーソル
            が1文字左へ移動します(カーソルが行の最初の文字の上にあるときを除い
            て)。この動作を変更し、カーソルがその桁の上に残るようにできますか?
faq-10.3  <Page Up>、<Page Down>などのキーを押してスクロールしたときカーソル
            位置の桁を保つように設定することはできますか?
faq-10.4  ファイル中のある行の長さが画面の幅を越えており、折り返されていま
            す。ここでj, kキーを使うと画面上の次行(物理行)でなくファイルの次行
            (論理行)に移動します。画面上の次行に移動するには?
faq-10.5  Vimにおける文、段落、セクションの定義は?
faq-10.6  文、段落、セクションの先頭と末尾に移動するには?
faq-10.7  画面の右端を越えて続いている行があります。右側にスクロールして画面
            外に出ているテキストを表示するには?
faq-10.8  2個以上のバッファを同時にスクロールさせるには?
faq-10.9  矢印キーを使うとモードが変わり、バッファに変な文字が挿入され、カー
            ソルが適切に移動しません。どうなっているのですか?
faq-10.10 カーソルが行頭にあるとき左矢印キーを押すと前行の行末に移動するよう
            にするには?
faq-10.11 常に挿入モードに留まるようにするには?(モードレスな編集をするに
            は?)
faq-10.12 テキストをスクロールするとき、前後の行を表示するには?
faq-10.13 以前のカーソル位置に戻るには?
                                                        faq-searching-text
SECTION 11 - テキストを検索する
faq-11.1  テキストを検索した後、マッチしたテキストが全て強調されます。この強
            調を一時的/永続的に無効にするには?
faq-11.2  検索パターンにキャリッジリターン文字を含めるには?
faq-11.3  文字^Mを検索するには?
faq-11.4  '~R', '~S'などと表示される文字を検索・置換するには?
faq-11.5  ファイル中の印字不能文字を全て強調するには?
faq-11.6  単語に完全に一致するテキストを検索するには?
faq-11.7  カーソル下の単語を検索するには?
faq-11.8  大文字・小文字を区別せず検索するには?
faq-11.9  2回続けて現れる単語を検索するには?
faq-11.10 ある単語がバッファ中に何回現れるか数えるには?
faq-11.11 検索時にカーソルをマッチした単語の末尾に移動させるには?
faq-11.12 空行を検索するには?
faq-11.13 1つの文字だけを含む行を検索するには?
faq-11.14 複数のファイルから文字列を検索し、置換するには?
faq-11.15 マップ中で置換コマンド":s"を使っています。検索が失敗したときマップ
            が途切れてしまいます。置換が失敗したときにもマップの次のコマンドを
            続けてほしいのですが、どうすればできますか?
faq-11.16 行からある文字がn回目に現れる箇所を検索するには?
faq-11.17 タブ(やその他の文字)を改行文字で置換するには?
faq-11.18 ASCIIコードで検索する文字を指定するには?
faq-11.19 長い行を見つけるには?
faq-11.20 カレントバッファ内の指定したパターンを含む行を全て表示するには?
faq-11.21 複数行にわたる文字列を検索するには?
faq-11.22 バッファの指定した範囲内から検索するには?
                                                        faq-changing-text
SECTION 12 - テキストを変更する
faq-12.1  行末の空白文字(スペースとタブ)を全て削除するには?
faq-12.2  連続する空白文字を1個のスペースに置換するには?
faq-12.3  連続する空行を1行だけに圧縮するには?
faq-12.4  ファイル中の空行を全て削除するには?空白文字だけを含む行を全て削除
            するには?
faq-12.5  カーソル下の単語をコピー/ヤンクするには?
faq-12.6  行全体ではなく、行内のある位置からある位置までをヤンクするには?
faq-12.7  現在のレジスタの中身に追加ヤンクするには?
faq-12.8  複数行にわたる文全体をヤンクするには?
faq-12.9  あるパターンを含む行全てをヤンクするには?
faq-12.10 あるパターンを含まない行全てを削除するには?
faq-12.11 "pattern"を含む全ての行の前に行を追加するには?
faq-12.12 前の行が特定のパターンを含んでいる行に対して操作を行うには?
faq-12.13 あるパターンを含む行全てに対してコマンドを実行するには?
faq-12.14 カーソル位置の1文字上の文字をカーソル位置にコピーするには?
faq-12.15 挿入モードに入らずに現在行の前/後に空行を挿入するには?
faq-12.16 カレントファイルの名前をカレントバッファに挿入するには?
faq-12.17 レジスタの中身をカレントバッファに挿入するには?
faq-12.18 行末を越えてカーソルを移動し、テキストを挿入するには?
faq-12.19 カーソル下の単語(例えばjunk)を"foojunkbar"に置き換えるには?
faq-12.20 ディレクトリ中の全てのファイルに対して特定のテキストを置換する
            には?
faq-12.21 ファイル中に数字が書かれています。これを増加・減少させるには?
faq-12.22 ":substitute"で最後に検索したパターンを再利用するには?
faq-12.23 ":substitute"を使って大文字・小文字を入れかえるには?
faq-12.24 キーボード上に無い文字を入力するには?
faq-12.25 ダイグラフのどれか、または全てを削除するコマンドはありますか?
faq-12.26 挿入モードでバックスペースキーを押すと、今回の挿入モードで入力した
            文字が消されるだけです。バックスペースキーで前回の挿入モードで入力
            した文字を消すには?
faq-12.27 72文字より長くて"+"で終わり、次行に折り返されている行があります。
            このような行をすばやく連結させるには?
faq-12.28 文字単位でヤンクされたテキストを新しい行にペーストするには?
faq-12.29 単語・文字・テキストのブロックの大文字小文字を入れかえるには?
faq-12.30 キーボード上にないASCII文字を入力するには?
faq-12.31 ファイル中の印字不能文字を置換するには?
faq-12.32 バッファから重複した行を削除するには?
faq-12.33 ファイル中の全ての行の前に行番号をつけるには?
faq-12.34 2つの文字・単語・行を入れ換えるには?
                                        faq-completion-in-insert-mode
SECTION 13 - 挿入モードでの補完
faq-13.1  挿入モードで単語や行を補完するには?
faq-13.2  挿入モードでファイル名を補完するには?
faq-13.3  挿入モードで単語を補完するのにCTRL-P/CTRL-Nを使っています。
            今補完した単語の後に現れる単語を補完するには?
                                                        faq-text-formatting
SECTION 14 - テキストの整形
faq-14.1  折り返された行の末尾に改行を挿入するには?
faq-14.2  1行がn文字以下になるように長い行を整形するには?
faq-14.3  短い行を連結して段落を形成するには?
faq-14.4  箇条書きや番号つきリストを整形するには?
faq-14.5  挿入モードで行をインデントするには?
faq-14.6  ファイル全体を整形・インデントするには?
faq-14.7  現在のファイルのインデントを増やす/減らすには?
faq-14.8  ブロックまたは行のグループをインデントするには?
faq-14.9  >または<キーで行をインデントすると、'tabstop'で設定した値でなく、
            標準的なタブストップ値の8が使われます。なぜですか?
faq-14.10 オートインデントを無効にするには?
faq-14.11 メールを編集するときは自動的に'textwidth'オプションをある値にする
            ようにするには?
faq-14.12 自動的に改行を挿入させることはできますか?
faq-14.13 ファイル中に^Mという記号がたくさん表示されます。'fileformat'
            'dos'にしたり'unix'にしたり'mac'にしたりしてみましたが、改善できま
            せん。これらの記号を表示させなくするには?
faq-14.14 他のアプリケーションからVimのバッファへテキストを貼り付けたとき、
            挿入されたテキストの桁(インデント)が狂ってしまいます。
            これを直すには?
faq-14.15 'wrap'をオンにしていて、とても長い行が折り返されて画面に収まりきら
            ないとき、まったく何も表示されません。折り返された行の代わりに'@'
            という記号で始まる空の行が表示されます。行が収まるように画面をスク
            ロールすると'@'は消え、行が表示されるようになります。この挙動の設
            定はどうやるのですか?
faq-14.16 ファイル中の全てのタブ文字をスペースに変換するには?
faq-14.17 後でワードプロセッサーに送るテキストを編集するためのオプションは?
                                                        faq-visual-mode
SECTION 15 - ビジュアルモード
faq-15.1  矩形範囲をコピーするには?
faq-15.2  ファイルの特定の列を削除・変更するには?
faq-15.3  ビジュアル選択した行に対してexコマンドを適用するには?
faq-15.4  矩形選択した範囲に対してexコマンドを適用するには?
faq-15.5  ビジュアルモードでファイル全体を選択するには?
faq-15.6  ビジュアル選択してから>キーを押してインデントすると、選択が解除さ
            れます。この範囲に対して操作を続けるため選択したままにするには?
            (または)最後に選択された範囲を再選択するには?
faq-15.7  ビジュアル選択した範囲の先頭/末尾へ移動するには?
faq-15.8  マウスでテキストを選択してからexコマンドを実行しようと:キーを押す
            と選択された範囲が文字:で置換されてしまいます。マウスで選択したと
            きもビジュアル選択したときのようにテキストに対してexコマンドを実行
            するには?
faq-15.9  マウスでテキストを選択するとビジュアルモードでなく選択モードに入っ
            てしまいます。なぜですか?
faq-15.10 最後にコピー/ペーストされたテキストをビジュアル選択するには?
                                                faq-command-line-mode
SECTION 16 - コマンドラインモード
faq-16.1  コマンドモードまたはexコマンドモードでカレントファイル名を使うには?
faq-16.2  Vimのコマンドラインで効率的にテキストを編集するには?
faq-16.3  ViモードからExモードに移行するには?
faq-16.4  exコマンドの出力をバッファにコピーするには?
faq-16.5  コマンドモードでファイル名を補完しようとタブキーを押します。マッチ
            するファイル名が複数ある時、Vimは最初にマッチするファイル名を補完
            し、マッチしたファイル名全てのリストを表示します。マッチしたファイ
            ル名全てを表示するだけで、最初の候補を補完しないようにするには?
faq-16.6  バッファからコマンドラインにテキストをコピーしたり、コマンドライン
            からバッファにテキストをコピーするには?
faq-16.7  あるコマンドを実行することなくコマンド履歴に入れるには?
faq-16.8  コマンドラインの高さを上げるには?
                                                                faq-viminfo
SECTION 17 - VIMINFO
faq-17.1  Vimを起動したときviminfoファイルに不正な文字があるとエラーメッセー
            ジが出ます。このメッセージを出なくさせるには?
faq-17.2  viminfo機能を無効にするには?
faq-17.3  Vimのセッションをまたいでマークを保存し、使用するには?
                                                        faq-remote-editing
SECTION 18 - リモート編集
faq-18.1  既に起動しているgvimでファイルを開くには? Vim 5.xの
            OpenWithVim.exeとSendToVim.exeはどうなりました?
faq-18.2  vimサーバーに全てのバッファをディスクに保存するようなコマンドを送
            るには?
faq-18.3  Vimのリモートサーバー機能についてのドキュメントはどこで手に入りま
            すか?
                                                                faq-options
SECTION 19 - オプション
faq-19.1  Vimを設定する簡単な方法は?
faq-19.2  オプションの値をトグルするには?
faq-19.3  現在のバッファ/ウィンドウに対してだけ効果を及ぼすようにオプション
            を設定するには?
faq-19.4  オプションの値にスペースを含めるには?
faq-19.5  オプション設定をファイルに埋め込むには?
faq-19.6  ファイル中の全ての行の行番号を表示するには?
faq-19.7  'number'オプションで表示される行番号の幅を変えるには?
faq-19.8  スペース、タブ、改行などの不可視文字を表示するには?
faq-19.9  常に現在行と桁番号を表示するようにするには?
faq-19.10 現在のモードを表示するようにするには?
faq-19.11 ステータスラインに入力途中のコマンドを表示するようにするには?
faq-19.12 ステータスラインに異なる設定・値を表示するようにするには?
faq-19.13 常にステータスラインを表示するようにするには?
faq-19.14 Vimを再起動しても設定が永続するようにするには?
faq-19.15 なぜエスケープキーを押すと約1秒後にビープが鳴る(画面がフラッシュす
            る)のですか?
faq-19.16 'c'と's'を使ったときに変更する文字を削除するのでなく'$'を表示する
            ようにするには?
faq-19.17 1回の":set"コマンドでオプションから複数のフラグを除去するには?
                                                        faq-mapping-keys
SECTION 20 - キーマップ
faq-20.1  キーがどうマップされているかを知るには?
faq-20.2  ユーザー定義のキーマッピングをリストするには?
faq-20.3  キーマップを解除するには?
faq-20.4  キー<xxx>へマッピングができません。何がまずいのですか?
faq-20.5  テンキーにマップするには?
faq-20.6  ビジュアルモードでのみ機能するマッピングを作成するには?
faq-20.7  Vim script中で、すでに使われているキーと衝突しないようにどのキーを
            使うべきかを知るには?
faq-20.8  エスケープキーにマップするには?
faq-20.9  あるキーを何もしないようにマップするには?
faq-20.10 Tabキーでテキストのブロックをインデントし、Shift-Tabでテキストのブ
            ロックをアンインデントするようにしたいです。このようなマップを作る
            には?この挙動はtextpadやVisual Studioなどに似ています。
faq-20.11 私のマッピングにおいて<CR>のような特殊文字が認識されません。
            特殊文字を認識するように設定するには?
faq-20.12 マップ中で'|'を使って複数のコマンドを区切るには?
faq-20.13 その最後が他のマッピング/短縮入力の始まりとなっているマッピング/短
            縮入力があります。最初のものを入力したとき、2番目のが展開しないよ
            うにするには?
faq-20.14 ときどきキーが処理されるのに1秒程度かかるのはなぜですか?
faq-20.15 ビジュアル選択したテキストに対して外部コマンドを実行するマッピング
            を作るには?
faq-20.16 <Tab>キーの機能を保ったままCtrl-Iにマッピングするには?
                                                        faq-abbreviations
SECTION 21 - 短縮入力
faq-21.1  スペリングを間違えた単語を自動的に修正するには?
faq-21.2  複数行の短縮入力を作るには?
faq-21.3  短縮入力が展開されたとき、展開されたテキストの末尾に余計なスペース
            が入ってしまいます。これを防ぐには?
faq-21.4  現在の日付・時刻を挿入するには?
faq-21.5  挿入モードで短縮入力が展開されるのを防ぐには?
                                                faq-record-and-playback
SECTION 22 - レコーディングと繰り返し
faq-22.1  編集操作(挿入、削除、ペースト等)を繰り返すには?
faq-22.2  キーシーケンスを記録し、繰り返すには?
faq-22.3  記録したキーシーケンスを編集するには?
faq-22.4  記録したキーシーケンスをファイルに保存するには?
faq-22.5  レジスタ0にキーシーケンスを保存しています(つまり q0 .... q)。
            記録したキーシーケンスの中でテキストをヤンクしています。一度その
            キーシーケンスを再生すると、もうそれを再現することができません。
                                                        faq-autocommands
SECTION 23 - 自動コマンド
faq-23.1  読み込み専用ファイルを修正しようとしたときにコマンドを実行するには?
faq-23.2  あるバッファに入るときに毎回コマンドを実行するには?
faq-23.3  あるウィンドウに入るときに毎回コマンドを実行するには?
faq-23.4  autocmd中でその自動コマンドが実行されているファイルの名前やバッ
            ファ番号を知るには?
faq-23.5  Vimがフォーカスを失ったとき、変更されたバッファ全てを自動的に保存
            するには?
faq-23.6  Vimを終了するときにクリーンアップ用の関数を実行するには?
                                                        faq-syntax-highlight
SECTION 24 - 構文強調
faq-24.1  構文強調をオン・オフにするには?
faq-24.2  背景色と文字色を変えるには?
faq-24.3  暗い/明るい背景色に合うように色を変えるには?
faq-24.4  ":set number"をしたときに表示される行番号の色を変えるには?
faq-24.5  ビジュアルモードで選択された範囲の背景色を変えるには?
faq-24.6  オプション'list'で表示した特殊文字(タブ、行末の空白、行末など)に色
            をつけるには?
faq-24.7  毎回同じカラースキームを使うように.vimrc/.gvimrcで設定するには?
faq-24.8  正しく構文強調されません。ファイルの一部が強調されなかったり、間
            違って強調されてしまいます。
faq-24.9  対応する括弧を強調する組み込みの関数はありますか?
faq-24.10 Cのコメントの構文強調をオフにするには?
faq-24.11 Vimに付属する標準の構文ファイルに私自身の構文拡張を加えるには?
faq-24.12 Vimに付属の標準の構文ファイルを独自の構文ファイルで置き換えるには?
faq-24.13 特定の桁以降の全ての文字を強調するには?
faq-24.14 ソースファイル(.c, .hなど)を構文強調つきでHTMLファイルに変換するに
            は?
faq-24.15 現在の強調グループ定義を全て表示するには?
                                                faq-vim-script-writing
SECTION 25 - Vim script を書く
faq-25.1  読み込まれているスクリプトを全て表示するには?
faq-25.2  Vim scriptをデバッグするには?
faq-25.3  あるオプションを設定したスクリプト/プラグインを探すには?
faq-25.4  (おそらくスクリプトを実行中に)エラーやメッセージが出るのですが、す
            ぐに消えてしまいます。このメッセージをもう一度表示するには?
faq-25.5  プラグイン固有の情報を保存し、Vimを再起動したときそれを復元するに
            は?
faq-25.6  関数の中から挿入モードを開始するには?
faq-25.7  関数の中でカーソル位置を動かすには?
faq-25.8  .vimrcファイルの中で環境変数の値をチェックするには?
faq-25.9  環境変数が定義されているかどうかをチェックするには?
faq-25.10 Vimの組み込み関数を呼ぶには?
faq-25.11 Vim script中でノーマルコマンドを使っています。そのコマンドに対して
            ユーザー定義のマッピングが働くのを防ぎ、そのノーマルモードコマンド
            がVimの標準の機能を果たすようにするには?
faq-25.12 ビジュアルモードで現在選択されているテキストを変数やレジスタに入れ
            るには?
faq-25.13 変数'myvar'にテキストが入っています。この変数を":s"中で使って
            'mytext'というテキストを置換したいのですが、どうすればいいですか?
faq-25.14 変数"bno"がバッファ番号を保持しています。この変数を使って対応する
            バッファを開くには?
faq-25.15 オプションの値を変数に保存するには?
faq-25.16 関数の中でテキストをコピーし、バッファに挿入しました。関数の中で
            そのテキストをインデントするには?
faq-25.17 Vim script中でカーソル下の文字を取得するには?
faq-25.18 拡張子を除いたカレントファイル名を取得するには?
faq-25.19 カレントファイルのベース名(basename)を取得するには?
faq-25.20 関数の結果をカレントバッファに挿入するには?
faq-25.21 関数の中で外部プログラムを呼ぶには?
faq-25.22 ":!"で実行したプログラムが返すステータス値を取得するには?
faq-25.23 カレントバッファが変更されているかどうかを知るには?
faq-25.24 スクリプト中でノーマルコマンドの中に改行文字を使いたいです。改行文
            字を指定するには?
faq-25.25 スクリプト中で長い行を次行に継続するには?
faq-25.26 "execute 'echo Myfunc()'"として自作の関数を呼ぼうとすると、カーソ
            ルがカレントバッファの先頭に移動してしまいます。なぜ?
faq-25.27 レジスタの中身を実行するには?
faq-25.28 関数やマップを呼んだ後に'u'キーを押してアンドゥするとその関数/
            マップによってなされた変更全てをアンドゥします。なぜ?
faq-25.29 s:つきで定義された関数(スクリプトローカル関数)を別のスクリプト/
            プラグインから呼ぶには?
faq-25.30 読み込んだスクリプトをun-sourceするには?言い替えると、スクリプト
            を読み込んだことによって実行されたコマンドを全て戻すには?
                                                                faq-plugins
SECTION 26 - プラグイン
faq-26.1  ファイル形式ごとに異なるオプションを設定するには?
faq-26.2  プラグイン/構文ファイル/インデントファイル/カラースキーム/ファイル
            タイププラグインをダウンロードしました。Vimがこれらのファイルを読
            み込むようにするには、どこにコピーすればいいですか?
faq-26.3  既存のファイル形式別プラグインを拡張するには?
faq-26.4  プラグインの読み込みをオフにするには?
faq-26.5  ファイル形式別プラグインの読み込みをオフにするには?
faq-26.6  全てのファイル形式に対し、グローバルのファイル形式別プラグインで
            なされる設定を上書きするには?
faq-26.7  Vimのディレクトリブラウザープラグインを無効にするには?
faq-26.8  特定のパターンにマッチする名前のファイルや拡張子に応じてファイル
            タイプオプションを設定するには?

                                                faq-editing-program-files
SECTION 27 - プログラムファイルを編集する
faq-27.1  C/C++のファイルに対してオートインデントを有効化するには?
faq-27.2  C/C++のファイルに対するインデントをカスタマイズするには?
faq-27.3  オートインデント機能を無効化するには?
faq-27.4  オートインデントの際に挿入されるスペースの数を変えるには?
faq-27.5  Cプログラムを編集しています。マクロ定義や変数を表示するには?
faq-27.6  Cプログラムを編集しています。ブロックの内側から、そのブロックの開
            始位置や終了位置にジャンプするには?
faq-27.7  C++ファイルで"//"コメントが自動的に挿入されるのを止めさせるには?
faq-27.8  一連の行の行頭にコメント文字'#'をつけ加えるには?
faq-27.9  Cのソースファイルに対応する名前のヘッダーファイルを開くには?
faq-27.10 コメントを入力しているとき、自動的にコメント文字を挿入するには?
                                                                faq-quickfix
SECTION 28 - QuickFix
faq-28.1  Vimの中からプログラムをビルドするには?
faq-28.2  Vim中からmakeコマンドを起動すると、コンパイラがプログラムをコンパ
            イルしてエラーメッセージを出力します。しかしコンパイルが終わると表
            示が消えてしまい、エラーメッセージをもう一度見るには :clist としな
            ければなりません。このエラーメッセージを見るのに他の方法はありませ
            んか?
                                                                faq-folding
SECTION 29 - 折り畳み
faq-29.1  折り畳みの機能を拡張するには?
faq-29.2  'foldmethod'をセットして折り畳みを有効化すると、全ての折り畳みが閉
            じてしまいます。これを防ぐには?
faq-29.3  ファイルの編集を開始したときにいくつの折り畳みが開かれた状態にする
            かをコントロールするには?
faq-29.4  マウスを使って折り畳みを開閉するには?
faq-29.5  閉じた折り畳みの表示に使われるテキストを変更するには?
faq-29.6  Vimを終了・再起動するとき、手動で作った折り畳みを保存・復元するに
            は?
                                        faq-vim-with-external-applications
SECTION 30 - 外部プログラムとの連携
faq-30.1  Vimのウィンドウの中でシェルを起動することはできますか?
faq-30.2  カーソル下の単語を外部プログラムに渡すには?
faq-30.3  シェルコマンドの出力をVimのバッファに取り込むには?
faq-30.4  カレントバッファの中身を外部プログラムにパイプで渡して、そのプログ
            ラムの出力でバッファを置き換えるには?
faq-30.5  ファイル中のあるセクションをソートするには?
faq-30.6  Vimとslrnといっしょに使うステップ・バイ・ステップガイドはあります
            か?
faq-30.7  Vimをページャとして使うには?
faq-30.8  Vimの中でUnixのmanページを見るには?
faq-30.9  Vimのdiff機能で使われるdiffコマンドを変更するには?
faq-30.10 折り畳みなしで差分モードを使うには?
                                                                faq-gui-vim
SECTION 31 - GUIのVIM
faq-31.1  バッファ固有のメニューを作るには?
faq-31.2  GUIのVimで使われるフォントを変更するには?
faq-31.3  GUIのVimが起動したときのウィンドウの位置を指定するには?
faq-31.4  GVimに水平スクロールバーをつけるには?
faq-31.5  スクロールバーをデフォルトで左側に表示するようにするには?
faq-31.6  メニューバーを消すには?
faq-31.7  GVimを使っています。ALTキーと文字キーを押すとその文字で始まるメ
            ニューが選択されます。ALT-<key>の組合せを使いたいので、この挙動は
            やめてほしいです。どうすればいいですか?
faq-31.8  スクロールバーをドラッグしたとき、カーソル位置を動かさずにテキスト
            をスクロールさせることは可能ですか?
faq-31.9  ":browse"を使ったときに特定のディレクトリから始めるようにするには?
faq-31.10 ファイルがVimの外部で変更されたときなど、問い合わせがあるとき、GUI
            のダイアログボックスが表示されます。コンソールのダイアログボック
            スが出るようにするには?
faq-31.11 GVimをアプリケーションxxx用のエディタとして使っています。アプリ
            ケーションxxxがGVimを起動すると、コントロールがすぐにアプリケー
            ションxxxに戻ってしまいます。Vimを終了したとき初めてアプリケーショ
            ンxxxにコントロールが戻るようにGVimを起動するには?
faq-31.12 なぜ、システムにインストールされているフォント全てが「フォントを
            選ぶ」ダイアログに現れないのですか?
faq-31.13 コマンドラインモードでマウスを使うには?
faq-31.14 テキストをスクロールしようとマウスの中央ボタンを押すと、最後にコ
            ピーしたテキストがペーストされてしまいます。この挙動を無効にするに
            は?
faq-31.15 GVimウィンドウの位置とサイズを変更するには?
                                                        faq-vim-on-unix
SECTION 32 - UNIX上のVim
faq-32.1  xtermでVimを実行しています。CTRL-Sを押すとVimがフリーズします。
            どうすればいいですか?
faq-32.2  画面の更新について奇妙な問題があります。これを解決するには?
faq-32.3  Vimのターミナル/コンソール版を使っています。挿入モードでバックス
            ペースキーを押してもカーソルの前の文字が消えません。どう設定すれば
            良いですか?
faq-32.4  xtermでVimを使っています。Vimを終了すると画面が元の状態に復元され
            ます。これを無効化するには?
faq-32.5  Vimの起動にかなり時間がかかります。起動時間を最小化するには?
faq-32.6  Unixのgvimでカーソルの点滅を止めるには?
faq-32.7  GTK Vimのメニューのフォントを変えるには?
faq-32.8  Vimが<Ctrl-Z>でサスペンドするのを防ぐには?
faq-32.9  Vimを実行しているxtermをkillすると、Vimのプロセスが生き残り、多大
            なCPU時間(99%)を食ってしまいます。なぜこうなるのですか?
faq-32.10 Unixターミナルで構文強調を使うには?
                                                faq-vim-on-ms-windows
SECTION 33 - MS-Windows上のVim
faq-33.1  MS-Windows上でCTRL-Vを押しても矩形ビジュアルモードが始まりません。
            どうなっているのですか?
faq-33.2  CTRL-Yキーを押すとCTRL-Rのような動作をします。CTRL-YCTRL-Yとして
            扱うように設定するには?
faq-33.3  常にGVimのウィンドウを最大化して起動するには?
faq-33.4  なんらかの編集操作をするとVimがフリーズします。カーソルは空の四角
            形になります。全然文字が入力できません。どうなっているのですか?
faq-33.5  Windows XPを使っています。最大化したGVimの表示速度がとても遅いで
            す。表示の更新を早くするには?
faq-33.6  VimをCygwin上で使うにあたって推奨される設定は?
faq-33.7  差分モードでGNU diffを使おうとしています。コマンドラインからdiffを
            使うとうまく動くのですが、Vim内で使おうとすると動きません。どうす
            れば?
faq-33.8  Outlookで外部エディタにVimを使うことはできますか?
faq-33.9  HTMLファイルを編集するのにVimを使っています。現在開いているHTML
            ファイルをインターネットエクスプローラーでプレビューするには?
faq-33.10 VimをMicrosoft Visual Studioといっしょに使いたいです。どうすれば?
faq-33.11 どこに_vimrcと_gvimrcを置けばいいですか?
faq-33.12 ファイルを保存する度に、そのファイルがVimの外部で変更されていると
            警告が出ます。なぜですか?
                                                                faq-printing
SECTION 34 - 印刷
faq-34.1  全ての行に行番号をつけて印刷するには?
faq-34.2  構文強調の色をつけてファイルを印刷するには?
                                                faq-building-vim-from-source
SECTION 35 - Vimをソースからビルドする
faq-35.1  Unixシステム上でVimをソースからビルドするには?
faq-35.2  Unixでホームディレクトリなど、デフォルトのディレクトリ以外にVimを
            インストールするには?
faq-35.3  MS-Windowsシステム上でVimをソースからビルドするには?
faq-35.4  私がインストールしたVimにはヘルプ、構文ファイル、インデントファイ
            ルが欠けています。それらのファイルをインストールするには?
faq-35.5  Vimをソースからビルドして"make install"でインストールしました。Vim
            のソースディレクトリを残しておく必要はありますか?
faq-35.6  ある機能がコンパイル時に有効化されているかどうかを知るには?
faq-35.7  GUI機能なしでVimをビルドすることはできますか?
faq-35.8  Unixシステム上でVimをビルドするとき、"undefined reference to 
            term_set_winsize"というエラーが出ます。これを解決するには?
faq-35.9  GTK 2.03を使おうとしているのですが、Vimのconfigureがgtk-configがな
            いとのメッセージを出します。しかしGTK2は一般的なpkg-configを使うよ
            うになったので、これは正しいのです。gtk用のインクルードファイルと
            ライブラリのリストを出力するpkg-configならありますが、なぜか
            configureスクリプトはこれを使ってくれません。
                                                                faq-various
SECTION 36 - 様々な事柄
faq-36.1  Vimでバイナリフィルを編集するには?
faq-36.2  ビジュアルエラーフラッシュとエラービープを無効にするには?
faq-36.3  バッファに表示されている文字のASCIIコードを表示するには?
faq-36.4  コマンドのカウントとして0を使うことはできますか?
faq-36.5  Vimの起動時の画面を表示させなくするには?
faq-36.6  "hit enter to continue"プロンプトを避けるには?
faq-36.7  コマンドラインからVimを起動して一連のファイルに対して一連のコマン
            ドを実行するには?
faq-36.8  挿入モードから抜けることなくノーマルモードコマンドを実行するには?
                                                                faq-unicode
SECTION 37 - Unicode
faq-37.1  VimでUnicodeのファイルを作ることはできますか?
faq-37.2  Unicodeのファイルを編集するにあたって特に重要な設定は?
faq-37.3  オプション'encoding'とは何ですか?
faq-37.4  Vimでは様々なUnicodeエンコーディングをどう表記しますか?
faq-37.5  バイト順マークの有無を指定するには?
faq-37.6  オプション'fileencoding'とは何ですか?
faq-37.7  オプション'fileencodings'とは何ですか?
faq-37.8  オプション'termencoding'とは何ですか?
faq-37.9  オプション'bomb'とは何ですか?
faq-37.10 これらのオプションの典型的な例はどこにありますか?
faq-37.11 Unicodeの文字を挿入するには?
faq-37.12 どのダイグラフがどの文字に定義されているかを知るには?

=============================================================================
                                                                faq-1
SECTION 1 - 一般的な情報

                                                                faq-1.1
1.1.  Vimとは何ですか?

Vim とは Vi IMproved を表します。かつては Vi IMitation の略でしたが、あまりに
多くの改良があったため名前の変更は適切なものでした。Vim は、Unix プログラムの
"Vi" のほとんど全てのコマンドや、多くの新しいコマンドを含んだテキストエディタ
です。全てのコマンドはキーボードで与えることができます。これには、指はキーボー
ドに置いたまま、目はスクリーンに向けておけるという利点があります。望む人には、
マウスサポートや、スクロールバーとメニューのついた GUI 版もあります。

Vim はエディタであって、ワードプロセッサーではありません。ワードプロセッサーは
主にテキストのレイアウトを行うのに使われます。つまり、位置決めや、表示時の見え
方を変えたり、ということです。たいてい最終的なドキュメントは他の人に満足いくよ
うに見せるため、印刷したり活字に組んだりなどするよう意図されます。ワードプロ
セッサーの例は、Microsoft Word、WordPerfect、FrameMaker、AmiPro です。

エディタは単純にテキストを入力するためのものです。ドキュメントの植字やレイアウ
トは二次的なものです。エディタにおいて、主な関心事はテキスト入力であり、テキス
トを良く見せることではありません。Vim や Vi 以外のエディタの例は、Emacs、
Crisp、Brief、xedit です。そして Notepad も。

さらなる情報については以下を参照してください。

    :help intro

                                                                faq-1.2
1.2. 誰が Vim を書いたんですか?

Vim のほとんどは Bram Moolenaar によって書かれましたが、他に貢献した人々の名前
はここでは多すぎて触れられません。完全なリストは ":h credits" を見てください。

Vim は、Tim Thompson、Tony Andrews、G.R. (Fred) Walter らによって開発された
Stevie に基づいています。

さらなる情報については以下を参照してください。

    :help author

                                                                faq-1.3
1.3. Vim は Vi と互換性がありますか?

非常に。コマンドラインフラグ"-C"を使えばVimをVi互換モードで起動することが
できます:

    $ vim -C

また、

    $ vim -u NONE

ともできます。'compatible'オプションをセットすればViとの互換を有効化できます:

    :set compatible

さらなる情報については以下を参照してください。

    :help -C
    :help 'compatible'
    :help compatible-default

                                                                faq-1.4
1.4. Vim が Vi よりも向上している点は何ですか?

ここにあるのは短い要約です。以下のリストは Vim が徹底して現代的で、機能がぎゅっ
と詰め込まれたエディタであることを示すものです。今日のエディタの標準的な機能は
実装されており、一般的なパワーユーザーやプログラマ向けの機能にも重点が置かれて
います。

Vi を現代化する機能:

  多段階アンドゥ
     ファイルバッファにおける変更を元に戻す回数を設定することができます。アン
     ドゥされた変更をリドゥすることもできます。
  複数ウィンドウとバッファ
     それぞれのファイルはそれ自身のウィンドウに表示することができます。一つの
     ウィンドウから別のウィンドウへ簡単に移動することができます。それぞれの開
     かれたファイルは Vim のセッション中関連付けられたバッファを保有し、バッ
     ファ間を簡単に移動することができます。
  柔軟な挿入モード
     Vim では挿入モードにある間矢印キーでファイル内を移動することができます。
     <Esc> を押し、移動して、`i' や `a' を押す、といったことはしなくて済みま
     す。
  マクロ
     Vim には、連続してタイプされた文字を記録し、後で何度でも繰り返すことので
     きる機能があります。
  ビジュアルモード
     テキストの一部分をハイライトさせ、その部分にだけ操作を実行することができ
     ます。
  ブロック・オペレータ
     テキストを長方形のブロック状に選択、ハイライトさせ、その部分に対し特定の
     操作を行うことができます。
  オンラインヘルプシステム
     どんな Vim 使用の局面であれ、容易に答えを探すことができます。ヘルプはそれ
     自身のウィンドウに表示されます。
  コマンドライン編集と履歴
     履歴を利用すると、矢印キーで既にタイプされたコマンドを繰り返したり探した
     りできます。コマンドの先頭を、履歴バッファにある別の似たコマンドの先頭に
     マッチさせることができます。コマンドを編集してタイプミスを訂正したり、い
     くつか値を変更することもできます。
  コマンドライン補完
     <Tab> キーを使うと、コマンドやオプション、ファイル名などを必要に応じて補
     うことができます。
  水平スクロール
     長い行は水平にスクロールできます(GUI の有る、無しにかかわらず)。

先進的なユーザー機能:

  テキスト整形
     2 キーストロークで、外部プログラムを使わずに長いテキストを整形できます。
  挿入モードでの単語補完
     Vim は、現在の単語とファイル内の似た単語とをマッチすることにより、タイピ
     ング中に単語補完を行うことができます。
  タグ・ジャンプ
     ウェブ・ブラウザーと同じように、以前編集していた箇所に戻ったり、また元に
     復帰することができます。なので、あなたの頭脳は自由にナビゲート、ではなく
     編集をすることができます。
  自動コマンド
     ファイルを読み書きする時や、他のバッファに移動する時などに自動的に実行さ
     れるコマンドです。
  Viminfo
     起動時に読み込まれるコマンドライン履歴やファイル内のマーク、レジスタを記
     憶しておくことができます。したがって、以前の検索パターンや、マクロなどを、
     新しい Vim セッションで呼び出すことができます。
  マウスサポート
     マウスは xterm や MS-DOS でサポートされています。カーソル位置を設定した
     り、ビジュアル領域を選択したり、レジスタを貼り付けたり、等のことができま
     す。
  グラフィカルユーザーインターフェイス(GUI)
     他の昨今のエディタと同様です。その上、独自のメニューを追加することも非常
     に簡単です。もちろん、コンソール版の Vim も今なおサポートされており、幅広
     く利用されています。
  スクリプト言語
     Vim は強力なスクリプト言語を備えており、新しいコマンドを作ることができま
     す。また、同じことをするのに Perl、Python、TCL、それに Ruby を使うことも
     できます。
  プラグイン
     Vim コマンドによって実装された拡張機能で、起動時に自動的にロードされます。
     例: ファイルエクスプローラー、ネットワーク編集。更に多くのものが
     VimOnline にて常に開発、共有されています。
  多数のプログラミング言語に対応した構文強調
     数百ものプログラミング言語に対応した構文強調があります。他の言語への対応
     を追加することができます。
  拡張正規表現
     機能性がPerlの正規表現に似ている拡張正規表現をサポートしています。

プログラミング効率に関する機能:

  編集―コンパイル―編集のスピードアップ
     Vim 内部からコンパイルを行い、自動的にソースコードのエラーの箇所にジャン
     プすることができます。
  多数のプログラミング言語の字下げ
     C、C++、Java、Perl、XML その他多くの言語で、タイプ中に自動的に字下げが行
     われます。他の言語へのサポートも追加可能です。
  インクルードファイル内の単語を検索
     カーソルの下の単語とのマッチを、現在のファイルとインクルードされるファイ
     ル内で検索することができます。
  先進的なテキストオブジェクト
     ( と ) や、{ と } や、< と > 、また [ と ] の間の全てのテキストに対して、
     また単語、文、段落に対して、一瞬で選択したり、削除やコピーをしたり、字下
     げ、整形、大文字小文字の変換、等々を行うことができます。非常に強力です。
  フォールディング
     テキストのある部分を「フォールド」(折り畳み)してしまうことができます。
     最も良い例は関数の中身の部分です。コードの概観を見渡して、それから詳細を
     見たい関数のフォールドを開くことができます。
  ctags と cscope との統合
     これらの強力なプログラムを使うと、関数の呼び出し部分からその定義部分へジ
     ャンプしたり、他の技術を使ってソースコードを行き来することができます。

さらなる情報については以下を参照してください。

    :help vi-differences

                                                                faq-1.5
1.5. Vim は無料ですか?

Vim はチャリティウェアです。Vim の使用や複製に関しては何ら制限はありませんが、
著者は慈善事業に寄付をするよう奨励しています。その方法を説明するドキュメントが
ディストリビューションの中に含まれています。
さらなる情報については以下を参照してください。

    :help copyright


=============================================================================
                                                                faq-2
SECTION 2 - 情報源

                                                                faq-2.1
2.1. どこに行けば Vim についてもっと学べるでしょうか?

Vimの質問は vim@vim.org メーリングリストに投稿できます。Vimの開発に関する質問
は vim-dev@vim.org メーリングリストに投稿できます。Vim にはそれ自身のための
ニュースグループがありません。しかし comp.editors は投稿するのに適しています。

"VimOnline" は vim のデファクト・ホームページの役割を果たしているウェブ・ペー
ジですが、その主な目的は tip やスクリプトをいたる所から集積することにあります。
ぜひ参加してください。URL は vim.sourceforge.net または vim.sf.net です。

最後に、Vi FAQ を読んでください:


この FAQ の第 5 節に、こちらの FAQ についてのより詳しい情報があります。

    :help mail-list
    :help internet

                                                                faq-2.2
2.2. メーリングリストはありますか?

いくつか存在します:

  名前              説明

  vim-announce      新しいリリースの発表
  vim               一般的な議論
  vim-dev           パッチ、バグ報告、開発議論
  vim-mac           マッキントッシュに関する議論
  vim-fr            フランス語による一般的な議論
  vim-multibyte     マルチバイト関連の開発の問題
  vim-vms           VMS上での開発について

これらのうち、vim と vim-dev だけが一般的な興味を引くものです。vim-announce は
ほとんどの人にとってはリードオンリーですし、そのメッセージは他のリストにも送信
されます。他の 4 つは非常に通信量が少ないです。

購読するには:       <名前>-subscribe@vim.org   にメールを送ってください。
購読を中止するには: <名前>-unsubscribe@vim.org にメールを送ってください。
ヘルプを得るには:   <名前>-help@vim.org        にメールを送ってください。

                                                                faq-2.3
2.3. メーリングリストのアーカイブはありますか?

あります。http://www.yahoogroups.com/list/<名前> を訪ねてみてください。<名前>
の所には次の
    vimannounce, vim, vimdev, vim-fr, vim-mac, vim-multibyte, vim-vms
のどれかが入ります。

もしくは、www.gmane.org に行って GMANE について調べてみてください。これはメー
リングリストに、あたかもニュースグループのような感覚でアクセスすることができる
ものです。履歴をざっと眺めたり、現在のスレッドを気軽に見ることができて便利です。

                                                                faq-2.4
2.4. HTML/PDF/PS形式のVimユーザーマニュアルはどこで手に入りますか?

HTML/PDF/PS形式のVimユーザーマニュアルは以下からダウンロードできます。


                                                                faq-2.5
2.5. ある問題が発生しました。それが私の設定によるものか、Vimそのものの
     問題かはどうすればわかりますか?

まず、その問題があなたの.vimrcや.gvimrc、システムのvimrc、あなたのプラグイン
ファイル、その他あなたの設定ファイルによるものかを調べなければなりません。その
ために

    $ vim -N -u NONE -U NONE

としてください。これはVimを'nocompatible'モードで起動し、あなたの個人的な
.vimrcや.gvimrcファイルを読み込みません。あなたの個人的なプラグインも読み込み
ません。これでVimを起動し、問題の再現を試みてください。もしこれで問題が再現で
きなければ、その問題はあなたの設定ファイルやプラグイン中の設定に関係していま
す。設定ファイル中の問題の場所をつきとめるには、試行錯誤と設定ファイル中の1行
1行をコメントアウトしてみなければなりません。Vimにコマンドライン引数-Vをつけ
て起動するとデバッグ情報が得られ、問題を分析することができます:

    $ vim -V2

-V引数に渡す値を増やせば、さらに詳しいデバッグ情報が得られます。

さらなる情報については以下を参照してください。

    :help -u
    :help -U
    :help -N
    :help -V
    :help 'verbose'
    :help :verbose
    :help set-verbose

                                                                faq-2.6
2.6. どこでバグ報告をすればいいですか?

最初に次のコマンドを使って必要な情報を集めてください:

    :source $VIMRUNTIME/bugreport.vim

そして上のコマンドで得られたテキストをbugs@vim.orgメールアドレスに送ってくださ
い。

Vim 開発のメーリングリスト(上を見てください)は通常のバグについて議論するのにふ
さわしい場所です。あなたの見つけたバグがシンタックスハイライティングやその他の
「付加的な機能」(つまり、直接 vim にプログラムされていないもの)に関するもので
あれば、その機能のメンテナーに報告してみてください。

さらなる情報については以下を参照してください。

    :help bug-reports

                                                                faq-2.7
2.7. FAQ はどこで見つけられますか?

VimOnline (vim.sf.net) で手に入ります。将来的には他の場所も加えられるでしょう。

                                                                faq-2.8
2.8. この FAQ に答えが見つからなかった時、どうすればいいですか?

この FAQ は主に Vim に特有の質問を扱います。ほとんどの Vi クローン向きの情報に
ついては Vi FAQ を読めば見つかるでしょう。これは comp.editors で定期的に投稿さ
れています。下記の場所にもそのコピーがあります。


また、Vim は過去数年間で非常に多くの機能を集積してきたため、よくある質問をここ
で申し分なく記述することは不可能に近い作業です。これを可能にするために、もし良
い質問をお持ちならメンテナーにメールで知らせてください。良い質問とは、自分で答
えを出そうとして(Vim は素晴らしいドキュメントを備えていることを思い出してくださ
い)非常に苦労した質問のことです。

                                                                faq-2.9
2.9. Vimに機能を追加するパッチを持っています。これをどこへ送ればいいですか?

Vim開発者メーリングリストvim-dev@vim.orgにパッチを送ってください。

さらなる情報については以下を参照してください。

    :help vim-dev

                                                                faq-2.10
2.10. Vimのtipを持っていたり新しいsyntax/indent/filetype/compilerプラグインを
      開発したり、新しいスクリプトやカラースキームを開発しました。これをアップ
      ロードできる公開のウェブサイトはありますか?

あります。Vim Onlineウェブサイトにプラグイン・スクリプト、カラースキーム、
tipsなどをアップロードすることができます。そのサイトは
http://vim.sourceforge.netにあります。

=============================================================================
                                                                faq-3
SECTION 3 - 入手

                                                                faq-3.1
3.1. Vim の最新のバージョンは何ですか?

Vim の最新バージョンは2004年6月8日にリリースされた 6.3 です。

Vimのリリース履歴は以下の通りです:

Version 6.3     8th June 2004
Version 6.2     1st June 2003
Version 6.1     24th March 2002
Version 6.0     27th September, 2001
Version 5.8     31st May, 2001
Version 5.7     24th June, 2000
Version 5.6     16th January, 2000
Version 5.5     21st September, 1999
Version 5.4     26th July, 1999
Version 5.3     31st August, 1998
Version 5.2     24th August, 1998
Version 5.1     7th April, 1998
Version 5.0     19th February, 1998
Version 4.6     13th March,1997
Version 4.5     17th October, 1996
Version 4.2     5th July,1996
Version 4.0     21st May, 1996
Version 3.0     16th August, 1994
Version 2.0     21st December, 1993
Version 1.27    23rd April, 1993
Version 1.17    21st April, 1992

                                                                faq-3.2
3.2. どこで Vim の最新版を見つけられますか?

VimOnlineからVimの最新バージョンのソースがダウンロードできます。URLは
http://vim.sourceforge.net/download.php
です。

                                                                faq-3.3
3.3. どのプラットフォーム上で実行できるんですか?

全ての Unix プラットフォーム。
全ての Windows プラットフォーム。
Amiga、Atari、BeOS、DOS、Macintosh、MachTen、OS/2、RiscOS、VMS です。

                                                                faq-3.4
3.4. どこでVimのランタイムファイルの最新バージョンをダウンロードできますか?

Vimランタイムファイル(構文ファイル、ファイル形式別プラグイン、コンパイラプラ
グイン、カラースキーム、ドキュメント、インデントファイル、キーマップ)はVim
ftpサイトのftp://ftp.vim.org/pub/vim/runtimeディレクトリでダウンロードできま
す。

=============================================================================
                                                                faq-4
SECTION 4 - ヘルプ

                                                                faq-4.1
4.1. どうやってヘルプファイルを利用するんですか?

Vim の全ての機能にヘルプがあります。それを利用するには、":h" を使ってください。
そうするとメインのヘルプページを見ることができます。この最初のページで、どう
やって動き回るかの説明があると思います。基本的にはリードオンリーのドキュメント
内を動き回るのと同じ仕方でヘルプ内を移動します。特定のテーマへジャンプするには
タグを使うことができます。これは二通りの方法で行えます:

   * コマンドやオプションの上で "<Ctrl-]>" コマンドを使う。これはタグがキー
     ワードである場合にのみ有効です。"<Ctrl-LeftMouse>" や "g<LeftMouse>" も
     "<Ctrl-]>" と同じように機能します。
   * ":ta subject" コマンドを使う。これはどんな文字であっても利用できます。

以前のヘルプファイルの場所へ戻るには "<Ctrl-T>" を使ってください。ヘルプを閉じ
るには ":q" を使ってください。

ヘルプページのある特定のテーマへジャンプしたければ ":h {subject}" を使ってくだ
さい。何を探せば良いか分からなければ、 ":h index" で全ての利用可能なテーマの一
覧を得ることができます。標準の検索語を使って欲しい情報を見つけてください。
":help"コマンドは":h"と短縮することができます。

さらなる情報については以下を参照してください。

    :help online-help

                                                                faq-4.2
4.2. どうやってVimヘルプファイル中のキーワードを探すんですか?

ヘルプキーワードをタイプした後にCTRL-Dを押すとそのパターンを含む全てのヘルプ
キーワードのリストが得られます。*, \+などのメタ文字を使ってヘルプの検索パター
ンを指定することもできます:

    :help init<C-D>
    :help str*()<C-D>
    :help '*indent<C-D>

ヘルプキーワードの一部をタイプした後にTabキーを押すと、マッチするキーワードに
展開することができます。Tabキーを押しつづけると他のマッチするキーワードに変わっ
ていきます。

ヘルプウィンドウでは":tag"コマンドを使ってキーワードを検索することができます。
例えば、

    :tselect /window

このコマンドはテキスト"window"を含むヘルプキーワード全てをリスト表示します。そ
のリストの中から1つを選んでそこへジャンプすることができます。

":helpgrep"コマンドを使って全てのヘルプファイル中から与えられたテキストを検索
することができます。QuickFixウィンドウが開き、全てのマッチする行が表示されま
す。

さらなる情報については以下を参照してください。

    :help c_CTRL-D
    :help c_<Tab>
    :help :tselect
    :help :help
    :help :helpgrep

                                                                faq-4.3
4.3. エラーメッセージE123が出ました。何がまずいのでしょうか?

以下を行うと、エラーとエラーメッセージについてより詳しい情報が得られます:

    :help E123

さらなる情報については以下を参照してください。

    :help error-messages

                                                                faq-4.4
4.4. Vimの様々なモードについては何を読めばいいですか?

Vimにおけるモードの違いについては、以下を読めば情報を得られます。

    :help vim-modes

                                                                faq-4.5
4.5. 新しいVimヘルプファイルを追加した後、どうすればVimのヘルプタグファイルを
     生成することができますか?

":helptags"コマンドを使えばVimのヘルプタグファイルを再生成することができます。
例えば:

    :cd $VIMRUNTIME/doc
    :helptags .

さらなる情報については以下を参照してください。

    :help :helptags
    :help add-local-help

                                                                faq-4.6
4.6. 圧縮したヘルプファイルを使うことはできますか?

できます。ヘルプファイルを圧縮し、それをVimで表示することもできます。これを行
うとヘルプファイルにアクセスするのが少し遅くなり、"gzip"ユーティリティが必要に
なります。圧縮したVimヘルプファイルを使うには、以下のステップを行ってください。


- "gzip doc/*.txt"として全てのヘルプファイルを圧縮する。

- "doc/tags"ファイルを編集し、以下のコマンドを実行して".txt"を".txt.gz"に変更
  する。
        :%s=\(\t.*\.txt\)\t=\1.gz\t=

- 次の行をあなたのvimrcに追加する:
        set helpfile={dirname}/help.txt.gz

{dirname}はヘルプファイルがあるディレクトリです。標準Vimディストリビューション
に同梱のgzip.vimプラグインがファイルの展開をしてくれます。他のVimファイルが圧
縮された"doc"ディレクトリと別な場所にある場合は、$VIMRUNTIMEが他のVimファイル
のある場所に設定されていなければなりません。

さらなる情報については以下を参照してください。

    :help gzip-helpfile
    :help 'helpfile'
    :help gzip
    :help $VIMRUNTIME


=============================================================================
                                                                faq-5
SECTION 5 - ファイルの編集

                                                                faq-5.1
5.1. ファイルを編集用に読み込むには?

ファイルを編集用に読み込むにはいくつかの方法があります。もっとも単純な方法は
":e" (:edit)コマンドを使うことです:

    :e <filename>

":n" (:next)コマンドを使ってファイルをVimに読み込ませることもできます:

    :n <filename(s)>

":args"コマンドを使ってファイルをVimに読み込ませることもできます:

    :args <filename(s)>

さらなる情報については以下を参照してください。

    :help usr_07
    :help edit-files
    :help :edit
    :help :next_f
    :help :args_f

                                                                faq-5.2
5.2. 現在のファイルを別な名前で保存(save as)して新しいファイルを編集するには?

":saveas"コマンドを使えば現在のファイルを別な名前で保存することができます:

    :saveas <newfilename>

別な方法としては、以下のコマンドを使うこともできます:

    :w <newfilename>
    :edit #

":file"コマンドと":w"コマンドを使うこともできます:

    :file <newfilename>
    :w

さらなる情報については以下を参照してください。

    :help 07.7
    :help :saveas
    :help :file_f
    :help :w

                                                                faq-5.3
5.3. カレントディレクトリを現在のファイルのディレクトリにするには?

次のコマンドでカレントディレクトリを現在のファイルのディレクトリにできます:

    :cd %:p:h

自動的にカレントディレクトリを現在のファイルのディレクトリにするには、次の
autocmdを使います:

    :autocmd BufEnter * cd %:p:h

さらなる情報については以下を参照してください。

    :help :cd
    :help :lcd
    :help filename-modifiers
    :help autocommand

                                                                faq-5.4
5.4. ファイルの末尾に改行文字(EOL)をつけずにファイルを書き込むには?

'eol'オプションをオフにして'binary'オプションをオンにすればファイルの末尾に
EOLをつけずにファイルを書き込むことができます:

    :set binary
    :set noeol
    :w

さらなる情報については以下を参照してください。

    :help 'endofline'
    :help 'binary'
    :help 23.4

                                                                faq-5.5
5.5. ファイルを最後に編集した場所から開くようにするには?

Vimは各バッファに対して最後に編集した場所のカーソル位置を'"'レジスタに保存しま
す。次のautocmdを.vimrcまたは.gvimrcに書けば、ファイルを最後に編集した場所から
開くようにできます:

    au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") |
                         \ exe "normal g'\"" | endif

さらなる情報については以下を参照してください。

    :help '"
    :help last-position-jump

                                                                faq-5.6
5.6. Vimでファイルを編集中にそのファイルが他のアプリケーションによって変更され
     たとき、Vimは変更が検出されるたびに警告ウィンドウ(確認ダイアログのような)
     を開きます。この警告を無効にするには?

'autoread'オプションをセットすると、Vimの外部でファイルが変更されたとき、自動
的に読み直すようにできます:

    :set autoread

次のautocommandを使うこともできます:

    autocmd FileChangedShell *
          \ echohl WarningMsg |
          \ echo "File has been changed outside of vim." |
          \ echohl None

さらなる情報については以下を参照してください。

    :help 'autoread'
    :help FileChangedShell
    :help timestamp
    :help :checktime

                                                                faq-5.7
5.7. カーソル下のファイル名のファイルを開くには?

gfコマンドでカーソル下のファイル名のファイルを開くことができます。CTRL-W fコマ
ンドでそのファイルを新しいウィンドウで開くことができます。

さらなる情報については以下を参照してください。

    :help gf
    :help CTRL-W_f
    :help 'isfname'
    :help 'path'
    :help 'suffixesadd'
    :help 'includeexpr'

                                                                faq-5.8
5.8. 現在のファイルを再読み込みするには?

ファイル名を指定せずに":edit"コマンドを行えば、現在のファイルを再読み込みする
ことができます。ファイルに変更をしてある場合は、":edit!"とすれば強制的に現在の
ファイルを再読み込みすることができます(変更は失われます)。

さらなる情報については以下を参照してください。

    :help :edit
    :help :edit!
    :help 'confirm'

                                                                faq-5.9
5.9. ファイルを定期的に自動保存するには?

Vimにはファイルを定期的に自動保存する機能はありません。

さらなる情報については以下を参照してください。

    :help 'updatetime'
    :help CursorHold
    :help swap-file

                                                                faq-5.10
5.10 ファイルを読み取り専用モードで開くには?

ファイルを読み取り専用モードで開くには":view"コマンドを使います:

    :view <filename>

このコマンドは開いたバッファに'readonly'オプションをセットします。また、コマン
ドラインオプション"-R"をつければファイルを読み取り専用モードで開くことができま
す:

    $ vim -R <filename>

また、コマンドラインからシンボリックリンク実行ファイル"view"を使ってもファイル
を読み取り専用モードで開くことができます:

    $ view <filename>

さらなる情報については以下を参照してください。

    :help 07.6
    :help 'readonly'
    :help 'modifiable'
    :help :view
    :help :sview
    :help view
    :help -R
    :help -M


=============================================================================
                                                                faq-6
SECTION 6 - 複数のファイルを編集する

                                                                faq-6.1
6.1. Vim内で同時に複数のファイルを開くには?

Vim内で同時に複数のファイルを開くにはいくつかの方法があります。":next"コマンド
を使うとファイルのグループを指定することができます:

    :next f1.txt f2.txt
    :next *.c

:argsコマンドを使うとファイルのグループを引数に指定することができます:

    :args f1.txt f2.txt
    :args *.c

ファイルを読み込んだら、":next"と":prev"コマンドでファイルを切り替えることがで
きます。

さらなる情報については以下を参照してください。

    :help 07.2
    :help :next
    :help :args_f
    :help argument-list

                                                                faq-6.2
6.2. 複数のファイル・バッファを切り替えるには?

複数のファイルを切り替えるにはいくつかの方法があります。":buffer"コマンドを使
うと複数のファイルを切り替えることができます。例えば、

    :buffer file1
    :buffer file2

CTRL-^を使ってバッファを切り替えることもできます。キーの前にカウントを指定する
とその番号のバッファを編集することができます。カウントを指定しないでCTRL-^を押
すと代替バッファを編集します。

":e #"コマンドでも特定のバッファを編集することができます:

    :e #5

さらなる情報については以下を参照してください。

    :help edit-files
    :help :buffer
    :help CTRL-^
    :help alternate-file
    :help 22.4
    :help 07.3

                                                                faq-6.3
6.3. それぞれのファイルを別ウィンドウで開くには?

コマンドライン引数-oと-Oを指定すると複数のファイルを水平または垂直に分割した
ウィンドウで開くことができます。例えば:

    $ vim -o3 f1.txt f2.txt f3.txt

上のコマンドはファイルf1.txt、f2.txt、f3.txtを3つに水平に分割したウィンドウで
開きます。

    $ vim -O3 f1.txt f2.txt f3.txt

上のコマンドはファイルf1.txt、f2.txt、f3.txtを3つに垂直に分割したウィンドウで
開きます。

さらなる情報については以下を参照してください。 

    :help -o
    :help -O
    :help startup-options

                                                                faq-6.4
6.4. 「ワークセット」や「プロジェクト」のように自動的に複数のファイルを同時に
     読み込ませるようにするには?

自動的に複数のファイルを読み込ませるようにするには":mksesion"と":mkview"を使い
ます。

":mksession"コマンドは現在編集中のセッションを復元するVim scriptを生成します。
このmksessionコマンドで作られたファイルは":source"コマンドで読み込むことができ
ます。

":mkview"コマンドは現在のウィンドウの中身を復元するVim scriptを生成します。
現在のファイルのviewを読み込むには":loadview"コマンドを使います。

さらなる情報については以下を参照してください。

    :help 21.4
    :help 21.5
    :help views-sessions
    :help 'sessionoptions'
    :help :mksession
    :help :source
    :help v:this_session
    :help :mkview
    :help :loadview
    :help 'viewdir'
    :help buffers

                                                                faq-6.5
6.5. Neditやemacsのように単一のVimインスタンスで複数のトップレベルウィンドウを
     開くことはできますか?

できません。単一のVimインスタンスで複数のトップレベルウィンドウを開くことは現
在は不可能です。この機能はtodoリストの中にあります。

                                                                faq-6.6
6.6. Vim内でディレクトリをブラウズするには?

標準Vimディストリビューションに同梱のexplorer.vimプラグインを使えばVim内でディ
レクトリをブラウズすることができます。以下のコマンドのうちどれかでファイルエク
スプローラーを起動することができます:

    :e <directory>
    :Explore
    :SExplore

ファイルエクスプローラーではディレクトリをブラウズし、ファイルをリネーム、
削除、編集することができます。

さらなる情報については以下を参照してください。

    :help file-explorer
    :help 22.1

                                                                faq-6.7
6.7. ftp/scp/rcp/httpでネットワークごしにファイルを編集するには?

標準Vimディストリビューションに同梱のnetrw.vimを使えばftp/scp/rcp/httpでネット
ワークごしにファイルを編集することができます。このプラグインを使うと、Vimは
ftp/scp/rcp/httpごしのファイルを透過的に読み込み、保存します。例えば、ftpごし
にファイルを編集するには、以下のコマンドを使います:

    $ vim ftp://machine/path

さらなる情報については以下を参照してください。

    :help netrw.vim


=============================================================================
                                                                faq-7
SECTION 7 - バックアップ

                                                                faq-7.1
7.1. ファイルを保存したとき元のファイル名の末尾に"~"という文字をつけたファイル
     が作られます。このファイルを作成するのを止めさせるには?(または)バック
     アップ機能を無効にするには?

あなたは'backup'オプションをセットしているので、Vimは元のファイルを保存すると
きにバックアップを作ります。このバックアップファイルを作るのを止めさせるには、
このオプションをクリアします:

    :set nobackup

Note デフォルトではこのオプションはオフにされています。初期設定ファイルのどこ
かで明示的に'backup'オプションが有効化されています。'writebackup'オプションも
オフにするとよいかもしれません:

    :set nowritebackup

さらなる情報については以下を参照してください。

    :help 07.4
    :help backup-table
    :help 'backup'
    :help 'writebackup'
    :help 'backupskip'
    :help 'backupdir'
    :help 'backupext'
    :help 'backupcopy'
    :help backup

                                                                faq-7.2
7.2. 全てのバックアップファイルを特定のディレクトリに保存するように設定するに
     は?
'backupdir'オプションを使えば全てのバックアップファイルを特定のディレクトリに
保存するように設定できます。例えば、全てのバックアップファイルを~/backupディレ
クトリに保存するには、次のコマンドを使います:

    :set backupdir=~/backup

さらなる情報については以下を参照してください。

    :help 07.4
    :help 'backupdir'
    :help backup

                                                                faq-7.3
7.3. ファイルを保存するとファイルパーミッションが変更されます。ファイルパー
     ミッションを変更せずにファイルを保存するよう設定するには?

これは'backupcopy''no'または'auto'に設定されていると起こりえます。Note この
オプションのデフォルト値はほとんどの場合に正しく動作するように設定されていま
す。もしそのデフォルト値が正しく機能しないなら、'backupcopy'オプションを'yes'
にすればファイル保存時にパーミッションをそのままにすることができます:

    :set backupcopy=yes

これはファイルを上書きするときは必ずバックアップを作るように設定したときだけ適
用されます。デフォルトではVimはバックアップファイルを作りません。

さらなる情報については以下を参照してください。

    :help 'backupcopy'
    :help backup
    :help 'backup'
    :help 'writebackup'


=============================================================================
                                                                faq-8
SECTION 8 - バッファ

                                                                faq-8.1
8.1. バッファに対して変更を加えました。変更されたバッファを保存せずに、かつ変
     更を失うことなく他のバッファを編集するには?

'hidden'オプションをセットすれば現在のファイルに対する変更を失うことなく他の
ファイルを編集することができます:

    :set hidden

'hidden'オプションをセットすると、バッファに対する変更履歴(アンドゥ履歴)も保
存されます。そうでないと、ファイルを切り替えたときにアンドゥ履歴が失われてしま
うでしょう。

さらなる情報については以下を参照してください。

    :help 'hidden'
    :help hidden-quit
    :help :hide

                                                                faq-8.2
8.2. バッファを切り替えるときに自動的に保存するよう設定するには?

'autowrite'オプションをセットすると、他のバッファに切り替えるとき変更された
バッファを自動保存します:

    :set autowrite

さらなる情報については以下を参照してください。

    :help 'autowrite'
    :help 'autowriteall'
    :help 'hidden'

                                                                faq-8.3
8.3. カレントウィンドウのバッファを空バッファにするには?

":enew"コマンドを使うとカレントウィンドウのバッファに換わって空バッファを読み
込みます。

さらなる情報については以下を参照してください。

    :help :enew

                                                                faq-8.4
8.4. バッファ番号を指定してバッファを読み込むショートカットキーはありますか?

CTRL-^コマンドを使うとバッファ番号を指定してバッファを読み込むことができます。
例えばバッファ番号5を読み込むには5 CTRL-^とします。

さらなる情報については以下を参照してください。

    :help CTRL-^

                                                                faq-8.5
8.5. 読み込んでいるバッファをそれぞれ別のウィンドウで開くには?

":ball"または":sball"コマンドでバッファリスト中の全てのバッファを開くことがで
きます:

    :ball

さらなる情報については以下を参照してください。

    :help :ball

                                                                faq-8.6
8.6. Vimを終了することなくバッファを閉じる(削除する)には?

":bdelete"コマンドでVimを終了することなくバッファを削除できます。
例:

    :bdelete file1

さらなる情報については以下を参照してください。

    :help :bdelete
    :help :bwipeout

                                                                faq-8.7

8.7. :e filenameでいくつかのファイルを開きました。Vimを終了することなくそのバッ
     ファのうちの1つを閉じるには?

":bdelete <buffername>"コマンドでバッファを閉じることができます。

さらなる情報については以下を参照してください。

    :help :bdelelete
    :help :bunload
    :help :bwipeout

                                                                faq-8.8
8.8. ":%bd"コマンドで全バッファを削除しようとしても、全てのバッファが削除され
     ません。なぜ?

":%bd"コマンドにおいて範囲'%'はカレントバッファの開始行と終端行で置き換えられ
ます。範囲として'%'を使わず、番号を指定しなければなりません。例えば、
":1,9999bd"とすれば全バッファを削除できます。

さらなる情報については以下を参照してください。

    :help :bd

                                                                faq-8.9
8.9. カレントバッファ/ファイルのバッファ番号を表示するには?

2<CTRL-G>コマンドでカレントバッファ/ファイルのバッファ番号を表示できます。
CTRL-Gの前にカウントを指定することに注意してください。カウントが1より大きい場
合、バッファ番号が表示されます。

カレントバッファを表示するのに以下のコマンドを使うこともできます:

    :echo bufnr("%")

また、'statusline'オプションにフィールド"%n"を含めるとステータスラインにバッ
ファ番号が表示されます。

さらなる情報については以下を参照してください。

    :help CTRL-G
    :help bufnr()
    :help :echo
    :help 'statusline'

                                                                faq-8.10
8.10. ウィンドウを閉じることなくバッファを削除するには?

次のコマンドで現在のバッファを削除し、次のバッファを開くことができます:

    :bnext | bdelete #

さらなる情報については以下を参照してください。

    :help :bnext
    :help :bdelete
    :help :buffers

                                                                faq-8.11
8.11. Tabキーで全バッファを巡回するようにマップするには?

次の2つのマップコマンドを使うと、CTRL-Tabで次のバッファを開き、CTRL-SHIFT-Tab
で前のバッファを開くようにマップできます:

    :nnoremap <C-Tab> :bnext<CR>
    :nnoremap <S-C-Tab> :bprevious<CR>

さらなる情報については以下を参照してください。

    :help :bnext
    :help :previous


=============================================================================
                                                                faq-9
SECTION 9 - ウィンドウ

                                                                faq-9.1
9.1. ウィンドウとバッファの違いは?

バッファとは編集用にメモリに読み込まれたファイルです。元のファイルはあなたが
バッファをファイルに書き込むまでは変更されないままです。ウィンドウとはバッファ
を表示する領域です。1つのバッファを複数のウィンドウで表示することもできます
し、異なるバッファを複数のウィンドウで表示することもできます。

さらなる情報については以下を参照してください。

    :help usr_08.txt
    :help 22.4
    :help windows-intro
    :help Q_wi

                                                                faq-9.2
9.2. ウィンドウの幅を広げるには?

以下のコマンドのどれか1つでウィンドウの幅を広げることができます:

    :vert resize +N
    :vert resize -N
    :vert resize N

CTRL-W <、CTRL-W >、CTRL-W | コマンドを使うこともできます。

さらなる情報については以下を参照してください。

    :help vertical-resize
    :help CTRL-W_>
    :help CTRL-W_<
    :help window-resize

                                                                faq-9.3
9.3. ウィンドウをズームイン・ズームアウトするには?

ウィンドウをズームするには(カレントウィンドウ以外の全ウィンドウを閉じるには)
"CTRL-W o" またはexコマンド ":only" を使います。

"CTRL-W _" またはexコマンド ":resize" を使うと、他のウィンドウを閉じずに可能な
限りウィンドウの高さを広げることができます。

"CTRL-W |" またはexコマンド ":vertical resize" を使うと、他のウィンドウを閉じ
ずに可能な限りウィンドウの幅を広げることができます。

"CTRL-W =" コマンドを使うと全ウィンドウの高さと幅を等しくすることができます。

以下のオプションをセットすると、上記のコマンドを行うのと同じ結果が得られます。

方法1:
'winminheight'オプションを0にする:

    :set winminheight=0

デフォルトではこのオプションは1に設定されています。
このオプションはアクティブでない(カレントウィンドウでない)ウィンドウの最小の
高さをコントロールします。'winminheight'が0に設定されていると、アクティブでな
いウィンドウにはステータスラインだけが表示されます。

方法2:
'noequalalways'オプションをセットし、'winheight'オプションを大きな値(99999な
ど)に設定する:

    :set noequalalways
    :set winheight=99999

こうするとアクティブウィンドウが常に最大サイズで開かれます。他のウィンドウは表
示されますが、ステータスラインのように小さく縮みます。

以上の方法のどれにおいても、いったんウィンドウをズームしてしまうと、ウィンドウ
配置を復元することはできません。ウィンドウ配置を復元したいならばZoomWinプラグ
インを使うことができます。このプラグインはVim onlineからダウンロードできます。

http://vim.sourceforge.net/scripts/script.php?script_id=508

さらなる情報については以下を参照してください。

    :help CTRL-W_o
    :help window-resize
    :help 'winminheight'
    :help 'equalalways'
    :help 'winheight'
    :help 08.3

                                                                faq-9.4
9.4. 全バッファまたは全ウィンドウ、引数リスト中の全ファイルに対してexコマンド
     を実行するには?

":bufdo"コマンドを使うと全バッファに対してexコマンドを実行することができます。
":windo"コマンドを使うと全ウィンドウに対してexコマンドを実行することができま
す。":argdo"コマンドを使うと引数リスト中の全ファイルに対してexコマンドを実行す
ることができます。

さらなる情報については以下を参照してください。

    :help :windo
    :help :bufdo
    :help :argdo
    :help 26.3


=============================================================================
                                                                faq-10
SECTION 10 - モーション

                                                                faq-10.1
10.1. ファイルの先頭や末尾に移動するには?

'G'でファイルの最終行へ移動でき、'gg'で先頭行へ移動できます。

さらなる情報については以下を参照してください。

    :help G
    :help gg

                                                                faq-10.2
10.2. 挿入モードで<Esc>キーを押してノーマルモードに移行すると、カーソルが1文字
      左へ移動します(カーソルが行の最初の文字の上にあるときを除いて)。この動作
      を変更し、カーソルがその桁の上に残るようにできますか?

この動作を変更することはできません。カーソルは「常に」有効な文字の上に置かれま
す(仮想編集モードを有効にしていない限り)。そのため、行の末尾にテキストを追加し
ていてノーマルモードに戻るときには、カーソルは必ず最後に入力された文字の上に戻
らねばなりません。一貫性のためにカーソルはどこにあっても1文字戻るようになって
います。たとえ行の真ん中であっても。

挿入モードでCTRL-Oを使うと、カーソル位置を動かすことなくexコマンドを1つ実行し
て挿入モードに戻ることができます。

さらなる情報については以下を参照してください。

    :help 'virtual'
    :help i_CTRL-O

                                                                faq-10.3
10.3. <Page Up>、<Page Down>などのキーを押してスクロールしたときカーソル位置の
      桁を保つように設定することはできますか?

'startofline'オプションをオフにするとテキストをスクロールしたときカーソル位置
の桁を保つことができます:

    :set nostartofline

さらなる情報については以下を参照してください。

    :help 'startofline'

                                                                faq-10.4
10.4. ファイル中のある行の長さが画面の幅を越えており、折り返されています。ここ
      でj, kキーを使うと画面上の次行(物理行)でなくファイルの次行(論理行)に
      移動します。画面上の次行に移動するには?

gjとgkコマンドを使うと画面上の次行・前行に移動できます。jとkはファイルの次行・
前行に移動します。'wrap'オプションをオフにすると行の折り返しをやめさせることが
できます:

    :set nowrap

さらなる情報については以下を参照してください。

    :help gj
    :help gk
    :help 'wrap'

以下のマッピングを使ってもよいでしょう:

    :map <Up> gk
    :imap <Up> <C-o>gk
    :map <Down> gj
    :imap <Down> <C-o>gj

                                                                faq-10.5
10.5. Vimにおける文、段落、セクションの定義は?

文(sentence)は後ろに行末・(1個または2個の)スペース・タブが続く'.'、'!'、'?'
で終わると定義されます。文の終端を構成する文字とスペースの個数は'joinspaces'
'cpoptions'オプションによって決まります。

段落(paragraph)は空行の後から始まります。また、'paragraph'オプション中の文字の
ペアによって指定される段落マクロも段落の始まりとみなされます。

セクションは1桁目のフォームフィード(<C-L>)から始まります。また、'sections'オプ
ション中の文字のペアによって指定される段落マクロも段落の始まりとみなされます。

さらなる情報については以下を参照してください。

    :help sentence
    :help 'joinspaces'
    :help 'cpoptions' | /^\s*j\>
    :help paragraph
    :help section
    :help word

                                                                faq-10.6
10.6. 文、段落、セクションの先頭と末尾に移動するには?

以下のコマンドを使うと文、段落、セクションの先頭と末尾に移動することができます
:

      motion  位置        どこの
      (       先頭        現在の文
      )       末尾        現在の文
      {       先頭        現在の段落
      }       末尾        現在の段落
      []      末尾        前のセクション
      [[      先頭        現在のセクション
      ][      末尾        現在のセクション
      ]]      先頭        次のセクション

これらの移動コマンドの前に番号を指定すると、移動を前方(または後方)に拡大する
ことができます。

さらなる情報については以下を参照してください。

    :help object-motions

                                                                faq-10.7
10.7. 画面の右端を越えて続いている行があります。右側にスクロールして画面外に出
      ているテキストを表示するには?

以下のコマンドのどれか1つで画面を左右にスクロールすることができます:

    zl - 左へスクロール
    zh - 右へスクロール
    zL - 左へ画面半分の幅スクロール
    zH - 右へ画面半分の幅スクロール
    zs - カーソル位置が画面左端に来るようにスクロール
    ze - カーソル位置が画面右端に来るようにスクロール

g0コマンドでカーソルを画面上最初の文字へ、g$コマンドで画面上最後の文字へ、画面
をスクロールせずに移動することができます。

さらなる情報については以下を参照してください。

    :help scroll-horizontal

                                                                faq-10.8
10.8. 2個以上のバッファを同時にスクロールさせるには?

それぞれのバッファに対して"scrollbind"オプションをセットすると、それらを同時に
スクロールできるようになります。

さらなる情報については以下を参照してください。

    :help 'scrollbind'
    :help scroll-binding
    :help 'scrollopt'

                                                                faq-10.9
10.9. 矢印キーを使うとモードが変わり、バッファに変な文字が挿入され、カーソルが
      適切に移動しません。どうなっているのですか?

そうなるのには2つの事が考えられます。遅い回線上でVimを使っているか、キーボード
が生成するキーシーケンスをVimが理解していないかです。

もし遅い回線(2400bpsモデムのような)上で使用しているなら、'timeout'
'ttimeout'オプションを設定してみてください。これらのオプションを'timeoutlen'
'ttimeoutlen'オプションと組み合わせれば問題が解決するかもしれません。

もしあなたのターミナルが送るキーコードをVimが理解しなければ、そのコマンドは正
しく動きません。この場合、最良の選択肢はそのキーシーケンスをカーソル移動コマ
ンドにマップして、そのマッピングをファイルに保存しておくことです。そしてその
ターミナル上で使うときは常にそのファイルを":source"します。

さらなる情報については以下を参照してください。

    :help 'timeout'
    :help 'ttimeout'
    :help 'timeoutlen'
    :help 'ttimeoutlen'
    :help :map
    :help vt100-cursor-keys

                                                                faq-10.10
10.10. カーソルが行頭にあるとき左矢印キーを押すと前行の行末に移動するようにす
       るには?

カーソルが行頭にあるとき左矢印キーを押すと前行の行末に移動するようにするには
'whichwrap'オプションに'<'フラグを加えます:

    :set whichwrap+=<

同様に、カーソルが行末にあるとき右矢印キーを押すと次行の行頭に移動するようにす
るには'whichwrap'オプションに'>'フラグを加えます:

    :set whichwrap+=>

これらはノーマルモードとビジュアルモードでのみ機能します。挿入モードと置換モー
ドでも使えるようにするには、それぞれ '[' と ']' フラグを加えます。

さらなる情報については以下を参照してください。

    :help 'whichwrap'
    :help 05.7

                                                                faq-10.11
10.11. 常に挿入モードに留まるようにするには?(モードレスな編集をするには?)

常に挿入モードに留まるようにするには'insertmode'オプションを使います:


    :set insertmode

このオプションをセットするとVimをモードレスエディタとして使えるようになります。
<Esc>キーを押してもノーマルモードに移行しません。ノーマルモードコマンドを1つ
だけ実行するにはCTRL-Oを押してからノーマルモードコマンドをタイプします。1つ以
上のノーマルモードコマンドを実行するにはCTRL-Lに続けてそのコマンドをタイプしま
す。挿入モードに戻るには<Esc>キーを押します。このオプションを無効にするには
'insertmode'オプションをオフにします:

    :set noinsertmode

"evim"コマンドまたは"vim -y"を使ってもVimをモードレスエディタとして使用できま
す。

さらなる情報については以下を参照してください。

    :help 'insertmode'
    :help i_CTRL-O
    :help i_CTRL-L
    :help evim
    :help evim-keys

                                                                faq-10.12
10.12. テキストをスクロールするとき、前後の行を表示するには?

'scrolloff'オプションをセットすると画面に表示されるカーソルの前後の行の最小数
を設定できます。

    :set scrolloff=10

さらなる情報については以下を参照してください。

    :help 'scrolloff'
    :help 'sidescrolloff'

                                                                faq-10.13
10.13. 以前のカーソル位置に戻るには?

''または``コマンドを使うと最後のジャンプの前にいた位置へカーソルを戻すことがで
きます。CTRL-Oでも以前のカーソル位置に戻ることができ、CTRL-Iでジャンプリスト中
のより新しい位置へ移動できます。

さらなる情報については以下を参照してください。

    :help 03.10
    :help mark-motions
    :help jump-motions


=============================================================================
                                                                faq-11
SECTION 11 - テキストを検索する

                                                                faq-11.1
11.1. テキストを検索した後、マッチしたテキストが全て強調されます。この強調を一
      時的/永続的に無効にするには?

最後に検索したパターンにマッチする文字列を強調するかは'hlsearch'オプションで決
まります。デフォルトではこのオプションは無効になっています。このオプションがシ
ステムレベルのvimrcファイルでセットされているならば、次のコマンドを使ってこの
強調を無効にできます:

    :set nohlsearch

一時的にこの強調を消すには次のようにします:

    :nohlsearch

また、カレントファイルに存在しないパターンを検索することによってもこの強調をク
リアすることができます(例えば'asdf'を検索する)。

さらなる情報については以下を参照してください。

    :help 'hlsearch'
    :help :nohlsearch

                                                                faq-11.2
11.2. 検索パターンにキャリッジリターン文字を含めるには?

'\r'を使うか<CTRL-V><CTRL-M>を使えばパターンにキャリッジリターンを含めることが
できます。Vim script中では'\r'を使う方がよいでしょう。

さらなる情報については以下を参照してください。

    :help sub-replace-special

                                                                faq-11.3
11.3. 文字^Mを検索するには?

検索コマンド中にCTRL-Vを押して次にCTRL-Mを押せば^M文字を挿入することができま
す。


    /^V^M

"\r"文字を使うこともできます。Vim script中では"\r"を使う方がよいでしょう。

さらなる情報については以下を参照してください。

    :help c_CTRL-V
    :help using_CTRL-V
    :help /\r

                                                                faq-11.4
11.4. '~R', '~S'などと表示される文字を検索・置換するには?

'ga'で特殊文字のASCIIコードを表示することができます。例えばASCIIコードが142で
あるなら、次のコマンドでその特殊文字を検索することができます:

    /^V142

ここで^VはCTRL-Vを押して挿入します。

さらなる情報については以下を参照してください。

    :help ga
    :help using_CTRL_V
    :help 24.8

                                                                faq-11.5
11.5. ファイル中の印字不能文字を全て強調するには?

次のコマンドと検索パターンを使えばファイル中の印字不能文字を全て強調することが
できます:

    :set hlsearch
    /\(\p\|$\)\@!.

さらなる情報については以下を参照してください。

    :help /\p
    :help /bar
    :help /$
    :help /\(
    :help /\@!
    :help 'hlsearch'

                                                                faq-11.6
11.6. 単語に完全に一致するテキストを検索するには?

アトム\<と\>を使えば単語に完全に一致するテキストを検索できます。例えば:

    /\<myword\>

アトム\<は単語の先頭にマッチし、アトム\>は単語の末尾にマッチします。

さらなる情報については以下を参照してください。

    :help /\<
    :help /\>

                                                                faq-11.7
11.7. カーソル下の単語を検索するには?

*キーを押せばカーソル下の単語を前方に検索することができます。後方に検索するに
は#キーを押します。これらのコマンドを使うとキーワードに完全に一致するものだけ
が検索されます。

さらなる情報については以下を参照してください。

    :help star
    :help #
    :help g*
    :help g#
    :help 03.8
    :help search-commands

                                                                faq-11.8
11.8. 大文字・小文字を区別せず検索するには?

常に大文字・小文字を区別しないようにするには'ignorecase'をセットします:

    :set ignorecase

あるパターンを検索するときだけ区別しないようにするには、特別なディレクティブ
\cを使います:

    /\c<pattern>

さらなる情報については以下を参照してください。

    :help 'ignorecase'
    :help /ignorecase
    :help /\c

                                                                faq-11.9
11.9. 2回続けて現れる単語を検索するには?

次の検索コマンドのどれかを使えば、2回続けて現れる単語を探すことができます:

     /\(\<\w\+\)\_s\+\1\>
     /\(\<\k\+\)\_s\+\1\>

主な違いは'\w'と'\k'の使用です。後者は'iskeyword'に基づき、アクセントつきの文
字や他の言語固有の文字を含むこともできます。

さらなる情報については以下を参照してください。

    :help /\1
    :help /\(
    :help /\)
    :help /\<
    :help /\>
    :help /\w
    :help /\k
    :help /\+
    :help /\_x
    :help 'iskeyword'

                                                                faq-11.10
11.10. ある単語がバッファ中に何回現れるか数えるには?

以下の一連のコマンドを行うと、ある単語がバッファ中に何回現れるかを数えることが
できます:

    :let cnt=0
    :g/\<your_word\>/let cnt=cnt+1
    :echo cnt

上のコマンドは単語を含む行の数を数えるだけです。以下のコマンドを使うこともでき
ます:

    :%s/\<word\>/&/g

{訳注: :%s/\<word\>//ng というようにnフラグをつけると、実際には置換を行わず、
       何箇所置換されるかを知ることができます。}

ファイル中のアルファベットだけからなる単語を数えるにはこうします。

    :%s/\a\+/&/g

非空白文字だけからなる単語を数えるにはこうします。

    :%s/\S\+/&/g

さらなる情報については以下を参照してください。

    :help count-items
    :help word-count
    :help v_g_CTRL-G
    :help 12.5

                                                                faq-11.11
11.11. 検索時にカーソルをマッチした単語の末尾に移動させるには?

検索コマンドにオフセット'e'を指定すると、カーソルをマッチした単語の末尾へ移動
させることができます。例

    /mypattern/e

さらなる情報については以下を参照してください。

    :help search-offset
    :help /

                                                                faq-11.12
11.12. 空行を検索するには?

次のコマンドを使うと空行を検索することができます:

    /^$

    または

    /^\s*$

さらなる情報については以下を参照してください。

    :help /^
    :help /$
    :help /\s
    :help /*
    :help search-commands

                                                                faq-11.13
11.13. 1つの文字だけを含む行を検索するには?

1つの文字だけを含む行を検索するにはこうします:

    /^\s*\a\s*$

さらなる情報については以下を参照してください。

    :help /^
    :help /\a
    :help /\s
    :help /*
    :help /$

                                                                faq-11.14
11.14. 複数のファイルから文字列を検索し、置換するには?

":argdo", ":bufdo", ":windo"コマンドを使うと複数のファイルに対してexコマンドを
実行することができます。例:

    :argdo %s/foo/bar/g

さらなる情報については以下を参照してください。

    :help :argdo
    :help :bufdo
    :help :windo

                                                                faq-11.15
11.15. マップ中で置換コマンド":s"を使っています。検索が失敗したときマップが途
       切れてしまいます。置換が失敗したときにもマップの次のコマンドを続けてほ
       しいのですが、どうすればできますか?

置換コマンドに対して'e'フラグを指定すると、パターンが見つからなかったときも
マップの他のコマンドを続行します。

さらなる情報については以下を参照してください。

    :help :s_flags

                                                                faq-11.16
11.16. 行からある文字がn回目に現れる箇所を検索するには?

行中からある文字がn回目に現れる箇所を検索するには、'f'コマンドにプリフィックス
をつけます。例えば、文字@が5回目に現れる箇所を検索するには、5f@とします。ただ
しカーソルが行頭にあるものとします。また、1桁目の文字が検索する文字ではないも
のとします。

さらなる情報については以下を参照してください。

    :help f
    :help F
    :help t
    :help T
    :help ;
    :help ,

                                                                faq-11.17
11.17. タブ(やその他の文字)を改行文字で置換するには?

タブ(やその他の文字)を改行文字で置換するには、次のコマンドを使います:

    :s/\t/\r/

上のコマンドで\rでなく\nを使うと改行文字には置換されないので注意してください。

さらなる情報については以下を参照してください。

    :help sub-replace-special
    :help NL-used-for-Nul
    :help CR-used-for-NL

                                                                faq-11.18
11.18. ASCIIコードで検索する文字を指定するには?

"/"コマンド中で、CTRL-Vに続いて10進、16進、8進の値を入力すると、ASCIIコードで
その値を持つ文字を検索することができます。ある文字のASCIIコードを知るには
":ascii"や"ga"コマンドが使えます。

さらなる情報については以下を参照してください。

    :help i_CTRL-V_digit
    :help :ascii
    :help ga

                                                                faq-11.19
11.19. 長い行を見つけるには?

検索コマンドで正規表現を使えば長い行、または指定した数以上の文字を含む行を検索
することができます。例えば、80文字以上を含む行を検索するには、このようにします
:

    /^.\{80}.*$
    /^.*\%80c.*$

さらなる情報については以下を参照してください。

    :help /\{
    :help /\%c

                                                                faq-11.20
11.20. カレントバッファ内の指定したパターンを含む行を全て表示するには?

次のコマンドを使うとカレントバッファ内の指定したパターンを含む行を全て表示する
ことができます:

    :g/<pattern>/p

例えば、次のコマンドはカレントバッファ内の"vim"を含む行を全て表示します:

    :g/vim/p

行番号もいっしょに表示したいならば次のコマンドが使えます:

    :g/<pattern>/#

さらなる情報については以下を参照してください。

    :help :global
    :help :print
    :help :number

                                                                faq-11.21
11.21. 複数行にわたる文字列を検索するには?

正規表現のアトム\_xを使えば、複数行にわたる文字列を検索することができます。例
えば、文字列"Hello World"を検索するには次のコマンドを使います:

    /Hello\_sWorld

これは、単語"Hello"とそれに続く改行文字、そして次行の行頭の単語"World"にマッチ
します。またこれは"Hello"、スペース、"World"にもマッチします。行頭と行末の空白
を含めて文字列"Hello World"を検索するには、次のコマンドを使います:

    /Hello\_s\+World

さらなる情報については以下を参照してください。

    :help 27.8
    :help pattern-atoms
    :help /\_
    :help pattern-searches

                                                                faq-11.22
11.22. バッファの指定した範囲内から検索するには?

正規表現のアトム\%>lと\%<lを使えば、指定した範囲内からパターンを検索することが
できます。

例えば、10行目と20行目の間から単語'white'を検索するには次のコマンドを使います:


    /white\%>10l\%<20l

さらなる情報については以下を参照してください。

    :help /\%l


=============================================================================
                                                                faq-12
SECTION 12 - テキストを変更する

                                                                faq-12.1
12.1. 行末の空白文字(スペースとタブ)を全て削除するには?

":substitute"コマンドを使ってファイル中から行末の空白文字を全て削除することが
できます:

    :%s/\s\+$//

さらなる情報については以下を参照してください。

    :help :%
    :help :s
    :help /\s
    :help /\+
    :help /$

                                                                faq-12.2
12.2. 連続する空白文字を1個のスペースに置換するには?

次のコマンドで連続する空白文字を1個のスペースに置換することができます:

    :%s/ \{2,}/ /g

さらなる情報については以下を参照してください。

    :help :%
    :help :s
    :help /\{
    :help :s_flags

                                                                faq-12.3
12.3. 連続する空行を1行だけに圧縮するには?

次のコマンドで連続する空行を1行だけに圧縮することができます:

    :v/./.,/./-1join

このコマンドの説明は以下の通りです:

    :v/./           後に続くコマンドを、1文字も含まない行(空行)を除く全ての行
                    に対して実行する。
         .,         現在行を範囲の開始位置に指定する。
           /./      1文字を含む行を範囲の終端に指定する。
              -1    終端を1行前に調整する。
                j   範囲内の行を連結する。

空行がファイルの末尾にある場合、これはエラーメッセージを出します。それを避ける
には、一時的な行をファイルの末尾に追加し、このコマンドを実行してから一時的な行
を削除します。

さらなる情報については以下を参照してください。

    :help :v
    :help :join
    :help cmdline-ranges
    :help collapse

                                                                faq-12.4
12.4. ファイル中の空行を全て削除するには?空白文字だけを含む行を全て削除するに
      は?

空行を全て削除するには、次のコマンドを使います:

    :g/^$/d

空白文字(スペースとタブ)だけからなる行を削除するには、次のコマンドを使います:


    :g/^\s\+$/d

空行、または空白だけからなる行を全て削除するには、次のコマンドを使います:

    :g/^\s*$/d

                                                                faq-12.5
12.5. カーソル下の単語をコピー/ヤンクするには?

"yiw" (yank inner word without whitespace) または "yaw" (yank a word with 
whitespace)でカーソル下の単語をコピー/ヤンクできます。

さらなる情報については以下を参照してください。

    :help 04.6
    :help 04.8
    :help iw
    :help yank
    :help text-objects
    :help objects

                                                                faq-12.6
12.6. 行全体ではなく、行内のある位置からある位置までをヤンクするには?

ヤンクオペレータ(y)に移動コマンドを指定すれば、行内のある位置から別の位置まで
をヤンクすることができます。例えば、現在のカーソル位置から次のxという文字まで
をヤンクするにはyfx, Fx, tx, Txのどれかを使います。n桁目までをヤンクするには
n|を使います。次に'word'が現れる場所までをヤンクするには/wordとします。別の行
のn桁目までをヤンクするには、まず'ma'で位置をマークし、ヤンク開始位置まで移動
してt`a(バッククォートであることに注意)でマークまでをヤンクします。

さらなる情報については以下を参照してください。

    :help yank
    :help motion.txt
    :help 4.6

                                                                faq-12.7
12.7. 現在のレジスタの中身に追加ヤンクするには?

レジスタを指定するときに大文字を使うと現在のレジスタに追加ヤンクされます。例え
ば、レジスタ"a"に何かテキストが入っているとします。新しいテキストをここに追加
するには、レジスタ名"A"を使います。レジスタ名に小文字を使うと、レジスタの中身
は新しいテキストで上書きされてしまいます。

さらなる情報については以下を参照してください。

    :help quote
    :help quote_alpha
    :help 10.1

                                                                faq-12.8
12.8. 複数行にわたる文全体をヤンクするには?

複数行にわたる文全体をヤンクするには、ヤンクオペレータの後に移動コマンドを続け
ます。例:

        y)

文の内側にいるときは'yi)'で文をヤンクすることができます。

さらなる情報については以下を参照してください。

    :help yank
    :help {motion}
    :help object-motions
    :help 4.6

                                                                faq-12.9
12.9. あるパターンを含む行全てをヤンクするには?

":global"を使えばあるパターンを含む行全てをヤンクし、その後そのレジスタの中身
をバッファにペーストすることができます:

    :let @a=''
    :g/mypattern/y A

最初のコマンドはレジスタ"a"の中身をクリアします。2番目のコマンドは"mypattern"
を含む行全てをレジスタ"a"にコピーします。大文字"A"を使ってマッチした行を追加し
ていることに注意してください。そして"apコマンドでレジスタ"a"の中身をバッファに
ペーストすることができます。

さらなる情報については以下を参照してください。

    :help :g
    :help :y
    :help let-register
    :help quote_alpha
    :help put
    :help registers
    :help :registers

                                                                faq-12.10
12.10. あるパターンを含まない行全てを削除するには?

":v"コマンドを使えば、あるパターンを含まない行全てを削除することができます:

    :v/pattern/d

または

    :g!/pattern/d

さらなる情報については以下を参照してください。

    :help :v
    :help :g

                                                                faq-12.11
12.11. "pattern"を含む全ての行の前に行を追加するには?

以下のコマンドを使うと、"pattern"を含む行全ての前に行を追加することができま
す:

    :g/pattern/normal Oi<line of text goes here>

または追加する行をYでヤンクし、次のコマンドでそれを追加することができます:

    :g/pattern/put!

さらなる情報については以下を参照してください。

    :help :g
    :help :put
    :help insert
    :help 0

                                                                faq-12.12
12.12. 前の行が特定のパターンを含んでいる行に対して操作を行うには?

":global"を使えば、前の行が特定のパターンを含んでいる行に対して操作を行うこと
ができます:

    :g/<pattern>/+{cmd}

さらなる情報については以下を参照してください。

    :help :g
    :help :range

                                                                faq-12.13
12.13. あるパターンを含む行全てに対してコマンドを実行するには?

":global"(:g)コマンドを使えば、あるパターンを含む行全てに対してコマンドを実行
することができます。

    :g/my pattern/d

Exコマンドでないコマンドを使いたければ、":normal"を使うことができます:

    :g/my pattern/normal {command}

ノーマルモードコマンドの再帰マッピングを避けたければ代わりに":normal!"を使いま
す("!"に注意)。

さらなる情報については以下を参照してください。

    :help :global
    :help :v
    :help :normal

                                                                faq-12.14
12.14. カーソル位置の1文字上の文字をカーソル位置にコピーするには?

挿入モードで<Ctrl-Y>とするとカーソル位置の1文字上の文字をコピーすることができ
ます。同じように<Ctrl-E>で1文字下の文字をコピーすることができます。

さらなる情報については以下を参照してください。

    :help i_CTRL-Y
    :help i_CTRL-E

                                                                faq-12.15
12.15. 挿入モードに入らずに現在行の前/後に空行を挿入するには?

":put"を使えば空行を挿入できます。例えば、次を実行してみてください:

    :put =''
    :put! =''

さらなる情報については以下を参照してください。

    :help :put

                                                                faq-12.16
12.16. カレントファイルの名前をカレントバッファに挿入するには?

カレントファイルの名前をカレントバッファに挿入するにはいくつかの方法がありま
す。挿入モードでは<C-R>%または<C-R>=expand("%")でできます。ノーマルモードでは
":put =@%"でできます。

さらなる情報については以下を参照してください。

    :help i_CTRL-R
    :help expand()
    :help !!

                                                                faq-12.17
12.17. レジスタの中身をカレントバッファに挿入するには?

挿入モードでは<C-R><register><register>の中身を挿入することができます。例え
ば、<C-R>aでレジスタ"a"の中身をカレントバッファに挿入できます。

ノーマルモードでは":put <register>"で<register>の中身を挿入できます。例えば、
":put d"でレジスタ"d"の中身をカレントバッファに挿入できます。

さらなる情報については以下を参照してください。

    :help i_CTRL-R
    :help :put

                                                                faq-12.18
12.18. 行末を越えてカーソルを移動し、テキストを挿入するには?

オプション"virtualedit"をセットすれば行末を越えてカーソルを移動し、行末の先に
文字を追加することができます。仮想モードを開始するにはこうします。

    :set virtualedit=all

さらなる情報については以下を参照してください。

    :help 'virtualedit'

                                                                faq-12.19
12.19. カーソル下の単語(例えばjunk)を"foojunkbar"に置き換えるには?

いくつかの方法があります。その行の中でその単語が現れる最初の箇所なら、こうしま
す:

    :exe "s/".expand("<cword>")."/foo&bar/"

よりマッチを限定させるには、このようなより複雑な置換コマンドを使います:

    :exe 's/\<'.expand("<cword>").'\%>'.(col(".")-1).'c\>/foo&bar/'

またはciwfoo<C-R>"bar<Esc>としてもできます。

さらなる情報については以下を参照してください。

    :help :substitute
    :help expand()
    :help col()
    :help /\%c

                                                                faq-12.20
12.20. ディレクトリ中の全てのファイルに対して特定のテキストを置換するには?

"argdo"を使えば、引数として指定されたファイル全てに対して置換コマンドを実行す
ることができます:

    :args *
    :argdo %s/<your_text>/<replacement_text>/ge | update

さらなる情報については以下を参照してください。

    :help :args_f
    :help :argdo
    :help :s_flags

                                                                faq-12.21
12.21. ファイル中に数字が書かれています。これを増加・減少させるには?

CTRL-Aで数字を増加、CTRL-Xで減少させることができます。また、カウントを指定すれ
ば増加・減少させる数を指定することができます。この機能は10進、8進、16進の数字
に対して適用することができます。

さらなる情報については以下を参照してください。

    :help CTRL-A
    :help CTRL-X
    :help 'nrformats'


                                                                faq-12.22
12.22. ":substitute"で最後に検索したパターンを再利用するには?

":substitute"で検索パターンを指定しなければ、最後に検索したパターンを再利用す
ることができます:

    :s/pattern/newtext/
    :s//sometext/

2回目の":s"では、検索パターンが指定されていないので、最初の":s"のパターンが使
われます。

検索パターンは変えたいが、置換語を同じものにしたい場合は、チルダ文字を使いま
す:

    :s/newpattern/~/

さらなる情報については以下を参照してください。

    :help :s
    :help :&
    :help :~
    :help &
    :help sub-replace-special

                                                                faq-12.23
12.23. ":substitute"を使って大文字・小文字を入れかえるには?

":substitute"の置換文字列に特殊文字を使えば、マッチした文字列の大文字・小文字
を入れかえることができます。例えば、文字列"MyString"を全て大文字にするには、以
下のコマンドを使うことができます:

    :%s/MyString/\U&/g

小文字にするには、次のコマンドを使います:

    :%s/MyString/\L&/g

現在行の全ての単語の最初の文字を大文字にするには、次のコマンドを使います:

    :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g

さらなる情報については以下を参照してください。

    :help sub-replace-special
    :help :substitute
    :help \U
    :help \L
    :help \u

                                                                faq-12.24
12.24. キーボード上に無い文字を入力するには?

ダイグラフを使えば、キーボード上に無い文字を入力することができます。現在定義さ
れているダイグラフを全て表示するには":digraphs"を使います。":digraphs"を使えば
リストに新しいダイグラフを追加できます。

さらなる情報については以下を参照してください。

    :help digraphs
    :help 'digraphs'
    :help 24.9

                                                                faq-12.25
12.25. ダイグラフのどれか、または全てを削除するコマンドはありますか?

ありません。ダイグラフテーブルはコンパイル時に定義されます。できるのは新しいダ
イグラフを追加することだけです。ダイグラフを削除するコマンドを追加するという事
はTODOリストにはありません。

                                                                faq-12.26
12.26. 挿入モードでバックスペースキーを押すと、今回の挿入モードで入力した文字
       が消されるだけです。バックスペースキーで前回の挿入モードで入力した文字
       を消すには?

'backspace'をセットすれば挿入モードで前回入力した文字を削除することができます:

    :set backspace=indent,eol,start

さらなる情報については以下を参照してください。

    :help 'backspace'

                                                                faq-12.27
12.27. 72文字より長くて"+"で終わり、次行に折り返されている行があります。このよ
       うな行をすばやく連結させるには?

":global"を使えばそのような行を検索・連結できます:

    :g/+$/j

しかしこれは2行ごとに連結するだけです。連続する"+"で終わる行を連結する、より複
雑な2つの例が以下の通りです:

    :g/*$/,/\(^\|[^+]\)$/j
    :g/+$/mark a | .,/\(^\|[^+]\)$/s/+$// | 'a,.j

{訳注: 1番目の例は :g/+$/,/\(^\|[^+]\)$/j の間違いだと思う。}

さらなる情報については以下を参照してください。

    :help :g
    :help :j
    :help :mark

                                                                faq-12.28
12.28. 文字単位でヤンクされたテキストを新しい行にペーストするには?

":put"を使えば文字単位でヤンクされたテキストを新しい行にペーストできます:

    :put =@"

さらなる情報については以下を参照してください。

    :help :put
    :help quote_=

                                                                faq-12.29
12.29. 単語・文字・テキストのブロックの大文字小文字を入れかえるには?

"~"を使えば文字の大文字・小文字を入れかえることができます。

カーソル下の単語を大文字にするには"gUiw"または"viwU"、小文字にするには"guiw"ま
たは"viwu"とすればできます。

カーソル下の単語の大文字・小文字を入れかえるには"viw~"または"g~iw"とします。

"gUgU"とすれば現在行を大文字にでき、"gugu"とすれば現在行を小文字にできます。

"g~g~"とすれば現在行の大文字・小文字を入れかえることができます。"g~{motion}"ま
たは"{Visual}~"とすればテキストのブロックの大文字・小文字を入れかえることがで
きます。

さらなる情報については以下を参照してください。

    :help case

                                                                faq-12.30
12.30. キーボード上にないASCII文字を入力するには?

キーボード上にないASCII文字を入力するには、CTRL-Vを押してからそのASCIIコードを
入力します。特別なASCII文字を入力するのにダイグラフを使うこともできます。

さらなる情報については以下を参照してください。

    :help i_CTRL-V_digit
    :help digraphs
    :help 45.5

                                                                faq-12.31
12.31. ファイル中の印字不能文字を置換するには?

印字不能文字を置換するには、まずその文字のASCIIコードを知らなければなりませ
ん。exコマンド":ascii"またはノーマルモードコマンド"ga"を使ってカーソル下の文字
のASCIIコードを知ることができます。

CTRL-Vに続けて10進の数字1-255(最初に0をつけてばならない)またはxと16進の数字
00-FF、または8進の数字0-0377(最初に0をつける)またはuと16進の数字0-FFFFまたは
Uと16進の数字0-7FFFFFFFを入力すれば、印字不能文字を入力することができます。

別の方法としては、":digraphs"を使って、全文字に対するダイグラフと共にそれらの
10進値プラスアルファを表示することです。CTRL-Kに続けて英数字を2つ(ダイグラフ)
を入力すれば印字不能文字を入力することができます。

さらなる情報については以下を参照してください。

    :help :ascii
    :help i_CTRL-V
    :help i_CTRL-V_digit
    :help :digraphs

                                                                faq-12.32
12.32. バッファから重複した行を削除するには?

次のユーザー定義コマンドを使えばバッファから重複した行を全て削除することができ
ます:

    :command -range=% Uniq <line1>,<line2>g/^\%<<line2>l\(.*\)\n\1$/d

上のコマンドを.vimrcに追加し、":Uniq"を実行すると重複した行が削除されます。

                                                                faq-12.33
12.33. ファイル中の全ての行の前に行番号をつけるには?

行番号をつけるにはいくつかの方法があります。以下はその例です:

    :%s/^/\=line('.'). ' '
    :%s/^/\=strpart(line(".")."     ", 0, 5)
    :g/^/exec "s/^/".strpart(line(".")."    ", 0, 4) 

さらなる情報については以下を参照してください。

    :help sub-replace-special
    :help line()
    :help expr6
    :help strpart()
    :help :execute
    :help :global

                                                                faq-12.34
12.34. 2つの文字・単語・行を入れ換えるには?

"xp"で2つの文字を入れ換えることができます。'x'でカーソル下の文字を削除し、'p'
で削除された文字をカーソル下の文字の後ろにペーストします。その結果、2つの文字
が入れ換わります。

2つの単語を入れ換えるには"deep"とします(最初の単語の前の空白にカーソルをおいて
実行します)。

2つの行を入れ換えるには"ddp"とします。'dd'で現在行を削除し、'p'で現在行の後ろ
に削除された行をペーストします。その結果、2つの行が入れ換わります。

以上の操作はどれも無名レジスタ"の中身を変更します。

":m +"とすると無名レジスタの中身を変更することなく2つの行を入れ換えることがで
きます。

さらなる情報については以下を参照してください。

    :help x
    :help p
    :help dd
    :help d
    :help e
    :help linewise-register
    :help quotequote
    :help :move


=============================================================================
SECTION 13 - 挿入モードでの補完

                                                                faq-13.1
13.1. 挿入モードで単語や行を補完するには?

挿入モードでCTRL-PまたはCTRL-Nを使うと単語を補完することができます。
CTRL-Nは次の候補を前方から検索します。
CTRL-Pは次の候補を後方から検索します。

挿入モードでCTRL-X CTRL-Lを使うと現在行のカーソル以前の文字列で始まる行を補完
します。次のマッチする行を取得するにはCTRL-PまたはCTRL-Nを使います。挿入モード
で単語を補完する方法・キーは他にもたくさんあります。

Vimは以下の要素の補完をサポートしています:

    CTRL-X CTRL-F    ファイル名
    CTRL-X CTRL-L    行全体
    CTRL-X CTRL-D    マクロ定義 (インクルードファイル中のものも)
    CTRL-X CTRL-I    カレントファイルとインクルードファイル
    CTRL-X CTRL-K    辞書中の単語
    CTRL-X CTRL-T    シソーラス中の単語
    CTRL-X CTRL-]    タグ
    CTRL-X CTRL-V    Vimコマンドライン

さらなる情報については以下を参照してください

    :help 24.3
    :help ins-completion

                                                                faq-13.2
13.2. 挿入モードでファイル名を補完するには?

挿入モードでCTRL-X CTRL-Fを使うとカレント行のカーソルの前の文字列で始まるファ
イル名を補完することができます。

さらなる情報については以下を参照してください

    :help compl-filename

                                                                faq-13.3
13.3. 挿入モードで単語を補完するのにCTRL-P/CTRL-Nを使っています。
      今補完した単語の後に現れる単語を補完するには?

CTRL-X CTRL-NCTRL-X CTRL-Pを使うと今補完した単語の後に続く単語を補完すること
ができます。

さらなる情報については以下を参照してください

    :help i_CTRL-X_CTRL-P
    :help i_CTRL-X_CTRL-N
    :help ins-completion


=============================================================================
                                                                faq-14
SECTION 14 - テキストの整形

                                                                faq-14.1
14.1. 折り返された行の末尾に改行を挿入するには?

'gq'コマンドを使うと段落を整形することができます。これは現在の'textwidth'の設
定にしたがってテキストを整形します。

オペレータgqは移動コマンドと組み合わせて、テキストの範囲に対して実行できます。
例:

    gqgq - 現在行を整形する
    gqap - 現在の段落を整形する
    gq3j - 現在行と下3行を整形する

さらなる情報については以下を参照してください

    :help gq
    :help formatting
    :help usr_25.txt
    :help motion.txt

                                                                faq-14.2
14.2. 1行がn文字以下になるように長い行を整形するには?

まず'textwidth'を望みの値に設定します:

    set textwidth=70

そして、'textwidth'で設定された長さで行を折り返すにはこうします

    :g/./normal gqq

さらなる情報については以下を参照してください

    :help gq

                                                                faq-14.3
14.3. 短い行を連結して段落を形成するには?

まず、'textwidth'を大きな値に設定します:

    :set textwidth=99999

続いて、以下のコマンドで短い行を連結して段落を形成します:

    1GgqG

このコマンドはファイル全体に作用します。指定した範囲内の全段落に対して整形を行
うにはこうします:

    :'a,'bg/\S/normal gq}

さらなる情報については以下を参照してください

    :help gq
    :help G
    :help gqq

                                                                faq-14.4
14.4. 箇条書きや番号つきリストを整形するには?

'formatoptions'によって箇条書きや番号つきリストを整形するように設定することが
できます。例えば、以下のフォーマットのリストを整形することができます:

  - this is a test. this is a test. this is a test. this is a test.
  this is a test.

これがこのような形式になります。

  - this is a test. this is a test. this is a test. this is a test.
    this is a test.

'formatoptions'に'n'フラグをつけると、テキストの桁をそろえることができます。

    :set fo+=n

このオプションを設定してテキストを整形すると、Vimは番号つきリストを認識しま
す。このオプションを機能させるためには、'autoindent'をセットしなければなりませ
ん。

さらなる情報については以下を参照してください

    :help 'formatoptions'
    :help fo-table

                                                                faq-14.5
14.5. 挿入モードで行をインデントするには?

挿入モードでCTRL-Tを押すと現在行の行頭にshiftwidth分のインデントを挿入すること
ができます。挿入モードでCTRL-Dを押すと現在行の行頭のshiftwidth分のインデントを
削除することができます。また、CTRL-O >>とCTRL-O <<でも挿入モード中に現在行をイ
ンデントすることができます。

さらなる情報については以下を参照してください

    :help i_CTRL-T
    :help i_CTRL-D
    :help i_0_CTRL-D
    :help i_CTRL-O
    :help >>
    :help <<

                                                                faq-14.6
14.6. ファイル全体を整形・インデントするには?

gg=Gでファイル全体を整形・インデントすることができます。ここで、

    gg - ファイルの先頭に移動
    =  - インデントを適用
    G  - ファイルの末尾まで

という意味になります。
さらなる情報については以下を参照してください

    :help gg
    :help =
    :help G
    :help 'formatprg'
    :help C-indenting

                                                                faq-14.7
14.7. 現在のファイルのインデントを増やす/減らすには?

'>>'と'<<'で現在行のインデントを増やしたり減らすことができます。

さらなる情報については以下を参照してください

    :help shift-left-right
    :help >>
    :help <<
    :help 'shiftwidth'

                                                                faq-14.8
14.8. ブロックまたは行のグループをインデントするには?

ビジュアルモードで行を選択して>または<を押すと選択した行をインデント・アンイ
ンデントすることができます。次のexコマンドを使っても行をインデントすることがで
きます

    :10,20>

さらなる情報については以下を参照してください

    :help shift-left-right
    :help v_>
    :help v_<
    :help :<
    :help :>

                                                                faq-14.9
14.9. >または<キーで行をインデントすると、'tabstop'で設定した値でなく、標準的
      なタブストップ値の8が使われます。なぜですか?

オペレータ">"でインデントしたとき挿入されるスペースの数は'shiftwidth'オプショ
ンで決まります。'tabstop'の設定はインデントには適用されません。インデントで挿
入されるスペースの数を変更するには、こうします:

    :set shiftwidth=4

さらなる情報については以下を参照してください

    :help 'shiftwidth'
    :help >>
    :help 'softtabstop'

                                                                faq-14.10
14.10. オートインデントを無効にするには?

デフォルトではオートインデントは無効になっています。設定ファイル(.vimrc,
.gvimrc)のインデントに関する設定を確認してください。":filetype indent on"が行
われていないことを確かめてください。もし行われていたなら、これを削除してくださ
い。また、好みに応じて'autoindent''smartindent''cindent''indentexpr'の値
を確かめ、これらをオフにしてもよいでしょう。

さらなる情報については以下を参照してください

    :help :filetype-indent-off
    :help 'autoindent'
    :help 'smartindent'
    :help 'cindent'
    :help 'indentexpr'

                                                                faq-14.11
14.11. メールを編集するときは自動的に'textwidth'オプションをある値にするように
       するには?

'FileType'自動コマンドを使えば'textwidth'を設定することができます:

    autocmd FileType mail set tw=<your_value>

さらなる情報については以下を参照してください

    :help :autocmd
    :help FileType
    :help usr_43.txt

                                                                faq-14.12
14.12. 自動的に改行を挿入させることはできますか?

できます。'textwidth'を好きな行の長さに設定します。すると新しい行を挿入すると
きに自動的に改行が挿入されます。例:

    :set textwidth=75

さらなる情報については以下を参照してください

    :help textwidth
    :help ins-textwidth
    :help 'formatoptions'
    :help fo-table
    :help formatting

                                                                faq-14.13
14.13. ファイル中に^Mという記号がたくさん表示されます。'fileformat''dos'にし
       たり'unix'にしたり'mac'にしたりしてみましたが、改善できません。これらの
       記号を表示させなくするには?

ファイルを読み込むとき、そのファイルのフォーマットは以下のようにして決定されま
す:

- 全ての行が改行文字(<NL>)で終わっていればファイルフォーマットは'unix'です。
- 全ての行がキャリッジリターン文字(<CR>)に続く改行文字(<NL>)で終わっていれば
  ファイルフォーマットは'dos'です。
- 全ての行がキャリッジリターン文字(<CR>)で終わっていればファイルフォーマットは
  'mac'です。

一部の行が<CR>で終わっていて、一部の行が<CR>に続く<NL>で終わっているとき、ファ
イルフォーマットは'unix'になります。

カレントファイルのフォーマットを変更するには、'fileformat'を変更し、ファイルを
保存します:

    :set fileformat=dos
    :w

カレントファイルのフォーマットを表示するにはこうします

    :set fileformat?

以上の動作は'fileformats'によっても変わります。次のコマンドを試してみてくださ
い:
さらなる情報については以下を参照してください

    :help 'fileformats'
    :help 'fileformat'
    :help file-formats
    :help DOS-format-write
    :help Unix-format-write
    :help Mac-format-write
    :help dos-file-formats
    :help 23.1

                                                                faq-14.14
14.14. 他のアプリケーションからVimのバッファへテキストを貼り付けたとき、挿入さ
       れたテキストの桁(インデント)が狂ってしまいます。これを直すには?

テキストのインデントが狂うのはインデントに関する様々なオプション(autoindent,
smartindent, textwidth)によります。テキストをVimに貼り付ける前に'paste'をセッ
トしてください:

    :set paste

テキストをペーストしたらこのオプションをオフにします:

    :set paste!

レジスタ*によってクリップボードを使用できる場合はCTRL-R CTRL-O *とするとインデ
ントなしでテキストを貼り付けることができます。

さらなる情報については以下を参照してください

    :help 'paste'
    :help 'pastetoggle'
    :help i_CTRL-R_CTRL_O
    :help clipboard
    :help xterm-clipboard
    :help gui-clipboard

                                                                faq-14.15
14.15. 'wrap'をオンにしていて、とても長い行が折り返されて画面に収まりきらない
       とき、まったく何も表示されません。折り返された行の代わりに'@'という記号
       で始まる空の行が表示されます。行が収まるように画面をスクロールする
       と'@'は消え、行が表示されるようになります。この挙動の設定はどうやるので
       すか?

'display'オプションを'lastline'に設定すると、'@'を表示する代わりに可能な限り最
後の行を表示するようになります。

    :set display=lastline

さらなる情報については以下を参照してください

    :help 'display'

                                                                faq-14.16
14.16. ファイル中の全てのタブ文字をスペースに変換するには?

":retab"を使うとカレントファイル中の全てのタブ文字を'expandtab''tabstop'の設
定にしたがって変換することができます。例えば、全てのタブをスペースに変換するに
はこのようにします

    :set expandtab
    :retab

さらなる情報については以下を参照してください

    :help :retab
    :help 'expandtab'
    :help 'tabstop'
    :help 25.3

                                                                faq-14.17
14.17. 後でワードプロセッサーに送るテキストを編集するためのオプションは?

後でワードプロセッサーに送るテキストを編集するためには以下のオプションを設定す
ることができます:

    :set wrap
    :set linebreak
    :set textwidth=0
    :set showbreak=>>>

'gk''gj'を使うと画面上の行(物理行)単位で上下に移動できます。
さらなる情報については以下を参照してください

    :help 'wrap'
    :help 'linebreak'
    :help 'textwidth'
    :help 'showbreak'
    :help gk
    :help gj


=============================================================================
                                                                faq-15
SECTION 15 - ビジュアルモード

                                                                faq-15.1
15.1. 矩形範囲をコピーするには?

矩形選択モードを使えば矩形範囲をコピーすることができます。矩形選択モードを開始
するにはCTRL-Vキーを押します。移動コマンドを使ってカーソルを動かし、yを押すと
選択したテキストがヤンクされます。

CTRL-Vが期待通りに機能しない場合は、スクリプトmswin.vimによってこの機能が
CTRL-Qにマップされているかもしれません。Windowsマシン上では他のプログラムに共
通のショートカットを真似するため、しばしばvimrcによってこのスクリプトがsource
されています。

さらなる情報については以下を参照してください

    :help 04.4
    :help blockwise-visual
    :help visual-mode
    :help Q_vi

                                                                faq-15.2
15.2. ファイルの特定の列を削除・変更するには?

矩形選択モードを使えば特定の列を選択してオペレータコマンド(変更・削除・コピー)
を適用することができます。

さらなる情報については以下を参照してください

    :help visual-block
    :help visual-operators

                                                                faq-15.3
15.3. ビジュアル選択した行に対してexコマンドを適用するには?

ビジュアルモードで行を選択すると、レジスタ<が選択範囲の開始位置にセットされ、
レジスタ>が選択範囲の終端にセットされます。これらのレジスタを使えばexコマンド
の範囲を指定できます。行をビジュアル選択してから":"を押すとコマンドモードに移
行します。自動的に選択範囲を示す'<,'>が挿入されます。選択範囲に対してどんなex
コマンドでも実行することができます。

さらなる情報については以下を参照してください

    :help v_:
    :help '<
    :help '>

                                                                faq-15.4
15.4. 矩形選択した範囲に対してexコマンドを適用するには?

exコマンドは全て行全体に対してのみ実行されます。テキストを矩形選択してexコマン
ドを実行しようとすると、(選択した列だけでなく)選択した行全体に対して実行されて
しまいます。http://vim.sourceforge.net から入手できるプラグインvis.vimを使えば
矩形範囲に対してexコマンドを適用することができます。

さらなる情報については以下を参照してください

    :help cmdline-ranges
    :help 10.3
    :help cmdline-lines

                                                                faq-15.5
15.5. ビジュアルモードでファイル全体を選択するには?

ggVGでファイル全体をビジュアル選択することができます。

    gg - ファイルの先頭へ移動
    V  - 行単位ビジュアル選択を開始
    G  - ファイルの末尾へ移動

さらなる情報については以下を参照してください

    :help gg
    :help linewise-visual
    :help G

                                                                faq-15.6
15.6. ビジュアル選択してから>キーを押してインデントすると、選択が解除されま
      す。この範囲に対して操作を続けるため選択したままにするには?(または)最後
      に選択された範囲を再選択するには?

'gv'で最後に選択された範囲を再選択できます。またマーク'<と'>を使うと最後に選択
された範囲の開始位置と終端に移動することができます。

さらなる情報については以下を参照してください

    :help gv
    :help '<
    :help '>

                                                                faq-15.7
15.7. ビジュアル選択した範囲の先頭/末尾へ移動するには?

(ビジュアルモードにおいて)'o'コマンドでビジュアル選択した範囲の先頭/末尾へ移動
できます。

さらなる情報については以下を参照してください

    :help v_o

                                                                faq-15.8
15.8. マウスでテキストを選択してからexコマンドを実行しようと:キーを押すと選択
      された範囲が文字:で置換されてしまいます。マウスで選択したときもビジュア
      ル選択したときのようにテキストに対してexコマンドを実行するには?

これは'selectmode'でビジュアルモードでなく選択モードを使うように設定していると
き起こります。このオプションの値を確認してください:

    :set selectmode?

このモードは選択モードといい、ビジュアルモードに似ています。"behave mswin"コマ
ンドを使うと、このオプションも自動的にセットされます。選択モードはビジュアル
モードと同じように見えますが、MS-Windowsの選択モードに似ています。

さらなる情報については以下を参照してください

    :help Select-mode
    :help 'selectmode'
    :help 9.4
    :help :behave

                                                                faq-15.9
15.9. マウスでテキストを選択するとビジュアルモードでなく選択モードに入ってしま
      います。なぜですか?

マウスでテキストを選択したとき選択モードになるかどうかは'selectmode'オプション
によって決まります。ビジュアルモードが始まるようにするには、'selectmode'から
'mouse'の値を除きます:

    :set selectmode-=mouse

デフォルトでは'selectmode'は空になっていて、常にビジュアルモードが使われるよう
になっています。

さらなる情報については以下を参照してください

    :help 'selectmode'
    :help Select-mode
    :help :behave

                                                                faq-15.10
15.10. 最後にコピー/ペーストされたテキストをビジュアル選択するには?

マーク'['と']を使うと最後にコピー/ペーストされたテキストを選択することができ
ます。マーク'[は最後に変更/ヤンクされたテキストの先頭にセットされ、']はその末
尾にセットされます。この範囲をビジュアル選択するには、'[v']とします。

さらなる情報については以下を参照してください

    :help '[
    :help ']
    :help `a
    :help v


=============================================================================
                                                                faq-16
SECTION 16 - コマンドラインモード

                                                                faq-16.1
16.1. コマンドモードまたはexコマンドモードでカレントファイル名を使うには?

コマンドモードでは文字'%'がカレントファイルの名前を表します。いくつかのコマン
ドにおいてはファイル名を取得するためにexpand("%")を使わねばなりません:

    :!perl %

さらなる情報については以下を参照してください。

    :help :_%
    :help cmdline-special
    :help expand()

                                                                faq-16.2
16.2. Vimのコマンドラインで効率的にテキストを編集するには?

Vimのコマンドラインテキストを編集するのにコマンドラインウィンドウを使うことが
できます。コマンドラインウィンドウを開くにはノーマルモードで"q:"とします。コマ
ンドラインモード中からはCTRL-Fを使います。このウィンドウにはコマンドラインの履
歴が表示されます。通常のVimのキー・コマンドを使って以前の・新しいコマンドライ
ンを編集することができます。コマンドラインを実行するにはエンター/リターンキー
を押します。

同様に、検索履歴を"q/"と"q?"で編集することができます。

さらなる情報については以下を参照してください。

    :help cmdline-window

                                                                faq-16.3
16.3. ViモードからExモードに移行するには?

QでViモードからExモードに移行できます。ExモードからViモードに移行するには :vi
を使います。

さらなる情報については以下を参照してください。

    :help Q
    :help gQ
    :help Ex-mode
    :help :vi

                                                                faq-16.4
16.4. exコマンドの出力をバッファにコピーするには?

exコマンドの出力をバッファにコピーするには、まずそのコマンドの出力をレジスタに
入れます。":redir"で出力をレジスタに入れることができます。例

    :redir @a
    :g/HelloWord/p
    :redir END

するとレジスタ'a'がexコマンド"g/HelloWord/p"の出力を保持します。ここでレジスタ
'a'の中身をバッファにペーストすることができます。'redir'を使ってexコマンドの出
力をファイルに送ったり、追加することもできます。

":global"の前に":silent"を付けると、その行が画面に表示されるのを避けることがで
きます。

exコマンドの出力をファイルにリダイレクトするには、次の一連のコマンドを使うこと
ができます:

    :redir > myfile
    :g/HelloWord/p
    :redir END

さらなる情報については以下を参照してください。

    :help :redir
    :help :silent

                                                                faq-16.5
16.5. コマンドモードでファイル名を補完しようとタブキーを押します。マッチする
      ファイル名が複数ある時、Vimは最初にマッチするファイル名を補完し、マッチ
      したファイル名全てのリストを表示します。マッチしたファイル名全てを表示す
      るだけで、最初の候補を補完しないようにするには?

'wildmode'を設定すればコマンドモードでのファイル名補完をカスタマイズすること
ができます。この場合は'wildmode''list'にすればよいでしょう:

    :set wildmode=list

さらなる情報については以下を参照してください。

    :help 'wildmode'

                                                                faq-16.6
16.6. バッファからコマンドラインにテキストをコピーしたり、コマンドラインから
      バッファにテキストをコピーするには?

バッファからコマンドラインにテキストをコピーするには、バッファからテキストをヤ
ンクした後にコマンドラインでCtrl-R 0を押せばペーストすることができます。また、
CTRL-R <register>を使って特定のレジスタにヤンクしてからコマンドラインにペース
トすることもできます。CTRL-R CTRL-Wを使うとカーソル下の単語をコマンドラインに
ペーストすることができます。

コマンドラインからバッファにテキストをコピーするには、":pとしてレジスタ:の中身
をペーストすればできます。最後に実行されたコマンドラインがレジスタ:に保存され
ています。

コマンドラインへテキストをコピー&ペーストする別の方法は、ノーマルモードでq:を
押すかまたはコマンドラインモードでCTRL-Fを押してコマンドラインウィンドウを開く
ことです。このコマンドラインウィンドウではVimの全てのコマンドを使ってコマンド
ラインを編集することができます。

さらなる情報については以下を参照してください。

    :help c_CTRL-R
    :help quote_:
    :help cmdline-window

                                                                faq-16.7
16.7. あるコマンドを実行することなくコマンド履歴に入れるには?

あるコマンドを実行することなくコマンド履歴に入れるには、<Esc>キーを押してその
コマンドをキャンセルします。

さらなる情報については以下を参照してください。

    :help c_<Esc>

                                                                faq-16.8
16.8. コマンドラインの高さを上げるには?

'cmdheight'を変更すればコマンドラインの高さを上げることができます:

    :set cmdheight=2

さらなる情報については以下を参照してください。

    :help 'cmdheight'
    :help hit-enter
    :help 05.7


=============================================================================
                                                                faq-17
SECTION 17 - VIMINFO
                                                                faq-17.1

17.1. Vimを起動したときviminfoファイルに不正な文字があるとエラーメッセージが出
      ます。このメッセージを出なくさせるには?

$HOME/.viminfoまたは$HOME/_viminfoファイルを削除すればこのメッセージは出なくな
ります。

さらなる情報については以下を参照してください。

    :help viminfo-errors
    :help viminfo-file-name
    :help viminfo
    :help 21.3

                                                                faq-17.2
17.2. viminfo機能を無効にするには?

デフォルトではviminfo機能は無効になっています。もしシステムレベルのvimrcによっ
てviminfo機能が有効化されているなら、ユーザーのローカルな.vimrcで'viminfo'に空
文字列を設定すれば、viminfo機能が無効になります:

    :set viminfo=""

さらなる情報については以下を参照してください。

    :help 'viminfo'

                                                                faq-17.3
17.3. Vimのセッションをまたいでマークを保存し、使用するには?

viminfoを使えばVimのセッションをまたいでマークを保存し、復元することができま
す。viminfoファイルを使うには'viminfo'オプションが空でないことを確かめてくださ
い。Vimのマークを保存し、復元するには、'viminfo'オプションに'f'フラグが入って
いないか、'f'に対する値が0より大きくなっていなければなりません。

さらなる情報については以下を参照してください。

    :help 21.3
    :help viminfo
    :help 'viminfo'
    :help :wviminfo
    :help :rviminfo


=============================================================================
                                                                faq-18
SECTION 18 - リモート編集

                                                                faq-18.1
18.1. 既に起動しているgvimでファイルを開くには? Vim 5.xのOpenWithVim.exeと
      SendToVim.exeはどうなりました?

Vim6からOpenWithVim.exeとSendToVim.exeユーティリティのOLE版はクライアント-サー
バー機能によってとって替わられました。ファイルj.txtを既に起動している
gvim(MyVim) で開くにはこのようにします:

    $ gvim --servername MyVim --remote-silent j.txt

現在起動しているVim全てのサーバー名をリストするにはこうします:

    $ vim --serverlist

クライアント-サーバー機能についてのさらなる情報は以下を参照してください。

    :help client-server

                                                                faq-18.2
18.2. vimサーバーに全てのバッファをディスクに保存するようなコマンドを送るには?

それにはVimのリモートサーバー機能を使うことができます:

    $ gvim --servername myVIM --remote-send "<C-\><C-N>:wall<CR>"

さらなる情報については以下を参照してください。

    :help client-server
    :help CTRL-\_CTRL-N
    :help :wall

                                                                faq-18.3
18.3. Vimのリモートサーバー機能についてのドキュメントはどこで手に入りますか?

Vimのリモートサーバー機能についての情報はこれを読めば得られます

    :help client-server


=============================================================================
                                                                faq-19
SECTION 19 - オプション

                                                                faq-19.1
19.1. Vimを設定する簡単な方法は?

":options"でオプションウィンドウを開くことができます:

    :options

このウィンドウで全オプションを見て、設定することができます。

さらなる情報については以下を参照してください。

    :help :options

                                                                faq-19.2
19.2. オプションの値をトグルするには?

オプションの前に"inv"をつけると、その値をトグルすることができます:

    :set invignorecase
    :set invhlsearch

オプションの後ろに"!"をつけてもその値をトグルすることができます:

    :set ignorecase!
    :set hlsearch!

さらなる情報については以下を参照してください。

    :help set-option

                                                                faq-19.3
19.3. 現在のバッファ/ウィンドウに対してだけ効果を及ぼすようにオプションを設定
      するには?

":setlocal"を使うと現在のバッファ/ウィンドウに対してだけ効果を及ぼすようにオ
プションを設定できます:

    :setlocal textwidth=70

全てのオプションがローカルな値を持つわけではないことに注意してください。そのオ
プションがローカルな値を持てる場合だけ、":setlocal"でバッファ/ウィンドウにロ
ーカルに設定できます。

また、次のコマンドでもオプションをローカルに設定できます:

    :let &l:{option-name} = <value>

                                                                faq-19.4
19.4. オプションの値にスペースを含めるには?

オプション値にスペースを含めるには、スペースをエスケープしなければなりません。
例:

    :set tags=tags\ /usr/tags

さらなる情報については以下を参照してください。

    :help option-backslash

                                                                faq-19.5
19.5. オプション設定をファイルに埋め込むには?

モードラインを使えばオプション設定をファイル中に埋め込むことができます。例え
ば、Cのファイルでファイルの先頭または末尾に次の行を埋め込むことができます:

    /* vim:sw=4: */

こうするとそのCファイルを編集するとき'shiftwidth'が4に設定されます。これが機能
するためには、'modeline'オプションをセットしなければなりません。デフォルトで
'modeline'は設定されています。'modelines'はチェックされる行数を指定します。

さらなる情報については以下を参照してください。

    :help 21.6
    :help modeline
    :help auto-setting
    :help 'modeline'
    :help 'modelines'

                                                                faq-19.6
19.6. ファイル中の全ての行の行番号を表示するには?

'number'オプションをセットすれば、全行に対して行番号が表示されます。

    :set number

さらなる情報については以下を参照してください。

    :help 'number'

                                                                faq-19.7
19.7. 'number'オプションで表示される行番号の幅を変えるには?

'number'オプションで表示される行番号の幅はVimのソース中にハードコードされてい
ます。何かオプションを設定することによってこの幅を変更することは不可能です。

行番号の幅を変えるオプションの要望とパッチはVimのTODOリスト中にあります:

    "Add an option to set the width of the 'number' column.  Eight
    positions is often more than needed.  Or adjust the width to the length
    of the file?
    Add patch that adds 'numberlen' option. (James Harvey)
    Other patch with min and max from Emmanuel Renieris (2002 Jul 24)
    Other patch without an option by Gilles Roy (2002 Jul 25)"

{訳注: Vim7でオプション'numberwidth'が導入された。}

                                                                faq-19.8
19.8. スペース、タブ、改行などの不可視文字を表示するには?

'list'オプションをセットすれば、ファイル中の不可視文字を表示することができま
す。

    :set list

このオプションをセットすると、スペース、タブ、改行、行末のスペース、折り返され
た行を表示することができます。

不可視文字を表示しなくするには(これがデフォルトです)、'list'をオフにします:

    :set nolist
    (or)
    :set list!

":set list!"とすると現在の'list'の設定をトグルします。

'listchars'オプションを変更すれば表示される不可視文字とその表示のされかたを設
定することができます。例えば、次のコマンドは行末のスペースを'.'で表示するよう
にします。

    :set listchars=trail:.

さらなる情報については以下を参照してください。

    :help 'listchars'
    :help 'list'

                                                                faq-19.9
19.9. 常に現在行と桁番号を表示するようにするには?

'ruler'をセットすれば現在の行と桁番号をステータスラインに表示するようになりま
す:

    :set ruler

さらなる情報については以下を参照してください。

    :help 'ruler'

                                                                faq-19.10
19.10. 現在のモードを表示するようにするには?

'showmode'オプションをセットすれば現在のVimのモードを表示するようになります。
挿入、置換、ビジュアルモードにおいて、最後の行に現在のモードを表示するようにな
ります。

    :set showmode

さらなる情報については以下を参照してください。

    :help 'showmode'

                                                                faq-19.11
19.11. ステータスラインに入力途中のコマンドを表示するようにするには?

'showcmd'をセットすればステータスラインに入力途中のコマンドを表示するようにな
ります:

    :set showcmd

さらなる情報については以下を参照してください。

    :help 'showcmd'

                                                                faq-19.12
19.12. ステータスラインに異なる設定・値を表示するようにするには?

'statusline'をセットすれば異なる設定・値をステータスラインに表示するようになり
ます。

さらなる情報については以下を参照してください。

    :help 'statusline'
    :help 'laststatus'
    :help 'rulerformat'
    :help 'ruler'

                                                                faq-19.13
19.13. 常にステータスラインを表示するようにするには?

'laststatus'を2にすれば常にステータスラインを表示するようになります。

    :set laststatus=2

さらなる情報については以下を参照してください。

    :help 'laststatus'

                                                                faq-19.14
19.14. Vimを再起動しても設定が永続するようにするには?

Vimを再起動しても設定が永続するようにするには、その設定を.vimrcまたは.gvimrc
ファイルに追加します。":mkvimrc"コマンドを使うと現在の設定をもとにvimrcファイ
ルを生成することもできます。

さらなる情報については以下を参照してください。

    :help save-settings
    :help vimrc
    :help gvimrc
    :help vimrc-intro
    :help :mkvimrc
    :help initialization

                                                                faq-19.15
19.15. なぜエスケープキーを押すと約1秒後にビープが鳴る(画面がフラッシュする)の
       ですか?

これは通常の動作です。画面がフラッシュするのなら、ビジュアルベルが発生していま
す。そうでなければビープが鳴ります。

Vimは普通のエスケープとカーソルキーのシーケンスなどを区別するために、タイムア
ウトを必要とします。ノーマルモードでキーを押すと(挿入モードでさえも)、そしてそ
のキーがマッピングの始まりであると、Vimはマッピングの残りのシーケンスが後に続
くがどうかを見るために一定時間待ちます。もしタイムアウトする前にマッピングシー
ケンスが最後まで入力されればそのキーシーケンスのマッピングが発動します。もし
マッピングを中断すれば、そのキーに割り当てられた普通の動作を実行します。

例えば、":imap vvv Vim is great!!"と定義されたマッピングがあるとし、"vvv"をす
ばやく入力するとします。すると"Vim is great!!"がテキストに挿入されます。
しかし"vv v"と入力すると、それがテキストに挿入されます。これは"vvv"をとても遅
く入力したときも同じになります。ここで"とても遅く"とはタイムアウトオプションで
設定された値よりも長いという意味です。タイムアウトオプションを大きな値に設定す
ると、遅い回線上でファンクションキーを使うときに現れる問題を解決することができ
ます。

さらなる情報については以下を参照してください。

    :help ttimeout

                                                                faq-19.16
19.16. 'c'と's'を使ったときに変更する文字を削除するのでなく'$'を表示するように
       するには?

'c'と's'で変更する文字を削除するのでなく'$'を表示するようにするには、
'cpoptions'にフラグ$を追加します:

    :set cpoptions+=$

さらなる情報については以下を参照してください。

    :help 'cpoptions'

                                                                faq-19.17
19.17. 1回の":set"コマンドでオプションから複数のフラグを除去するには?

1回の":set"コマンドでオプションから複数のフラグを除去するには、それらのフラグ
がオプション中に現れるのと正確に同じ順序でフラグを指定します。例えば、次のコマ
ンドで'formatoptions'からフラグ't'と'n'を除去しようとしたとします:

    :set formatoptions-=tn

すると、'formatoptions'がこれらのフラグをこの'tn'という順序で保持していた場合
のみ、フラグ't'と'n'が除去されます。そうでなければフラグは除去されません。
この問題を避けるには、フラグを1つ1つ除去します:

    :set formatoptions-=t formatoptions-=n

さらなる情報については以下を参照してください。

    :help :set-=


=============================================================================
                                                                faq-20
SECTION 20 - キーマップ

                                                                faq-20.1
20.1. キーがどうマップされているかを知るには?

キーがどうマップされているかを知るには、次のコマンドを使うことができます:

    :map <key>
    :map! <key>

また、特定のモードでのマッピングを確認するには":cmap", ":nmap", ":vmap",
":imap", ":omap"などのコマンドを使うことができます。

さらなる情報については以下を参照してください。

    :help map-listing
    :help map-overview

                                                                faq-20.2
20.2. ユーザー定義のキーマッピングをリストするには?

ユーザー定義のキーマッピングをリストするにはこうします:

    :map

さらなる情報については以下を参照してください。

    :help map-listing

                                                                faq-20.3
20.3. キーマップを解除するには?

キーマップを解除するには":unmap"を使います:

    :unmap <key>
    :unmap! <key>

モード指定のマッピングには、":nunmap/:vunmap/:ounmap/:iunmap/:lunmap/:cunmap"
のどれかを使います。

次のコマンドではバッファローカルなマップを解除できません:

    :unmap <key>

バッファローカルなキーマップを解除するには、キーワード<buffer>を使わなければ
なりません:

    :unmap <buffer> <key>
    :unmap! <buffer> <key>

さらなる情報については以下を参照してください。

    :help :unmap
    :help map-modes
    :help map-local
    :help 'mapleader'

                                                                faq-20.4
20.4. キー<xxx>へマッピングができません。何がまずいのですか?

最初にそのキーがVimが渡っているかどうか確認してください。挿入モードで CTRL-V
続けてそのキーを押してください。そのキーに対応するキーコードが表示されるでしょ
う。ここでそのキーコードが表示されたら、以下のコマンドでそのキーに対するマッピ
ングを作成することができます:

    :map <C-V><xxx>  <your_command_to_be_mapped>

さらなる情報については以下を参照してください。

    :help map-keys-fails
    :help :map-special-keys
    :help key-codes

                                                                faq-20.5
20.5. テンキーにマップするには?

最初にテンキーのキーがVimに渡っているかどうかを確認してください。そして次の
コマンドでテンキーのキーに対してマップすることができます:

    :map <kSomething>  <your_command>

ここで<kSomething>にはkHome, kEnd, kPageUp, kPageDown, kPlus, kMinus,
kDivide, kMultiply, kEnterなどが使えます。

さらなる情報については以下を参照してください。

    :help key-codes
    :help terminal-options

                                                                faq-20.6
20.6. ビジュアルモードでのみ機能するマッピングを作成するには?

特定のモード(ノーマル、コマンド、挿入、ビジュアル等)でのみ機能するマッピングを
作成することができます。ビジュアルモードでのみ機能するマッピングを作るには、
":vmap"を使います:

    :vmap <F3> <your mapping here>

さらなる情報については以下を参照してください。

    :help :vmap
    :help map-modes
    :help 40.1

                                                                faq-20.7
20.7. Vim script中で、すでに使われているキーと衝突しないようにどのキーを使うべ
      きかを知るには?

Vimはキーボードのほとんどのキーを使います。mapに<leader>プリフィックスを使うと
Vimのキーと重ならないようにキーを定義することができます。例:

    :map <leader>S <C-W>s
    :map <leader>j <C-W>j
    :map <leader>k <C-W>k

ここでデフォルトの<leader>はバックスラッシュ(\)で置き換えられます。そのため
ユーザーはこれらのマッピングを発動させるのに
        \s
        \j
        \k

を押すことになります。マップリーダーを好きな物に変えることができます:

    :let mapleader = ","

プラグインなどのスクリプトを書くときは、いつも以上に :map でなく :noremap を使
い、ユーザー定義マッピングの副作用を避けることが推奨されます。

さらなる情報については以下を参照してください。

    :help <Leader>
    :help <LocalLeader>
    :help write-plugin

                                                                faq-20.8
20.8. エスケープキーにマップするには?

":map"コマンドでエスケープキーを他のキーにマップすることができます。例えば、次
のコマンドはエスケープキーをCTRL-Oにマップします。

    :map <C-O> <Esc>

                                                                faq-20.9
20.9. あるキーを何もしないようにマップするには?

キーを<Nop>にマップすると、そのキーを押したときに何も起こらないようにすること
ができます。例えば、次のマッピングで<F7>が押されたとき何もしないようにすること
ができます。

    :map <F7> <Nop>
    :map! <F7> <Nop>

さらなる情報については以下を参照してください。

    :help <Nop>
    :help :map
    :help :map!
    :help map-modes

                                                                faq-20.10
20.10. Tabキーでテキストのブロックをインデントし、Shift-Tabでテキストのブロッ
       クをアンインデントするようにしたいです。このようなマップを作るには?
       この挙動はtextpadやVisual Studioなどに似ています。

以下のマッピングを使ってください:

    :inoremap <S-Tab> <C-O><LT><LT>
    :nnoremap <Tab> >>
    :nnoremap <S-Tab> <LT><LT>
    :vnoremap <Tab> >
    :vnoremap <S-Tab> <LT>

注意: <S-Tab>のマッピングはVimが正しいキーシーケンスを受け取るときのみ機能しま
す。これはGUIのVimの場合はたいてい当てはまります。

さらなる情報については以下を参照してください。

    :help :inoremap
    :help :nnoremap
    :help :vnoremap
    :help <S-Tab>
    :help i_CTRL-O
    :help >>
    :help <<
    :help <LT>

                                                                faq-20.11
20.11. 私のマッピングにおいて<CR>のような特殊文字が認識されません。
       特殊文字を認識するように設定するには?

'cpoptions'の値を確認してください:

    :set cpoptions?

このオプションがフラグ'<'を含んでいると、マッピングにおいて特殊文字が認識され
ません。'cpoptions'からフラグ'<'を除去してください:

    :set cpo-=<

また、'compatible'の値も確認してください:

    :se compatible?

'compatible'はオフになっていなければなりません:

    :se nocompatible

さらなる情報については以下を参照してください。

    :help 'cpoptions'
    :help 'compatible'

                                                                faq-20.12
20.12. マップ中で'|'を使って複数のコマンドを区切るには?

マップ中で'|'を使うにはバックスラッシュ(\)で'|'をエスケープします。

    :map _l :!ls \| more<CR>

次のコマンドも試してみてください:

    :map _l :!ls <bar> more<CR>

他の方法もあります。

さらなる情報については以下を参照してください。

    :help map_bar

                                                                faq-20.13
20.13. その最後が他のマッピング/短縮入力の始まりとなっているマッピング/短縮
       入力があります。最初のものを入力したとき、2番目のが展開しないようにする
       には?

":map lhs rhs"でなく":noremap lhs rhs"を使ってください。短縮入力については
"noreabbrev lhs rhs"です。プリフィックス"nore"はマッピングや短縮入力が再帰的に
展開されるのを防ぎます。

さらなる情報については以下を参照してください。

    :help :noremap
    :help :noreabbrev

                                                                faq-20.14
20.14. ときどきキーが処理されるのに1秒程度かかるのはなぜですか?

そのキーに対してマッピングが定義されていないことを次のコマンドで確かめてくださ
い:

    :map <key>

もしこのキーにマッピングが定義されていて、マッピングが1文字以上を含んでいるな
ら、Vimはそれがマッピングの一部かどうかを判定するために、次の文字が押されるの
を待ちます。例えば、"ab"というマッピングをしているとします。そして"a"を押すと
Vimは次のキーが押されるのを待ちます。次のキーが"b"ならvimはこのマッピングを実
行します。そうでなければvimは"a"とその次のキーを通常どおりに処理します。
'timeout'がオンになっていると(それがデフォルトです)、Vimは'timeoutlen'で指定さ
れた時間(デフォルトは1秒)だけ待ったのちタイムアウトします。

さらなる情報については以下を参照してください。

    :help map-typing
    :help 'timeoutlen'
    :help 'ttimeoutlen'
    :help 'timeout'
    :help 'ttimeout'
    :help vt100-cursor-keys
    :help slow-fast-terminal

                                                                faq-20.15
20.15. ビジュアル選択したテキストに対して外部コマンドを実行するマッピングを作
       るには?

":vmap"コマンドでビジュアルモードでのマッピングを作ることができます。マップの
コマンドシーケンスの中で、最初にそのテキストをヤンクしなければなりません。ヤン
クされたテキストはレジスタ"で取得できます。そしてこのレジスタの中身を使って外
部コマンドを実行することができます。例えば、外部コマンド"perldoc"を選択された
テキストに対して実行するには、次のマッピングを使います:

    :vmap <F7> y:!exec "!perldoc '" . @" . "'"<CR>

選択されたテキストでなく、ビジュアルモード中でマッピングを実行したいなら次のコ
マンドを使います:

    :vmap <F7> :<C-U>!perldoc <cword><CR>

このマッピングは選択されたテキストでなく、カーソル下の単語を使います。外部コマ
ンド"perldoc"を実行する前に<C-U>としてることに注意してください。この<C-U>はビ
ジュアルモードで選択されたテキストの範囲がコマンドラインに表示されているのを消
すために使われています。<C-U>を使って選択範囲を消さないと、外部コマンドの出力
が選択されたテキストを置き換えてしまいます。

さらなる情報については以下を参照してください。

    :help :vmap
    :help quote_quote
    :help let-register
    :help c_CTRL-U
    :help :!cmd

                                                                faq-20.16
20.16. <Tab>キーの機能を保ったままCtrl-Iにマッピングするには?

Ctrl-Iと<Tab>は同じキーコードを生成します。そのため、VimはCtrl-Iと<Tab>を区別
することができません。Ctrl-Iにマッピングすると、<Tab>キーにも同様にマッピング
されます(逆も同様です)。これと同じ制限がCtrl-[と<Esc>にも適用されます。

さらなる情報については以下を参照してください。

    :help keycodes


=============================================================================
                                                                faq-21
SECTION 21 - 短縮入力

                                                                faq-21.1
21.1. スペリングを間違えた単語を自動的に修正するには?

短縮入力を使ってスペリングを間違えた単語を自動的に修正することができます。例え
ば、次の短縮入力で"teh"を"the"に修正することができます:

    :abbreviate teh the

挿入モード、置換モード、コマンドラインモードで短縮入力が利用できます。

さらなる情報については以下を参照してください。

    :help 24.7
    :help abbreviations
    :help Q_ab

                                                                faq-21.2
21.2. 複数行の短縮入力を作るには?

キーコード"<CR>"を埋め込めば、複数行の短縮入力を作ることができます:

    iabbrev #c --------------<CR>-- Date:<CR>--<CR>---------

この短縮入力によって、#cとタイプすると次のテキストに展開されます:

--------------
-- Date:
--
---------

さらなる情報については以下を参照してください。

    :help abbreviations

                                                                faq-21.3
21.3. 短縮入力が展開されたとき、展開されたテキストの末尾に余計なスペースが入っ
      てしまいます。これを防ぐには?

短縮入力をCTRL-]を押して展開すれば、展開されたテキストの末尾に余計なスペースが
入るのを防ぐことができます。

別の方法としては、次の関数とコマンドを使うことができます:

function! Eatchar(pat)
    let c = nr2char(getchar())
    return (c =~ a:pat) ? '' : c
endfunction
command! -nargs=+ Iabbr execute "iabbr" <q-args> . "<C-R>=Eatchar('\\s')<CR>"

こうしておいて、組み込みの"iabbrev"の代わりに新しいコマンド"Iabbr"を使って短縮
入力を定義します。このコマンドを使うと、テキストを展開した後、次に入力された文
字が捨てられます。

さらなる情報については以下を参照してください。

    :help abbreviations

                                                                faq-21.4
21.4. 現在の日付・時刻を挿入するには?

strftime()を使えば現在の日付・時刻のタイムスタンプを挿入することができます。例
えば、次の短縮入力を使います:

    iabbrev dts <C-R>=strftime("%y/%m/%d %H:%M")<CR>

この短縮入力を使うと、挿入モードでdtsと入力するとそれがタイムスタンプに展開さ
れます。

この短縮入力の別の形を以下に列挙します:

    iabbrev mdyl <C-R>=strftime("%a %d %b %Y")<CR>
    iabbrev mdys <C-R>=strftime("%y%m%d")<CR>
    iabbrev mdyc <C-R>=strftime("%c")<CR>
    iabbrev hml  <C-R>=strftime("%d/%m/%y %H:%M:%S")<CR>
    iabbrev hms  <C-R>=strftime("%H:%M:%S")<CR>

さらなる情報については以下を参照してください。

    :help strftime()
    :help i_CTRL-R

                                                                faq-21.5
21.5. 挿入モードで短縮入力が展開されるのを防ぐには?

短縮された単語の後にCTRL-Vを押してから次の文字を入力すれば、それが展開されるの
を防ぐことができます。

さらなる情報については以下を参照してください。

    :help abbreviations


=============================================================================
                                                                faq-22
SECTION 22 - レコーディングと繰り返し

                                                                faq-22.1
22.1. 編集操作(挿入、削除、ペースト等)を繰り返すには?

'.'を使えば最後の編集操作を繰り返すことができます。これは挿入、削除、変更、
ペーストなどの単純な変更を繰り返します。

さらなる情報については以下を参照してください。

    :help 04.3
    :help single-repeat
    :help Q_re


                                                                faq-22.2
22.2. キーシーケンスを記録し、繰り返すには?

ノーマルモードで'q'を使うとキーシーケンスを記録し、それをレジスタに保存するこ
とができます。例えば、ノーマルモードでqを押し、続けてレジスタ名{0-9a-bA-Z"}
押すとレコーディングが始まります。レコーディングを終了するには、もう一度qを押
します。記録されたキーシーケンスを再生するには、@に続けてレジスタ名を押しま
す。例. @a。

別の方法としてはコマンドライン引数"-w"をつけてVimを起動します。

    $ vim -w <file_name>

するとVimはこのセッション中にタイプされた文字全てを指定されたファイル
"file_name"に記録します。コマンドライン引数"-s"でそのファイルを指定すると、そ
れを再生することができます:

    $ vim -s <file_name>

さらなる情報については以下を参照してください。

    :help 10.1
    :help recording
    :help -w
    :help -s

                                                                faq-22.3
22.3. 記録したキーシーケンスを編集するには?

記録したキーシーケンスはレジスタに保存されます。そのレジスタの中身をバッファに
ペーストし、そのテキストを編集して最後レジスタにヤンクすることができます。
また、":let"でもレジスタを修正することができます。例:

    :let @a = "iHello World\<Esc>"

さらなる情報については以下を参照してください。

    :help recording
    :help 10.1
    :help let-register
    :help <>
    :help 'cpoptions'

                                                                faq-22.4
22.4. 記録したキーシーケンスをファイルに保存するには?

記録されたキーシーケンスはレジスタに保存されます。そのレジスタの中身をバッファ
にペーストすることができます。そしてそのバッファをファイルに保存します。ペース
トしたテキストを修正して再度レジスタにヤンクして記録したキーシーケンスを修正す
ることもできます。例えば、qa ..... qとしてキーシーケンスを記録したとします。
記録したキーシーケンスはレジスタ'a'に保存されます。"apとするとレジスタ'a'の中
身をペーストすることができます。

さらなる情報については以下を参照してください。

    :help recording
    :help 10.1

                                                                faq-22.5
22.5. レジスタ0にキーシーケンスを保存しています(つまり q0 .... q)。
      記録したキーシーケンスの中でテキストをヤンクしています。一度そのキーシー
      ケンスを再生すると、もうそれを再現することができません。

レジスタ0は最後のヤンクしたテキストを保持します。記録したキーシーケンス中でヤ
ンクが行われたとき、レジスタ0はそのテキストで上書きされます。そのためレジスタ
0に記録したキーシーケンスは失われます。何か他のレジスタを使わねばなりません。

さらなる情報については以下を参照してください。

    :help registers


=============================================================================
                                                                faq-23
SECTION 23 - 自動コマンド

                                                                faq-23.1
23.1. 読み込み専用ファイルを修正しようとしたときにコマンドを実行するには?

自動コマンドFileChangedROを使えば、読み込み専用ファイルが修正されたときにコマ
ンドを実行できます。例えば、このイベントを使って読み込み専用ファイルをチェック
アウトすることができます:

    :autocmd FileChangedRO * call MyCheckoutFunction()

さらなる情報については以下を参照してください。

    :help FileChangedRO

                                                                faq-23.2
23.2. あるバッファに入るときに毎回コマンドを実行するには?

自動コマンドイベントBufEnterを使うと、あるバッファに入る度にコマンドを実行する
ことができます。例:

    :autocmd BufEnter *.c set formatoptions=croqt

さらなる情報については以下を参照してください。

    :help BufEnter


                                                                faq-23.3
23.3. あるウィンドウに入るときに毎回コマンドを実行するには?

自動コマンドイベントWinEnterを使えば、あるウィンドウに入る度にコマンドを実行す
ることができます。例:

    :autocmd WinEnter *.c call MyFunction()

さらなる情報については以下を参照してください。

    :help WinEnter

                                                                faq-23.4
23.4. autocmd中でその自動コマンドが実行されているファイルの名前やバッファ番号
      を知るには?

特殊な単語<afile>または<abuf>を使えばautocmd中でその自動コマンドが実行されてい
るファイル名やバッファ番号を取得することができます。

さらなる情報については以下を参照してください。

    :help :<afile>
    :help :<abuf>
    :help :<amatch>

                                                                faq-23.5
23.5. Vimがフォーカスを失ったとき、変更されたバッファ全てを自動的に保存する
      には?

FocusLostイベントに対して自動コマンドを定義すれば、Vimがフォーカスを失う度に変
更されたバッファ全てを保存することができます:

    :autocmd FocusLost * wall

さらなる情報については以下を参照してください。

    :help FocusLost
    :help :wall

                                                                faq-23.6
23.6. Vimを終了するときにクリーンアップ用の関数を実行するには?

VimLeaveイベントを使えば、Vimが終了する直前に関数を実行することができます。


    :autocmd VimLeave * call MyCleanupFunction()

さらなる情報については以下を参照してください。

    :help VimLeave


=============================================================================
                                                                faq-24
SECTION 24 - 構文強調

                                                                faq-24.1
24.1. 構文強調をオン・オフにするには?

デフォルトでは構文強調はオフにされています。構文強調をオンにするには次のコマン
ドのどれかを使います:

    :syntax enable

または

    :syntax on

構文強調を無効にするには、次のコマンドを使います:

    :syntax off

さらなる情報については以下を参照してください。

    :help 06.1
    :help 06.4
    :help :syntax-enable
    :help :syntax-on
    :help :syn-clear

                                                                faq-24.2
24.2. 背景色と文字色を変えるには?

背景色と文字色には強調グループ"Normal"が使われます。文字色・背景色を変える
には、強調グループ"Normal"を変更しなければなりません。例えば、背景色を青に、
文字色を白にするには、次のようにします:

    :highlight Normal ctermbg=blue ctermfg=white guibg=blue guifg=white

もしMotifまたはAthena版のGVimを使っているなら、.Xdefaultsファイル中の文字色と
背景色のリソース名を変更してもよいでしょう:

    Vim.foreground:     Black
    Vim.backround:      Wheat

{訳注: Vim.background の間違い}

また、コマンドライン引数"-foreground"と"-background"を指定して文字色と背景色
を指定することもできます。これらの引数はMotifとAthena版でだけサポートされてい
ます:

    $ gvim -foreground Black -background Wheat

さらなる情報については以下を参照してください。

    :help :highlight
    :help .Xdefaults
    :help -gui

                                                                faq-24.3
24.3. 暗い/明るい背景色に合うように色を変えるには?

'background''dark''light'に変えれば、それぞれ暗い/明るい背景に合うように
強調色を変えることができます:

    :set background=dark

さらなる情報については以下を参照してください。

    :help 'background'
    :help 6.2

                                                                faq-24.4
24.4. ":set number"をしたときに表示される行番号の色を変えるには?

行番号の表示には強調グループLineNrが使われます。現在設定されている色を表示する
にはこうします

    :hi LineNr

この色を変えるには、強調グループLineNrを変更します。例:

    :hi linenr guifg=red guibg=black

こうするとGVimでは黒い背景の上に赤い数字で表示されるようになります。

さらなる情報については以下を参照してください。

    :help :highlight

                                                                faq-24.5
24.5. ビジュアルモードで選択された範囲の背景色を変えるには?

強調グループ'Visual'を変更すれば、ビジュアルモードで選択された範囲の色を変える
ことができます:

    :highlight Visual guibg=red

さらなる情報については以下を参照してください。

    :help :highlight
    :help hl-Visual

                                                                faq-24.6
24.6. オプション'list'で表示した特殊文字(タブ、行末の空白、行末など)に色をつけ
      るには?

強調グループ"NonText"と"SpecialKey"を変えれば'list'によって表示された特殊文字
に色をつけることができます:

    :highlight NonText guibg=red
    :highlight SpecialKey guibg=green

オプション'listchars'中の"eol", "extend", "precedes"に対しては"NonText"が使わ
れます。"tab"と"trail"には"SpecialKey"が使われます。

さらなる情報については以下を参照してください。

    :help 'listchars'
    :help hl-NonText
    :help hl-SpecialKey

                                                                faq-24.7
24.7. 毎回同じカラースキームを使うように.vimrc/.gvimrcで設定するには?

.vimrcや.gvimrc中で":colorscheme"を使えばカラースキームを指定することができま
す:

    colorschme evening

さらなる情報については以下を参照してください。

    :help :colorscheme

                                                                faq-24.8
24.8. 正しく構文強調されません。ファイルの一部が強調されなかったり、間違って強
      調されてしまいます。

Vimは構文強調する際にファイル全体をパースすることはしません。表示してされてい
る場所からパースが始まります。これによって多大な時間が節約できますが、ときどき
間違って色づけされることもあります。これを修正する単純な方法は、CTRL-Lを押して
画面を再描画することです。または少し上にスクロールしてから下に戻ってきます。
このコマンドを使うこともできます:

    :syntax sync fromstart

注意: これを実行すとスクリーンの描画が相当遅くなります。

さらなる情報については以下を参照してください。

    :help :syn-sync
    :help :syn-sync-first

                                                                faq-24.9
24.9. 対応する括弧を強調する組み込みの関数はありますか?

ありません。Vimには対応する括弧を強調する機能はありません。Charles Campbellが
作ったプラグインを試してみてもよいでしょう:


対応する括弧には'%'キーを使えばジャンプできます。挿入モードで一時的に対応する
括弧にジャンプするには'showmatch'をセットします。

{訳注: Vim7からはmatchparen.vimが付属し、カーソルが括弧の上に乗ると、自動的に
       対応する括弧が強調されるようになった。
       :h matchparen}

さらなる情報については以下を参照してください。

    :help %
    :help 'showmatch'
    :help 'matchtime'
    :help 'matchpairs'

                                                                faq-24.10
24.10. Cのコメントの構文強調をオフにするには?

次のコマンドを使うとCのコメントの構文強調をオフにすることができます:

    :highlight clear comment

さらなる情報については以下を参照してください。

    :help c-syntax

                                                                faq-24.11
24.11. Vimに付属する標準の構文ファイルに私自身の構文拡張を加えるには?

あなたの拡張を追加する場合、Vimに付属の構文ファイルそのものを修正するべきでは
ありません。次のVimのバージョンをインストールしたとき、その変更が失われてしま
います。代わりに、~/.vim/after/syntaxディレクトリに元の構文ファイルと同名の
ファイルを作り、そこにあなたの拡張を加えるべきです。

さらなる情報については以下を参照してください。

    :help mysyntaxfile-add
    :help 'runtimepath'

                                                                faq-24.12
24.12. Vimに付属の標準の構文ファイルを独自の構文ファイルで置き換えるには?

元の構文ファイルと同名のファイルを作成し、ランタイムの構文ディレクトリに置けば
標準の構文ファイルに置き換えることができます。例えば、Unixシステムにおいて構文
ファイルc.vimを置き換えるには、新しいc.vimを~/.vim/syntaxに置きます。
MS-Windowsシステムにおいては新しい構文ファイルを$HOME/vimfiles/syntaxまたは
$VIM/vimfiles/syntaxディレクトリに置きます。

さらなる情報については以下を参照してください。

    :help mysyntaxfile-replace
    :help 44.11
    :help mysyntaxfile

                                                                faq-24.13
24.13. 特定の桁以降の全ての文字を強調するには?

":match"を使えば特定の桁以降の全ての文字を強調することができます:

    :match Todo '\%>75v.\+'

これは75桁目以降の全ての文字を強調します。

さらなる情報については以下を参照してください。

    :help :match
    :help /\%v
    :help /\+
    :help /.

                                                                faq-24.14
24.14. ソースファイル(.c, .hなど)を構文強調つきでHTMLファイルに変換するには?

2html.vimを使えばソースファイルを構文強調つきでHTMLファイルに変換することがで
きます。次のコマンドを実行してください:

    :runtime! syntax/2html.vim

さらなる情報については以下を参照してください。

    :help convert-to-HTML

                                                                faq-24.15
24.15. 現在の強調グループ定義を全て表示するには?

現在の強調グループ定義を全て表示するには":highlight"を(引数無しで)実行します。

さらなる情報については以下を参照してください。

    :help :highlight


=============================================================================
                                                                faq-25
SECTION 25 - Vim script を書く

                                                                faq-25.1
25.1. 読み込まれているスクリプトを全て表示するには?

":scriptnames"を使えば読み込まれているスクリプトを全て表示することができ
ます:

    :scriptnames

さらなる情報については以下を参照してください。

    :help :scriptnames

                                                                faq-25.2
25.2. Vim scriptをデバッグするには?

VimはVimプラグインやスクリプトをデバッグするための原始的なデバッガを備えていま
す。このデバッガを使うとブレークポイントを設定したり、プラグインの関数をステッ
プ実行できます。

さらなる情報については以下を参照してください。

    :help debug-scripts
    :help -D

                                                                faq-25.3
25.3. あるオプションを設定したスクリプト/プラグインを探すには?

":verbose"を使えば最後にあるオプションを設定したプラグイン/スクリプトを探すこ
とができます。例:

    :verbose set textwidth?

さらなる情報については以下を参照してください。

    :help :set-verbose
    :help :verbose

                                                                faq-25.4
25.4. (おそらくスクリプトを実行中に)エラーやメッセージが出るのですが、すぐに消
      えてしまいます。このメッセージをもう一度表示するには?

":messages"を使えば以前のメッセージを表示することができます。

    :messages

さらなる情報については以下を参照してください。

    :help :messages
    :help :echoerr
    :help :echomsg
    :help message-history

                                                                faq-25.5
25.5. プラグイン固有の情報を保存し、Vimを再起動したときそれを復元するには?

Vimは大文字で始まり、小文字を含まないグローバル変数を保存し、復元します。この
機能を有効化するには、'viminfo'がフラグ'!'を含んでいなければなりません。Vimは
これらの変数をviminfoファイルに保存します。

さらなる情報については以下を参照してください。

    :help 'viminfo'
    :help viminfo-file
    :help variables

                                                                faq-25.6
25.6. 関数の中から挿入モードを開始するには?

":startinsert"を使えば関数の中から挿入モードを開始することができます。

さらなる情報については以下を参照してください。

    :help :startinsert

                                                                faq-25.7
25.7. 関数の中でカーソル位置を動かすには?

関数cursor()を使えばカーソルを動かすことができます。

        call cursor(lnum, col)

次のコマンドを使ってもカーソル位置を変えることができます:

        exe "normal! " . lnum . "G" . col . "|"

さらなる情報については以下を参照してください。

    :help cursor()
    :help bar

                                                                faq-25.8
25.8. .vimrcファイルの中で環境変数の値をチェックするには?

Vim script/関数の中で環境変数を使うには、環境変数名の前に'$'をつけます:

    if $EDITOR == 'vi'
    endif

さらなる情報については以下を参照してください。

    :help expr-env

                                                                faq-25.9
25.9. 環境変数が定義されているかどうかをチェックするには?

exists()を使えば環境変数の存在をチェックすることができます。

    if exists("$MY_ENV_VAR")
    endif

さらなる情報については以下を参照してください。

    :help exists()
    :help expr-env

                                                                faq-25.10
25.10. Vimの組み込み関数を呼ぶには?

":call"コマンドを使えばVimの組み込み関数を呼び出すことができます:

    :call cursor(10,20)

":echo"を使えば関数の戻り値を表示することができます:

    :echo char2nr('a')

":let"を使えば関数の戻り値を変数に代入することができます:

    :let a = getline('.')

関数の戻り値をレジスタに保存するには、次のようにします:

    :let @a = system('ls')

上のコマンドは'ls'コマンドの戻り値をレジスタ'a'に保存します。

{訳注: 上のコマンドは外部プログラム'ls'の標準出力への出力をレジスタに保存す
       る。}

さらなる情報については以下を参照してください。

    :help :call
    :help :echo
    :help :let
    :help :let-register
    :help user-functions
    :help usr_41.txt

                                                                faq-25.11
25.11. Vim script中でノーマルコマンドを使っています。そのコマンドに対して
       ユーザー定義のマッピングが働くのを防ぎ、そのノーマルモードコマンドが
       Vim の標準の機能を果たすようにするには?

スクリプト中でノーマルモードコマンドを使うときは"normal!"を使えばよいでし
ょう。これはノーマルモードコマンドの標準の機能を使い、ユーザー定義マッピングは
作用しません。

さらなる情報については以下を参照してください。

    :help :normal

                                                                faq-25.12
25.12. ビジュアルモードで現在選択されているテキストを変数やレジスタに入れるに
       は?

ビジュアルモードで選択されているテキストを変数に取得するには、そのテキストをレ
ジスタにヤンクし、その後そのレジスタの中身を変数に代入します:

    :normal! gvy
    :let myvar = @"

上のコマンドはビジュアルモードで選択されたテキストを変数"myvar"にコピーします。

次のコマンドを使うこともできます:

    :normal! gv"*y

上のコマンドは、gvで最後にビジュアルモードで選択されたテキストを選択し、コマン
ドの残りの部分で選択されたテキストをレジスタ*(クリップボード)にコピーします。
別の方法としては、'guioptions'にフラグ'a'をセットして、選択されたテキストを自
動的にレジスタ*に入れるようにしてもよいでしょう。
これをマップの一部分として実行するには、以下のようなコマンドを使います:

    :vmap <F3> "*y:call ...

さらなる情報については以下を参照してください。

    :help gv
    :help :normal
    :help let-@
    :help quotestar
    :help clipboard
    :help registers

                                                                faq-25.13
25.13. 変数'myvar'にテキストが入っています。この変数を":s"中で使って'mytext'
       というテキストを置換したいのですが、どうすればいいですか?

"execute"コマンドを使えば変数を評価することができます:

    :execute '%s/mytext/' . myvar . '/'

さらなる情報については以下を参照してください。

    :help :execute

置換コマンド中で変数を評価するには"\="を使うこともできます:

    :%s/mytext/\=myvar/

さらなる情報については以下を参照してください。

    :help sub-replace-special

                                                                faq-25.14
25.14. 変数"bno"がバッファ番号を保持しています。この変数を使って対応するバッ
       ファを開くには?

":buffer"は変数名を受け付けません。このコマンドはバッファ番号かバッファ名のみ
を受け付けます。変数を評価して対応する値にするために":execute"を使わねばなりま
せん。例:

    :execute "buffer " . bno

さらなる情報については以下を参照してください。

    :help :execute

                                                                faq-25.15
25.15. オプションの値を変数に保存するには?

オプション名の前に'&'をつけると、"let"でそのオプションの値を変数に代入すること
ができます。例えば、オプション'textwidth'の値を変数"old_tw"に保存するには次の
コマンドを使います:

    :let old_tw = &tw

その逆、つまり'textwidth'に"old_tw"に保存された値をセットするには次のコマンド
を使います:

    :let &tw = old_tw

さらなる情報については以下を参照してください。

    :help expr-option
    :help let-option

                                                                faq-25.16
25.16. 関数の中でテキストをコピーし、バッファに挿入しました。関数の中でそのテ
       キストをインデントするには?

次のコマンドを使えば、たった今挿入したテキストを整形することができます:

    :normal '[=']

さらなる情報については以下を参照してください。

    :help '[
    :help ']
    :help =
    :help :normal

                                                                faq-25.17
25.17. Vim script中でカーソル下の文字を取得するには?

getline()と文字列のインデックス[]を使います:

    :echo getline(".")[col(".") - 1]

上のコマンドにおいてgetline(".")は現在行のテキストを返します。文字列のインデッ
クスは0から始まり、"string[index]" という記法で文字列中からインデックスを指定
して1つの文字を取得できます。col(".")はカーソル位置の桁を返します。ここでは文
字列中の目的の文字を取得するために調整されています。

別の方法としては、以下の一連のコマンドによってもカーソル下の文字を取得でき
ます:

    normal! vy
    let ch=@"

注意: 上のコマンドはマーク '< と '> を変更します。

さらなる情報については以下を参照してください。

    :help getline()
    :help col()
    :help expr-[]

                                                                faq-25.18
25.18. 拡張子を除いたカレントファイル名を取得するには?

拡張子を除いたカレントファイル名を取得するにはこうします:

    :echo expand("%:r")

いくつかのコマンドでは、ファイル名の修飾子を直接使うことができます:

    :cd %:p:h
    :!gcc -o %:r.o %

さらなる情報については以下を参照してください。

    :help filename-modifiers
    :help expand()
    :help cmdline-special
    :help fnamemodify()

                                                                faq-25.19
25.19. カレントファイルのベース名(basename)を取得するには?

ファイル名修飾子 :t を使えばカレントファイルのベース名(basename)を取得すること
ができます:

    :echo expand("%:t")

さらなる情報については以下を参照してください。

    :help filename-modifiers

                                                                faq-25.20
25.20. 関数の結果をカレントバッファに挿入するには?

挿入モードにおいて次のコマンドで関数の戻り値を挿入することができます:

    <C-R>=MyFunc()

注意: これは関数の戻り値を挿入するだけです。

さらなる情報については以下を参照してください
    :help i_CTRL-R
    :help i_CTRL-R_CTRL-R
    :help i_CTRL-R_CTRL-O
    :help expression

                                                                faq-25.21
25.21. 関数の中で外部プログラムを呼ぶには?

関数の中で外部プログラムを呼ぶにはいくつかの方法があります。組み込み関数
system()を使うと、外部コマンドを起動し、出力を取得することができます:

    :let output = system("ls")

また、exコマンド"!"を使って外部コマンドを実行することもできます。

さらなる情報については以下を参照してください。

    :help system()
    :help :!
    :help 10.9

                                                                faq-25.22
25.22. ":!"で実行したプログラムが返すステータス値を取得するには?

組み込み変数v:shell_errorを使えば最後に実行したシェルコマンドが返すステータス
値を取得することができます。

さらなる情報については以下を参照してください。

    :help v:shell_error

                                                                faq-25.23
25.23. カレントバッファが変更されているかどうかを知るには?

オプション'modified'の値を見ればカレントバッファが変更されているかどうかを知る
ことができます:

    :set modified?

スクリプト中でも'modified'の値を知ることができます:

    if &modified
        echo "File is modified"
    endif

さらなる情報については以下を参照してください。

    :help 'modified'

                                                                faq-25.24
25.24. スクリプト中でノーマルコマンドの中に改行文字を使いたいです。改行文字を
       指定するには?

":execute"を使えばノーマルモードコマンド中で特殊文字を使うことができます:

    :execute "normal \<CR>"
    :execute "normal ixxx\<Esc>"

さらなる情報については以下を参照してください。

    :help :execute
    :help expr-quote

                                                                faq-25.25
25.25. スクリプト中で長い行を次行に継続するには?

スクリプト中で長い行を継続するには、次行の最初にバックスラッシュ("\")をつけま
す。例:
        :set comments=sr:/*,mb:*,el:*/,
                     \://,
                     \b:#,
                     \:%,
                     \n:>,
                     \fb:-

{訳注: 原文には例が入っていなかったので :help からコピペしてきた。}

さらなる情報については以下を参照してください。

    :help line-continuation

                                                                faq-25.26
25.26. "execute 'echo Myfunc()'"として自作の関数を呼ぼうとすると、カーソルがカ
       レントバッファの先頭に移動してしまいます。なぜ?

":execute"は引数で指定されたノーマルコマンドを実行します。次のコマンドでは:

    :execute "echo Myfunc()"

"echo Myfunc()"は0を返します。":execute"コマンドはノーマルモードコマンドの"0"
を実行します。これはカーソルをファイルの先頭に移動させます。関数を呼ぶには
":execute"でなく":call"を使ってください:

    :call Myfunc()


{訳注: このQ&Aは間違っている?
       :executeはexコマンドを実行する。
       1番目のコマンドはMyfunc()を呼んでその戻り値をechoするはず。}

さらなる情報については以下を参照してください。

    :help :call
    :help :execute
    :help :echo
    :help user-functions
    :help 41.5
    :help 41.6

                                                                faq-25.27
25.27. レジスタの中身を実行するには?

レジスタ(例えばレジスタ'a'とする)にVimのコマンドをヤンクしてある場合、そのレジ
スタの中身を次のコマンドで実行することができます:

    :@a

または
    :exe @a


さらなる情報については以下を参照してください。

    :help :@

                                                                faq-25.28
25.28. 関数やマップを呼んだ後に'u'キーを押してアンドゥするとその関数/マップに
       よってなされた変更全てをアンドゥします。なぜ?

関数やマップを呼ぶと、その関数/マップによってなされた操作は1つの操作として扱
われます。'u'を押して最後の操作をアンドゥすると、関数/マップによってなされた
変更は全て元に戻ります。

さらなる情報については以下を参照してください。

    :help undo-redo
    :help map-undo

                                                                faq-25.29
25.29. s:つきで定義された関数(スクリプトローカル関数)を別のスクリプト/プラグ
       インから呼ぶには?

関数名へのプリフィックス s: は関数をスクリプトローカルにするために使われます。
スクリプトローカル関数はそのスクリプト中からのみ呼ぶことができ、他のスクリプト
からは呼び出せません。他のプラグイン/スクリプトから呼び出せる関数を定義するに
は、s: をつけずに関数を定義します。

さらなる情報については以下を参照してください。

    :help script-variable
    :help script-local
    :help :scriptnames

                                                                faq-25.30
25.30. 読み込んだスクリプトをun-sourceするには?言い替えると、スクリプトを読み
       込んだことによって実行されたコマンドを全て戻すには?

スクリプトを読み込んだことによって実行されたコマンドを全て戻すことはできませ
ん。

さらなる情報については以下を参照してください。

    :help :source


=============================================================================
                                                                faq-26
SECTION 26 - プラグイン

                                                                faq-26.1
26.1. ファイル形式ごとに異なるオプションを設定するには?

ファイル形式別プラグインを作れば、ファイル形式ごとに異なるオプションを設定する
ことができます。まず最初に次のコマンドでファイル形式別プラグインを有効にしてく
ださい:

    :filetype plugin on

ファイル形式別プラグインは、Vimでその形式のファイルを作成したり開く度に読み込
まれるVim scriptです。例えば、Cプログラム(ファイル形式'c')を編集するときは常
'textwidth'を80にするには、次のファイルのどれかを作ります:

        ~/.vim/ftplugin/c.vim (Unix)
        %HOME%\vimfiles\ftplugin\c.vim (Windows)

そしてその中に次のテキストを書いておきます:

        setlocal textwidth=80

自動コマンドを使っても特定のファイル形式を編集するときに特定のオプションを設定
することができます。例えば、*.txtファイルを編集するときだけ'textwidth'を75に設
定するには次のコマンドを使います:

    autocmd BufRead *.txt setlocal textwidth=80

さらなる情報については以下を参照してください。

    :help filetype-plugin
    :help add-filetype-plugin
    :help autocmd
    :help 40.3


                                                                faq-26.2
26.2. プラグイン/構文ファイル/インデントファイル/カラースキーム/ファイルタイプ
      プラグインをダウンロードしました。Vimがこれらのファイルを読み込むように
      するには、どこにコピーすればいいですか?

ランタイムファイル(プラグイン、構文ファイル、インデントファイル、カラースキー
ム、ファイル形式別プラグインなど)は'runtimepath'で指定されたディレクトリのうち
どれかの下に置きます。'runtimepath'の現在の値を知るには次のコマンドを使います
:

    :set runtimepath

Unixシステムでは、通常これは"$HOME/.vim"ディレクトリになります。MS-Windowsシス
テムでは、通常これは$VIM\vimfilesまたは$HOME\vimfilesディレクトリになります。
ランタイムファイルはその種類によって、ランタイムディレクトリ下の決まったディレ
クトリに置かねばなりません。そのディレクトリの名前は以下のとおりです:

    colors/   - カラースキームファイル
    compiler/ - コンパイラファイル
    doc/      - ドキュメント
    ftplugin/ - ファイル形式別プラグイン
    indent/   - インデントスクリプト
    keymap/   - キーマップファイル
    lang/     - メニューの翻訳
    plugin/   - プラグインスクリプト
    syntax/   - 構文ファイル
    tutor/    - vimtutorのファイル

さらなる情報については以下を参照してください。

    :help your-runtime-dir
    :help 'runtimepath'
    :help :runtime

                                                                faq-26.3
26.3. 既存のファイル形式別プラグインを拡張するには?

ディレクトリ$VIMRUNTIME/after/ftpluginまたは$VIMRUNTIME/ftpluginの下にファイル
を作ることによって、既存のファイル形式別プラグインを拡張することができます。
そのファイルの名前は既存のファイル形式別プラグインの名前と同じにすべきです。
この新しいファイルにあなたの拡張を書き加えます。

そのファイルをafter/ftpluginディレクトリに置くと、Vimはまず既存のファイルタイ
ププラグインを読み込み、その後にその新しいファイルを読み込みます。そのファイル
を$VIMRUNTIME/ftpluginディレクトリに置くと、Vimはまずその新しいファイルを読み
込み、その後に既存のファイル形式別プラグインを読み込みます。

さらなる情報については以下を参照してください。

    :help ftplugin-overrule
    :help filetype-plugin
    :help add-filetype-plugin
    :help 'runtimepath'

                                                                faq-26.4
26.4. プラグインの読み込みをオフにするには?

'loadplugins'をオフにすればプラグインを読み込まなくすることができます:

    :set noloadplugins

コマンドライン引数"--noplugin"を指定してもプラグインの読み込みを止めさせること
ができます:

    $ vim --noplugin

さらなる情報については以下を参照してください。

    :help 'loadplugins'
    :help --noplugin
    :help load-plugins

                                                                faq-26.5
26.5. ファイル形式別プラグインの読み込みをオフにするには?

デフォルトではvimはファイル形式別プラグインを読み込みません。ファイル形式別プ
ラグインを読み込むように設定するには次のコマンドを使います:

    filetype plugin on

ファイル形式別プラグインの読み込みをオフにするにはこうします:

    filetype plugin off

さらなる情報については以下を参照してください。

    :help filetype-plugin-on
    :help filetype-plugin-off
    :help :filetype

                                                                faq-26.6
26.6. 全てのファイル形式に対し、グローバルのファイル形式別プラグインでなされる
      設定を上書きするには?

ファイル形式イベントで引き起こされる自動コマンドを使います:

    au Filetype * set formatoptions=xyz

これは少なくともあなたのvimrc中の"filetype on"以降に行わねばなりません。あなた
の"myfiletypefile"ファイル中で行うのがベストです。そうすればこれは必ず最後に実
行されるようになります。

特定のファイル形式に対して設定を上書きしたいなら、~/.vim/after/ftpluginに元
のファイルと同名のファイルを作ります。例えば、ファイル形式別プラグインc.vimの
設定を上書きするには、~/.vim/after/ftpluginにc.vimを作り、そこに好みの設定を書
き込みます。

さらなる情報については以下を参照してください。

    :help ftplugin-overrule
    :help ftplugins
    :help myfiletypefile

                                                                faq-26.7
26.7. Vimのディレクトリブラウザープラグインを無効にするには?

ディレクトリブラウザープラグインを無効にするには、次の行を.vimrcに加えます:

    let loaded_explorer = 1

さらなる情報については以下を参照してください。

    :help file-explorer

                                                                faq-26.8
26.8. 特定のパターンにマッチする名前のファイルや拡張子に応じてファイル形式オ
      プションを設定するには?

特定のパターンにマッチする名前のファイルに対しては、自動コマンドを使って
'filetype'を設定します。例えば、拡張子'.x'を持つファイル全てに対して
'filetype'を'c'にするには次の自動コマンドを使います:

    autocmd! BufRead,BufNewFile *.x     setfiletype c

よりよい方法は、filetype.vimファイルを~/.vimディレクトリ(または'runtimepath'
指定されたディレクトリのどれか)に作ることです。そして次の行を書き加えます:

    " my filetype file
    if exists("did_load_filetypes")
        finish
    endif
    augroup filetypedetect
        au! BufRead,BufNewFile *.x       setfiletype c
    augroup END

さらなる情報については以下を参照してください。

    :help new-filetype
    :help 43.2
    :help :setfiletype


=============================================================================
                                                                faq-27
SECTION 27 - プログラムファイルを編集する

                                                                faq-27.1
27.1. C/C++のファイルに対してオートインデントを有効化するには?

ファイル形式に基づくインデントを有効化するには次を実行します:

    :filetype indent on

自動Cインデントだけを有効化したいならこうします:

    :set cindent

さらなる情報については以下を参照してください。

    :help 'cindent'
    :help C-indenting
    :help filetype

                                                                faq-27.2
27.2. C/C++のファイルに対するインデントをカスタマイズするには?

'cinoptions''cinkeys''cinwords'の値を変えれば、Cインデントをカスタマイズす
ることができます。

さらなる情報については以下を参照してください。

    :help 'cindent'
    :help 'cinoptions'
    :help 'cinkeys'
    :help 'cinwords'
    :help C-indenting
    :help cinoptions-values
    :help 'smartindent'

                                                                faq-27.3
27.3. オートインデント機能を無効化するには?

デフォルトではオートインデントは無効になっています。.vimrcか.gvimrcでオートイ
ンデントを有効化したのでしょう。オートインデントを無効化するには、

    :filetype indent off

または

    :set nocindent

とします。また、以下のオプションの設定を確認してください:

    :set autoindent?
    :set smartindent?
    :set indentexpr?

さらなる情報については以下を参照してください。

    :help 'cindent'
    :help filetype-indent-off
    :help 'autoindent'
    :help 'smartindent'
    :help 'indentexpr'

                                                                faq-27.4
27.4. オートインデントの際に挿入されるスペースの数を変えるには?

'shiftwidth'オプションを変えると、オートインデントに使われるスペースの数を変え
ることができます:

    :set shiftwidth=4

さらなる情報については以下を参照してください。

    :help 'shiftwidth'

                                                                faq-27.5
27.5. Cプログラムを編集しています。マクロ定義や変数を表示するには?

コマンド[dでマクロ定義を表示でき、[iで変数定義を表示することができます。

さらなる情報については以下を参照してください。

    :help [d
    :help [i
    :help include-search
    :help 29.4
    :help 29.5

                                                                faq-27.6
27.6. Cプログラムを編集しています。ブロックの内側から、そのブロックの開始位置
      や終了位置にジャンプするには?

コマンド[{でそのブロックの始まりにジャンプし、]}でそのブロックの終わりにジャン
プします。

さらなる情報については以下を参照してください。

    :help [{
    :help ]}
    :help various-motions

                                                                faq-27.7
27.7. C++ファイルで"//"コメントが自動的に挿入されるのを止めさせるには?

オプション'comments'の値を修正すればC++のコメント文字("//")が自動的に挿入され
るのを止めさせることができます。例:

    :set comments=sr:/*,mb:*,el:*/

さらなる情報については以下を参照してください。

    :help 'comments'
    :help format-comments

                                                                faq-27.8
27.8. 一連の行の行頭にコメント文字'#'をつけ加えるには?

最初に矩形ビジュアルモードを使って(CTRL-V)その行を全て選択します。'I'を押して
行頭に文字の挿入を開始します。コメント文字を挿入し、<Esc>を押して挿入モードを
終了します。すると入力された文字が選択された全ての行の行頭に挿入されます。

さらなる情報については以下を参照してください。

    :help visual-block
    :help blockwise-operators
    :help v_b_I

                                                                faq-27.9
27.9. Cのソースファイルに対応する名前のヘッダーファイルを開くには?

次のコマンドを使うと、Cソースファイルに対応する名前のヘッダーファイルを開くこ
とができます:

    :e %:t:r.h

次のコマンドで、そのファイルを分割したウィンドウで開くこともできます:

    :sp %:t:r.h

上のコマンドで、パーセント記号はカレントファイルの名前に展開されます。修飾子
":t"はファイル名の末尾(tail)に変換します。修飾子":r"はファイル名のルート(root)
に変換します。そして.hをつけて、最終的にヘッダーファイル名が得られます。

別のアプローチとしては、次のコマンドを使います:

    :sfind %:t:r.h

このコマンドはヘッダーファイルを'path'で指定されたディレクトリの中から探します。

さらなる情報については以下を参照してください。

    :help cmdline-special
    :help filename-modifiers
    :help :sfind
    :help 'path'

                                                                faq-27.10
27.10. コメントを入力しているとき、自動的にコメント文字を挿入するには?

コメントを入力しているとき自動的にコメント文字を挿入するには、'formatoptions'
にフラグ'r'と'o'を加えます。

    :set formatoptions+=ro

コメントを'textwidth'によって自動的に折り返すためにフラグ'c'をつけたり、コメン
トを"gq"コマンドで成形するためにフラグ'q'をつけてもよいでしょう:

    :set formatoptions=croq

さらなる情報については以下を参照してください。

    :help 30.6
    :help format-comments
    :help 'comments'
    :help fo-table


=============================================================================
                                                                faq-28
SECTION 28 - QuickFix

                                                                faq-28.1
28.1. Vimの中からプログラムをビルドするには?

":make"を使うとVim中からプログラムをビルドすることができます。":make"は
'makeprg'で指定されたプログラムを起動します。

さらなる情報については以下を参照してください。

    :help 30.1
    :help make_makeprg
    :help 'makeprg'
    :help 'makeef'
    :help :make
    :help quickfix
                                                                *faq-28.2*
28.2. Vim中からmakeコマンドを起動すると、コンパイラがプログラムをコンパイル
      してエラーメッセージを出力します。しかしコンパイルが終わると表示が消え
      てしまい、エラーメッセージをもう一度見るには :clist としなければなりま
      せん。このエラーメッセージを見るのに他の方法はありませんか?

":copen"や":cwindow"を使うと、コンパイラの出力を保持しているQuickFixウィンド
ウを開くことができます。そのウィンドウの中でエラーの行を選択すると、ソースコー
ド中の対応する行にジャンプすることができます。

さらなる情報については以下を参照してください。

    :help :copen
    :help :cwindow
    :help quickfix


=============================================================================
                                                                faq-29
SECTION 29 - 折り畳み

                                                                faq-29.1
29.1. 折り畳みの機能を拡張するには?

'foldexpr'を使えばユーザー指定の関数を使って折り畳みを作ることができます。
例えば、以下の形のサブルーチンを1行に折り畳むには:

    sub foo {
      my $barf;
      $barf = 3;
      return $barf;
    }

次のコマンドを使うことができます:

    set foldmethod=expr
    set foldexpr=MyFoldExpr(v:lnum)
    fun! MyFoldExpr(line)
        let str = getline(a:line)
        if str =~ '^sub\>'
            return '1'
        elseif str =~ '^}'
            return '<1'
        else
            return foldlevel(a:line - 1)
        endif
    endfun

さらなる情報については以下を参照してください。

    :help 'foldexpr'
    :help fold-expr

                                                                faq-29.2
29.2. 'foldmethod'をセットして折り畳みを有効化すると、全ての折り畳みが閉じてし
      まいます。これを防ぐには?

'foldlevelstart'をある値にセットすると、折り畳みがその値以上になったときのみ閉
じさせることができます。

    :set foldlevelstart=99

さらなる情報については以下を参照してください。

    :help 'foldlevelstart'
    :help 'foldlevel'
    :help fold-foldlevel

                                                                faq-29.3
29.3. ファイルの編集を開始したときにいくつの折り畳みが開かれた状態にするかをコ
      ントロールするには?

'foldlevelstart'を修正すれば、ファイルの編集を開始したときにいくつの折り畳みを
開くかをコントロールすることができます。全ての折り畳みを閉じた状態で編集を開始
するにはこうします:

    :set foldlevelstart=0

さらなる情報については以下を参照してください。

    :help 'foldlevelstart'

                                                                faq-29.4
29.4. マウスを使って折り畳みを開閉するには?

折り畳みを開閉するには、一番左の桁に表示された+と-という文字をクリックします。
それが機能するためには'foldcolumn'を0より大きい値に設定していなければなりませ
ん:

    :set foldcolumn=2

さらなる情報については以下を参照してください。

    :help 'foldcolumn'

                                                                faq-29.5
29.5. 閉じた折り畳みの表示に使われるテキストを変更するには?

'foldtext'によって閉じた折り畳みの表示に使われるテキストを変更することができま
す。

さらなる情報については以下を参照してください。

    :help 'foldtext'
    :help fold-foldtext
    :help 'fillchars'

                                                                faq-29.6
29.6. Vimを終了・再起動するとき、手動で作った折り畳みを保存・復元するには?

":mkview"を使えば手動で作った折り畳みを保存することができます。その後、
":loadview"でその折り畳みを復元することができます。これが機能するためには
'viewoptions'が"folds"を含んでいなければなりません。

さらなる情報については以下を参照してください。

    :help 28.4
    :help :mkview
    :help :loadview
    :help 'viewoptions'
    :help 'viewdir'
    :help :mksession
    :help 'sessionoptions'


=============================================================================
                                                                faq-30
SECTION 30 - 外部プログラムとの連携

                                                                faq-30.1
30.1. Vimのウィンドウの中でシェルを起動することはできますか?

現在のところ、Vimにはウィンドウの中でシェルや外部プログラムを実行する機能はあ
りません。

さらなる情報については以下を参照してください。

    :help shell-window

代替手段としては、Unixの"screen"ユーティリティか"splitvt"プログラムを試してみ
てもよいでしょう。

また、Brian Sturkによるvimshプラグインを使うとVimウィンドウの中でシェルを起動
することができます。これを使うためには、VimをPythonインターフェイス機能つきで
ビルドしなければなりません。さらなる情報については以下のURLを訪れてください:


                                                                faq-30.2
30.2. カーソル下の単語を外部プログラムに渡すには?

特別なキーワード<cword>を使うと、カーソル下の単語を外部コマンドに渡すことがで
きます。例:

    :!dict <cword>

さらなる情報については以下を参照してください。

    :help <cword>

                                                                faq-30.3
30.3. シェルコマンドの出力をVimのバッファに取り込むには?

":r !"を使えばシェルコマンドの出力をVimのバッファに取り込むことができます:

    :r !ls

さらなる情報については以下を参照してください。

    :help :r!

                                                                faq-30.4
30.4. カレントバッファの中身を外部プログラムにパイプで渡して、そのプログラムの
      出力でバッファを置き換えるには?

:!を使えばカレントバッファの中身を外部プログラムにパイプで渡して、そのコマンド
の出力でバッファの中身を置き換えることができます。例えば、Unixのソートコマンド
を使ってカレントバッファの中身をソートするには、次のようにします:

    :%!sort

10から20行目だけををソートするなら次のコマンドを使います:

    :10,20!sort

また、バッファを外部プログラムにパイプしたいが、バッファを出力で書き換えたくな
い場合はこうします:

    :w !sort

上のコマンドはバッファ全体をsortコマンドにパイプします。
注意: 'w'と'!'の間のスペースは必ず必要です。ある範囲の行だけをパイプするにはこ
うします:

    :10,20w !sort

上のコマンドは10から20行目をsortコマンドにパイプします。

さらなる情報については以下を参照してください。

    :help :range!
    :help 10.9
    :help :w_c

                                                                faq-30.5
30.5. ファイル中のあるセクションをソートするには?

あるセクションをUnixの"sort"ユーティリティにパイプしてそのファイルをソートする
ことができます。例:

    :5,100!sort


ビジュアルモードで選択した矩形範囲だけをソートするには、次のVim onlineのtipを
参照してください:

http://vim.sourceforge.net/tips/tip.php?tip_id=588

                                                                faq-30.6
30.6. Vimとslrnといっしょに使うステップ・バイ・ステップガイドはありますか?

VimとSlrnをいっしょに使うための情報については、以下のリンクを参照してください:



                                                                faq-30.7
30.7. Vimをページャとして使うには?

シェルスクリプト$VIMRUNTIME/macros/less.shを使うとVimをページャとして使うこと
ができます。これはVimの標準ディストリビューションの一部として同梱されていま
す。このシェルスクリプトは、lessライクなキーバインディングを実現するために
Vim script $VIMRUNTIME/macros/less.vimを使用しています。

さらなる情報については以下を参照してください。

    :help less

                                                                faq-30.8
30.8. Vimの中でUnixのmanページを見るには?

Vim標準ディストリビューションに同梱のman.vimを使えば、Vimの中でUnixのmanページ
を見ることができます。このプラグインを使うには、以下の行をvimrcファイルに追加
してください:

    runtime ftplugin/man.vim

また、Kキーを押すと、カーソル下のキーワードとともに'keywordprg'で指定された
プログラムを起動することができます。デフォルトでは'keywordprg'はカーソル下の
キーワードのmanを起動するように設定されています。

さらなる情報については以下を参照してください。

    :help man-plugin
    :help K
    :help 'keywordprg'

                                                                faq-30.9
30.9. Vimのdiff機能で使われるdiffコマンドを変更するには?

デフォルトではVimのdiff機能は'diff'コマンドを使います。'diffexpr'オプションを
変更すればこれを変えることができます。

さらなる情報については以下を参照してください。

    :help diff-diffexpr
    :help 'diffexpr'

                                                                faq-30.10
30.10. 折り畳みなしで差分モードを使うには?

次のコマンドラインを実行すると、2つのファイル名とともに起動し、折り畳み
なしで差分モードに入ります:

    $ vim -o file1 file2 "+windo set diff scrollbind scrollopt+=hor nowrap"

垂直ウィンドウ分割の方がいいなら、"-o"を"-O"に置き換えてください。

さらなる情報については以下を参照してください。

    :help vimdiff


=============================================================================
                                                                faq-31
SECTION 31 - GUIのVIM

                                                                faq-31.1
31.1. バッファ固有のメニューを作るには?

バッファ固有のメニューという機能はVimのTODOリストにあります。今のところは、
Michael Geddesのプラグインbuffermenu.vimを試してみてください:


                                                                faq-31.2
31.2. GUIのVimで使われるフォントを変更するには?

'guifont'を変更すればGUIのVimで使われるフォントを変更することができます。この
オプションの現在の値を表示するにはこうします

    :set guifont?

ここで表示された値を.vimrcに書いておけば、Vimを再起動しても同じフォントを使う
ことができます。例えば、次の行を.vimrcに書くとAndale Monoフォントを使うように
なります。

    set guifont=Andale_Mono:h10:cANSI

Win32, GTK, Photon版のVimでは、次のコマンドでguifontを変える際に便利なダイアロ
グを起動することができます:

    :set guifont=*

Vimのコマンドライン引数に-fontを使うと通常のテキストに使われるフォントを指定す
ることができます。

さらなる情報については以下を参照してください。

    :help 'guifont'
    :help 'guifontset'
    :help 'guifontwide'
    :help font-sizes
    :help -font
    :help -boldfont
    :help -italicfont
    :help -menufont
    :help -menufontset

                                                                faq-31.3
31.3. GUIのVimが起動したときのウィンドウの位置を指定するには?

コマンドライン引数"-geometry"を指定すれば、GUIのVimのウィンドウの位置を指定す
ることができます。例:

    $ gvim -geometry 80x25+100+300

さらなる情報については以下を参照してください。

    :help 31.4
    :help -geom

                                                                faq-31.4
31.4. GVimに水平スクロールバーをつけるには?

'guioptions'を修正すれば水平スクロールバーを有効化することができます:

    :set guioptions+=b

さらなる情報については以下を参照してください。

    :help 'guioptions'
    :help gui-horiz-scroll

                                                                faq-31.5
31.5. スクロールバーをデフォルトで左側に表示するようにするには?

'guioptions'にフラグ'l'をつけるとスクロールバーが左側に出るようになります。

    :set guioptions+=l
    :set guioptions-=r

さらなる情報については以下を参照してください。

    :help 'guioptions'
    :help gui-scrollbars

                                                                faq-31.6
31.6. メニューバーを消すには?

'guioptions'からフラグ'm'を除くとメニューバーが消えます:

    :set guioptions-=m

さらなる情報については以下を参照してください。

    :help 'guioptions'


                                                                faq-31.7
31.7. GVimを使っています。ALTキーと文字キーを押すとその文字で始まるメニューが
      選択されます。ALT-<key>の組合せを使いたいので、この挙動はやめてほしいで
      す。どうすればいいですか?

'winaltkeys'を使えばALTキーでメニュー項目を選択するのを無効にすることができま
す:

    :set winaltkeys=no

さらなる情報については以下を参照してください。

    :help 'winaltkeys'
    :help :simalt

                                                                faq-31.8
31.8. スクロールバーをドラッグしたとき、カーソル位置を動かさずにテキストをスク
      ロールさせることは可能ですか?

Vimの設計では、ノーマル・ビジュアル・選択・挿入モードにおいてカーソル位置は表
示されている位置になければなりません。これはVimの修正なしには変更できません。
スクロールバーを使うと、カーソル位置は常に表示されている範囲に入るように移動し
ます。この問題を解決する別のアプローチはVimのマークを使うことです。maで現在の
カーソル位置をマークします。テキストをスクロールしたら`aで元の位置に戻ります。
Vim Onlineに投稿された次の提案も試してみてください:


さらなる情報については以下を参照してください。

    :help mark-motions

                                                                faq-31.9
31.9. ":browse"を使ったときに特定のディレクトリから始めるようにするには?

'browsedir'を設定すれば":browse"コマンドのデフォルトディレクトリを設定できま
す。

    :set browsedir='<your_dir>'

さらなる情報については以下を参照してください。

    :help 'browsedir'

                                                                faq-31.10
31.10. ファイルがVimの外部で変更されたときなど、問い合わせがあるとき、GUIのダ
       イアログボックスが表示されます。コンソールのダイアログボックスが出るよ
       うにするには?

'guioptions'にフラグ'c'を含めれば、GUIダイアログの代わりにコンソールダイアログ
を使うようになります:

    :set guioptions+=c

さらなる情報については以下を参照してください。

    :help 'guioptions'

                                                                faq-31.11
31.11. GVimをアプリケーションxxx用のエディタとして使っています。アプリケーショ
       ンxxxがGVimを起動すると、コントロールがすぐにアプリケーションxxxに戻っ
       てしまいます。Vimを終了したとき初めてアプリケーションxxxにコントロール
       が戻るようにGVimを起動するには?

コマンドラインオプション'-f' (foreground)をつけてGVimを起動します:

    $ gvim -f

デフォルトではGVimはそれを起動したプログラムから切り離されます。'-f'をつけると
GVimはそれを起動したプログラムから切り離されなくなります。

さらなる情報については以下を参照してください。

    :help gui-fork
    :help -f

                                                                faq-31.12
31.12. なぜ、システムにインストールされているフォント全てが「フォントを選ぶ」
       ダイアログに現れないのですか?

Vimは等幅フォントのみサポートしています。プロポーショナルフォントはサポートし
ていません。「フォントを選ぶ」ダイアログには等幅フォントだけが表示されます。

さらなる情報については以下を参照してください。

    :help font-sizes
    :help 'guifont'

                                                                faq-31.13
31.13. コマンドラインモードでマウスを使うには?

コマンドラインモードでマウスを使うには、オプション'mouse'にフラグ'c'をつけま
す:

    :set mouse+=c

さらなる情報については以下を参照してください。

    :help mouse-using
    :help gui-mouse
    :help 09.2

                                                                faq-31.14
31.14. テキストをスクロールしようとマウスの中央ボタンを押すと、最後にコピーし
       たテキストがペーストされてしまいます。この挙動を無効にするには?

マウスの中央ボタンに<Nop>をマップすると中央ボタンを無効化できます:

    :map  <MiddleMouse> <Nop>
    :map! <MiddleMouse> <Nop>

さらなる情報については以下を参照してください。

    :help gui-mouse-mapping
    :help <Nop>

                                                                faq-31.15
31.15. GVimウィンドウの位置とサイズを変更するには?

コマンド"winpos"を使えばVimウィンドウの位置を変えることができます。ウィンドウ
のサイズを変えるには、オプション"lines"と"columns"を変更します。

例えば、次のコマンドはGVimウィンドウのX,Y座標を50,50に、行数を50に、桁数を80に
セットします。

    :winpos 50 50
    :set lines=50
    :set columns=80

":winpos"への引数はVimウィンドウのピクセル座標を指定します。オプション'lines'
'columns'は行数と文字数を指定してウィンドウの高さと幅を設定します。

さらなる情報については以下を参照してください。

    :help 31.4
    :help :winpos
    :help 'lines'
    :help 'columns'
    :help GUIEnter


=============================================================================
SECTION 32 - UNIX上のVim

                                                                faq-32.1
32.1. xtermでVimを実行しています。CTRL-Sを押すとVimがフリーズします。
      どうすればいいですか?

多くのターミナルエミュレータと本物のターミナルドライバはCTRL-Sを受け取るとデー
タの受信を停止します。早すぎて見えない画面のスクロールを止めるためです(昔の端
末で、バッファがオーバーフローしないようにコンピュータを遅くするためでもありま
した)。CTRL-Qを押すと出力を再開します。

CTRL-Sを押すとターミナルドライバは出力データの送信を停止します。結果としてVim
がハングしたように見えます。CTRL-Qを押すと全て通常に戻るでしょう。

'stty'コマンドを使うとターミナルドライバのフローコントロールをオフにすることが
できます:

    $ stty -ixon -ixoff

または、次のコマンドでターミナルのフローコントロールに使うキーを変更することが
できます:

    $ stty stop <char>
    $ stty start <char>

                                                                faq-32.2
32.2. 画面の更新について奇妙な問題があります。これを解決するには?

xtermのような適切なターミナルエミュレータと正しいTERM設定(TERM=xterm)と正しい
terminfo/termcapファイルを使わねばなりません。
さらなる情報については以下を参照してください。

    :help 'term'

                                                                faq-32.3
32.3. Vimのターミナル/コンソール版を使っています。挿入モードでバックスペース
      キーを押してもカーソルの前の文字が消えません。どう設定すれば良いですか?

Vimが正しいバックスペースのキーコードを受け取っているかどうか確かめてください。
次のコマンドを試してみてください:

    :fixdel

環境変数TERMが正しくターミナルの名前に設定されているかを確かめてください。
'stty'コマンドを試してみてください:

    $ stty erase ^H

ここで、^Hの文字を入力するにはCTRL-VCTRL-Hを押してください。

さらなる情報については以下を参照してください。

    :help :fixdel
    :help Linux-backspace
    :help NetBSD-backspace

                                                                faq-32.4
32.4. xtermでVimを使っています。Vimを終了すると画面が元の状態に復元されます。
      これを無効化するには?

xtermは「代替スクリーン」("alternate screen")という機能を持っています。この機
能が有効になっていると、Vimは起動時と終了時にこの代替スクリーンに切り替えま
す。そのため、元の画面が復元されます。この機能を無効にするには次の行を.vimrcに
加えてください:

    :set t_ti= t_te=

さらなる情報については以下を参照してください。

    :help restorescreen
    :help xterm-screens

                                                                faq-32.5
32.5. Vimの起動にかなり時間がかかります。起動時間を最小化するには?

これはおそらくVimがxtermのタイトルとXのクリップボードのためにXディスプレイを開
いていることに関係しています。環境変数DISPLAYが正しいホストを指していることを
確認してください。次のコマンドを試してみてください:

    $ vim -X

こうするとXディスプレイを開かなくなります。このコマンドラインオプションをつけ
るとXのクリップボードが使えなくなり、xtermのタイトルを変えられなくなります。

オプション'clipboard'を次のように変更することもできます:

    :set clipboard=exclude:.*

こうするとコマンドライン引数-Xを使うのと同じ効果があります。

さらなる情報については以下を参照してください。

    :help -X
    :help 'clipboard'


                                                                faq-32.6
32.6. Unixのgvimでカーソルの点滅を止めるには?

オプション'guicursor'を変更すればカーソルの点滅を止めることができます。
例:

    :set guicursor=a:blinkon0

さらなる情報については以下を参照してください。

    :help 'guicursor'

                                                                faq-32.7
32.7. GTK Vimのメニューのフォントを変えるには?

~/.gtkrcを修正すればGTK Vimのメニューのフォントを変更できます。例:

    style "default"
    { font ="smooth09" }
    class "*" style "default"

最後の行が全てのウィジェットのフォントを変えています。

さらなる情報については以下を参照してください。

    :help gui-gtk

                                                                faq-32.8
32.8. Vimが<Ctrl-Z>でサスペンドするのを防ぐには?

 <Ctrl-Z>をマップすればサスペンドするのを防げます。いくつかの提案を示します:

<Ctrl-Z>で何もしないようにする:

    :map <C-Z> <Nop>

<Ctrl-Z>でシェルが起動するようにする:

    :map <C-Z> :shell<CR>

<Ctrl-Z>でエラーメッセージが出るようにする:

    :map <C-Z> :"suspending disabled<CR>

最後の例において、ダブルクォートはメッセージをステータスライン上に残すために必
要になります。

                                                                faq-32.9
32.9. Vimを実行しているxtermをkillすると、Vimのプロセスが生き残り、多大なCPU時
      間(99%)を食ってしまいます。なぜこうなるのですか?

VimがPythonインターフェイスつきでビルドされるとこの問題が起こります。これは
PythonスレッドライブラリとVimに関する既知の問題です。この問題を解決するには、
PythonインターフェイスなしでビルドされたVimを使用してください。

さらなる情報については以下を参照してください。

    :help +python
    :help python


                                                                faq-32.10
32.10. Unixターミナルで構文強調を使うには?

構文強調を使う最も簡単で単純な方法はVimのGUI版(GVim)を使うことです。Vimのコン
ソール/ターミナル版で構文強調を使うには、カラー表示をサポートしているターミ
ナルエミュレータ(Xfree86 xtermやrxvtやdttermのようなもの)を使わねばなりませ
ん。ターミナルエミュレータが背景色と文字色を変えられるからといって、それが色を
変えるためのANSIエスケープシーケンスをサポートしているとは限りません。最新の
Xfree86 xtermはhttp://dickey.his.com/xterm/xterm.htmlからダウンロードできます。
最新のrxvtはhttp://www.rxvt.orgからダウンロードできます。そのターミナルエミュ
レータ用の色をサポートしているterminfo/termcapをインストールしなければなりま
せん。また、環境変数TERMをそのターミナルの正しい名前に設定します。

色設定をテストするにはVimランタイムパッケージに付属のcolortest.vimスクリプトを
使うことができます。このスクリプトを使うには次のようにします:

    :e $VIMRUNTIME/syntax/colortest.vim
    :source %

さらなる情報については以下を参照してください。

    :help 06.2
    :help terminal-colors
    :help termcap-colors
    :help startup-terminal
    :help xterm-color
    :help colortest.vim


=============================================================================
                                                                faq-33
SECTION 33 - MS-Windows上のVim

                                                                faq-33.1
33.1. MS-Windows上でCTRL-Vを押しても矩形ビジュアルモードが始まりません。どう
      なっているのですか?

mswin.vimプラグインは、VimがMS-Windowsアプリケーションに似た挙動をするように
キーマッピングとオプションを設定します。そのキーマップの一つがCTRL-Vで、これは
MS-Windowsアプリケーションではテキストをペーストします。このためCTRL-Vで矩形ビ
ジュアルモードが始まらないようになっています。mswin.vimでは矩形ビジュアルモー
ドの開始がCTRL-Qにマップされています。ですのでCTRL-Vの代わりにCTRL-Qを使ってく
ださい。

さらなる情報については以下を参照してください

    :help CTRL-V
    :help CTRl-V-alternative
    :help CTRL-Q
    :help 10.5

                                                                faq-33.2
33.2. CTRL-Yキーを押すとCTRL-Rのような動作をします。CTRL-YCTRL-Yとして扱うよ
      うに設定するには?

CTRL-YからCTRL-Rへのマップはmswin.vim内で行われています。mswin.vimは標準の
MS-Windowsアプリケーションと同じ挙動になるようにCTRL-Yをマップします。これ
は":help CTRL-Y"で説明されています。mswin.vim中のCTRL-Yをマップしている行をコ
メントアウトするか、.vimrc中でmswin.vimを読み込んでいる行を削除すればよいで
しょう。


                                                                faq-33.3
33.3. 常にGVimのウィンドウを最大化して起動するには?

"simalt"コマンドを使えばVimのウィンドウを最大化することができます。GUIEnter自
動コマンドを使えば、起動時にVimのウィンドウを最大化することができます:

    autocmd GUIEnter * simalt ~x

さらなる情報については以下を参照してください:

    :help :simalt
    :help GUIEnter
    :help gui-win32-maximized

                                                                faq-33.4
33.4. なんらかの編集操作をするとVimがフリーズします。カーソルは空の四角形にな
      ります。全然文字が入力できません。どうなっているのですか?

もっとも考えられるのは、テキストをスクロールさせようとマウスホイールを使ったこ
とです。Vimでインテリマウスホイールを使うと問題が起こることが知られています。
これを回避するには、ユニバーサルスクロール機能を無効にすることです。

さらなる情報については以下を参照してください

    :help intellimouse-wheel-problems


                                                                faq-33.5
33.5. Windows XPを使っています。最大化したGVimの表示速度がとても遅いです。表示
      の更新を早くするには?

これは画面のプロパティの "スクリーン フォントの縁を滑らかにする" を有効化して
いるために起こっている可能性があります。フォントスムージングをオフにするか、ス
ムージング方法を "標準" にしてください。

{訳注: コントロールパネル[パフォーマンスオプション]の[スクリーンフォントの縁を
       滑らかにする]のことだと思う。}

                                                                faq-33.6
33.6. VimをCygwin上で使うにあたって推奨される設定は?

シェル関連の設定を次のようにするとよいかもしれません:

    :set shellcmdflag=-c
    :set shellquote=
    :set shellslash          " 展開に(バックスラッシュでなく)スラッシュを使う
    :set shellxquote=\"
    :set shell=d:\cygwin\bin\bash.exe " bashをシェルに使う
    :set shellpipe=2>&1| tee
    :set shellredir=>%s 2>&1

                                                                faq-33.7
33.7. 差分モードでGNU diffを使おうとしています。コマンドラインからdiffを使うと
      うまく動くのですが、Vim内で使おうとすると動きません。どうすれば?

VimでGNU diffを使うには問題があります。次のリンクにあるRon Aaronがビルドした
GNU diff.exeを使ってみてください:


                                                                faq-33.8
33.8. Outlookで外部エディタにVimを使うことはできますか?

COMアドイン"cubiclevim"を使えば、OutlookでVimを外部エディタとして使うことがで
きます。さらなる情報については以下のリンクを訪れてください:


注意: 現在これはMS-Office 2000とXPのみで動作します。

                                                                faq-33.9
33.9. HTMLファイルを編集するのにVimを使っています。現在開いているHTMLファイル
      をインターネットエクスプローラーでプレビューするには?

以下のコマンドでできます:

    :!start c:\progra~1\intern~1\iexplore.exe file://%:p<CR>

                                                                faq-33.10
33.10. VimをMicrosoft Visual Studioといっしょに使いたいです。どうすれば?

VimのOLE版(例: gvim61ole.zip)をダウンロードして使用しなければなりません。
このファイルはVimをVisual Studioといっしょに使うための手順を書いたファイルも含
んでいます。

さらなる情報については以下を参照してください

    :help MSVisualStudio

                                                                faq-33.11
33.11. どこに_vimrcと_gvimrcを置けばいいですか?

_vimrcと_gvimrcは環境変数VIMで指定されたディレクトリの下に置きます。もし他のユ
ーザーとシステムを共有しているなら、環境変数HOMEに設定したディレクトリに置くと
よいでしょう。

さらなる情報については以下を参照してください

    :help $HOME-use
    :help _vimrc

                                                                faq-33.12
33.12. ファイルを保存する度に、そのファイルがVimの外部で変更されていると警告が
       出ます。なぜですか?

ファイルを保存する際に毎回以下の警告メッセージが出るなら:

    WARNING: The file has been changed since reading it!!!
    Do you really want to write to it (y/n)?

{訳注: 日本語の警告メッセージは以下のようになる}

    警告: 読込んだ後にファイルに変更がありました!!!
    本当に上書きしますか (y/n)?


MS-Windowsでのサマータイム(daylight saving time)が始まる日についてのバグに関係
している可能性があります。Vimはファイルを書き込んだ後にそのタイムスタンプを記
憶しています。そして次の書き込みの直前に再びタイムスタンプを取得し、Vimの外部
でファイルが変更されているかチェックします。これはサマータイムが始まる日を除け
ば正しく機能します。

この問題はサマータイムが始まる日の次の日には解消されます。

さらなる情報については以下を参照してください

    :help W11


=============================================================================
                                                                faq-34
SECTION 34 - 印刷

                                                                faq-34.1
34.1. 全ての行に行番号をつけて印刷するには?

'printoptions'をセットして":hardcopy"を使えばファイルを印刷できます:

    :set printoptions=number:y
    :hardcopy

さらなる情報については以下を参照してください

    :help 'printoptions'
    :help :hardcopy

                                                                faq-34.2
34.2. 構文強調の色をつけてファイルを印刷するには?

":hardcopy"で構文強調の色をつけてファイルを印刷することができます。また、
2html.vimスクリプトでファイルをHTMLをファイルに変換し、そのHTMLファイルを印刷
することもできます。

さらなる情報については以下を参照してください

    :help syntax-printing
    :help 2html.vim
    :help :hardcopy
    :help printing


=============================================================================
                                                                faq-35
SECTION 35 - Vimをソースからビルドする

                                                                faq-35.1
35.1. Unixシステム上でVimをソースからビルドするには?

UnixシステムでVimをソースからビルドするには、次のステップに従ってください:

ftp://ftp.vim.org/pub/vim/unixからソースとランタイムファイルのアーカイブ
  (vim-##.tar.bz2)をダウンロードします。
- bzip2とtarを使ってアーカイブを展開します:

        $ bunzip2 -c <filename> | tar -xf -

'make'を実行してVimをデフォルト設定で調整し、ビルドします。
- 'make install'してVimをデフォルトのディレクトリにインストールします。

Vimの様々な機能を有効/無効にするには、'make'を実行する前に'configure'コマンド
でフラグを設定します。'configure'で指定できるオプションのリストを次のコマンド
で表示することができます:

    $ configure -help

{訳注: --help の間違い?}

さらなる情報については以下を参照してください

    :help install

                                                                faq-35.2
35.2. Unixでホームディレクトリなど、デフォルトのディレクトリ以外にVimをインス
      トールするには?

デフォルトのインストールディレクトリ以外にインストールするには、configureスク
リプトを実行する際に--prefixオプションでディレクトリを指定します。

    $ ./configure --prefix=/users/xyz

configureスクリプトに様々な引数を与えることによって、Vimの色々な機能を有効/無
効にできます。それらのオプションについてのさらなる情報については、次を実行して
ください。

    $ ./configure --help

さらなる情報については以下を参照してください

    :help install-home
    :help install

                                                                faq-35.3
35.3. MS-Windowsシステム上でVimをソースからビルドするには?

MS-Windowsシステム上では、Visual C++またはBorland C++またはMing GCCコンパイラ
またはcygwin gccコンパイラのどれかを使ってVimをビルドすることができます。
MS-Windows用にVimをソースからビルドするには次のステップに従ってください:

- ソース(vim##src.zip)、ランタイム(vim##rt.zip)とその他(vim-##-extra.tar.gz)の
  アーカイブをftp://ftp.vim.org/pub/vim/pcからダウンロードします。

{訳注: 2006年8月現在、Vim7のソースとランタイムはまとめて1つのアーカイブ
       (vim-7.0.tar.bz2)にして公開されている。}

- アーカイブをディレクトリ(例: c:\vimsrc)に展開します。
- コンパイラに応じたMakefileを使います。Visual C++用にはMake_mvc.mak、Borland
  C++用にはMake_bc5.mak、Ming GCC用にはMake_ming.mak、cygwin gcc用には
  Make_cyg.makを使います。

VimのGUI版とコンソール版のどちらをビルドしたいかによって、Makefileに異なる引数
を与えなければなりません。ソースのビルドに成功したら、vim.exeやgvim.exeをラン
タイムファイルとともに望みのディレクトリにコピーできます。

MS-Windowsシステムで様々なコンパイラを使ってVimをビルドするための情報について
は、以下のサイトを訪れてください:


さらなる情報については以下を参照してください

    :help install

                                                                faq-35.4
35.4. 私がインストールしたVimにはヘルプ、構文ファイル、インデントファイルが欠
      けています。それらのファイルをインストールするには?

Vimのヘルプ、構文ファイル、インデントファイルやそのほかのランタイムファイルは
Vimランタイムパッケージの一部です。Vimランタイムパッケージをダウンロードしてイ
ンストールする必要があります。例えば、MS-Windows用のVim6.1ランタイムパッケージ
の名前はvim61rt.zipです。

{訳注: 2006年8月現在、Vim7のソースとランタイムはまとめて1つのアーカイブ
       (vim-7.0.tar.bz2)にして公開されている。}

さらなる情報については以下を参照してください

    :help install

                                                                faq-35.5
35.5. Vimをソースからビルドして"make install"でインストールしました。Vimのソー
      スディレクトリを残しておく必要はありますか?

その必要はありません。一度Vimをビルドして元のソースディレクトリ以外のどこか
(例えば/usr/binや/usr/local/bin)にインストールしたら、ソースディレクトリは削除
してもかまいません。

                                                                faq-35.6
35.6. ある機能がコンパイル時に有効化されているかどうかを知るには?

":version"を使えば、ある機能がコンパイル時に有効化されているかどうかを知ること
ができます。有効化されている機能の前には"+"がつきます。有効化されていない機能
の前には"-"がつきます。

スクリプトの中で、ある機能の存在を判定したい場合は、関数has()を使います:

    if has("menu")
        " Set up some menus
    endif

さらなる情報については以下を参照してください

    :help :version
    :help +feature-list
    :help has()

                                                                faq-35.7
35.7. GUI機能なしでVimをビルドすることはできますか?

できます。GUI機能を含めて、Vimの機能の多くは任意に有効化/無効化してビルドする
ことができます。

さらなる情報については以下を参照してください

    :help install

                                                                faq-35.8
35.8. Unixシステム上でVimをビルドするとき、"undefined reference to 
      term_set_winsize"というエラーが出ます。これを解決するには?

ビルド処理がtermlibまたはtermcapまたはncursesライブラリを見つけられないときこ
のエラーが出ます。このエラーを解決するには、ncurses-devパッケージをインストー
ルしなければなりません。

                                                                faq-35.9
35.9. GTK 2.03を使おうとしているのですが、Vimのconfigureがgtk-configがないとの
      メッセージを出します。しかしGTK2は一般的なpkg-configを使うようになったの
      で、これは正しいのです。gtk用のインクルードファイルとライブラリのリスト
      を出力するpkg-configならありますが、なぜかconfigureスクリプトはこれを
      使ってくれません。

次のシェルスクリプトにgtk-configと名前をつけて使ってください:

    #!/bin/sh
    pkg-config gtk+-2.0 $1 $2


=============================================================================
                                                                faq-36
SECTION 36 - 様々な事柄

                                                                faq-36.1
36.1. Vimでバイナリフィルを編集するには?

以下のオプションを設定すればVimでバイナリファイルを編集することができます:

    :set binary
    :set display=uhex

コマンドラインオプション"-b"を使ってもバイナリファイルを編集することができます
:

    $ vim -b <binary_file_name>

また、バイナリファイルを編集するのにxxdユーティリティ(Vimのディストリビュー
ションの一部)を使うこともできます。

さらなる情報については以下を参照してください

    :help 23.4
    :help edit-binary
    :help hex-editing
    :help -b
    :help 'binary'
    :help 'endofline'
    :help 'display'

                                                                faq-36.2
36.2. ビジュアルエラーフラッシュとエラービープを無効にするには?

次のコマンドを使うと、ビジュアルエラーフラッシュとエラービープを両方無効にする
ことができます:

    :set visualbell t_vb=

さらなる情報については以下を参照してください

    :help 'visualbell'
    :help 'errorbells'
    :help t_vb

                                                                faq-36.3
36.3. バッファに表示されている文字のASCIIコードを表示するには?

'ga'コマンドを使うと、表示されている文字のASCIIコードを表示することができます。


さらなる情報については以下を参照してください

    :help ga
    :help :ascii

                                                                faq-36.4
36.4. コマンドのカウントとして0を使うことはできますか?

"0"はそれ自身がコマンドであるため(現在行の1桁目に移動する)、コマンドのカウント
として使うことはできません。

さらなる情報については以下を参照してください

    :help 0
    :help count

                                                                faq-36.5
36.5. Vimの起動時の画面を表示させなくするには?

Vimの起動時の画面を表示させなくするには、'shortmess'にフラグ'I'を追加します:

    :set shortmess+=I

さらなる情報については以下を参照してください

    :help :intro
    :help 'shortmess'

                                                                faq-36.6
36.6. "hit enter to continue"プロンプトを避けるには?

あなたに読んでほしいメッセージがあるのに画面が再描画されようとしているとき、
"hit enter to continue"プロンプトが出ます。'shortmess'にフラグ'T'を加えると、
全てのメッセージを短縮することができます。するとhit-enterプロンプトを避けるこ
とができます:

    :set shortmess+=T

また、'cmdheight'を設定するとコマンドラインの高さを上げることができます:

    :set cmdheight=2

さらなる情報については以下を参照してください

    :help hit-enter
    :help avoid-hit-enter
    :help 'shortmess'
    :help 'cmdheight'

                                                                faq-36.7
36.7. コマンドラインからVimを起動して一連のファイルに対して一連のコマンドを
      実行するには?

コマンドラインからVimを起動して一連のファイルに対して一連のコマンドを実行する
にはいくつかの方法があります。コマンドラインオプション"-c"でコマンドを指定する
ことができます:

    $ vim -c "<ex_command_1>" -c "<ex_command_2>" *.txt

コマンドラインオプション"-c"で指定されたexコマンドは順番に1つずつ実行されま
す。また、exコマンドを"|"で区切れば1つの"-c"で指定することもできます:

    $ vim -c "<ex_command_1> | <ex_command_2>" *.txt

上のコマンドでexコマンドが失敗した場合は残りのexコマンドは全て実行されません。

例えば、コマンドラインからファイル中の"ABC"を"DEF"で置換するには次のコマンドを
使います:

    $ vim -c "%s/ABC/DEF/ge | update" myfile.txt

コマンドラインから複数のファイル中の"ABC"を"DEF"で置換するには次のコマンドを使
います:

    $ vim -c "argdo %s/ABC/DEF/ge | update" *.txt

一連のコマンドをファイルに保存しておき、コマンドラインオプション"-s"を使って
ファイルに対してそのコマンドを実行することもできます。例えば、mycmds.txtに一連
のコマンドを保存してあるとします。このとき次のようにできます:

    $ vim -s mycmds.txt *.pl

さらなる情報については以下を参照してください

    :help -c
    :help -s

                                                                faq-36.8
36.8. 挿入モードから抜けることなくノーマルモードコマンドを実行するには?

CTRL-Oに続けてノーマルモードコマンドを1つ入力すると、挿入モードから抜けること
なくノーマルモードコマンドを実行することができます。

1つ以上のノーマルモードコマンドを実行するにはCTRL-Lを押し、続けて任意個のノー
マルモードコマンドをタイプします。挿入モードに抜けるには<Esc>を押します。

{訳注: CTRL-Lを使うにはオプション'insertmode'をオンにしていなければならない。}

さらなる情報については以下を参照してください

    :help i_CTRL-O
    :help i_CTRL-L


=============================================================================
                                                                faq-37
SECTION 37 - Unicode
Author: Tony Mechelynck <antoine.mechelynck AT belgacom.net>

                                                                faq-37.1
37.1. VimでUnicodeのファイルを作ることはできますか?

できます。あなたが利用できるキーボードとフォントによって多少複雑になるかもしれ
ませんが、常にどんなUnicodeコードポイントでも(中には不正なものも)エンコードす
ることができます。Unicodeのファイルを作成するには、Vimをコンパイル時オプション
"+multi_byte"つきでコンパイルしていなければなりません。Unicodeについてのさらな
る情報は以下のサイトから入手できます:


さらなる情報については以下を参照してください

    :help multibyte
    :help usr_45.txt

                                                                faq-37.2
37.2. Unicodeのファイルを編集するにあたって特に重要な設定は?

最も重要なのは様々な"encoding"のオプションです。つまり、'encoding',
'fileencoding''fileencodings''termencoding'です。ブール値のオプション
'bomb'も重要です。

さらなる情報については以下を参照してください

    :help 'encoding'
    :help 'fileencoding'
    :help 'fileencodings'
    :help 'termencoding'
    :help 'bomb'

                                                                faq-37.3
37.3. オプション'encoding'とは何ですか?

基本的にオプション'encoding'はVimがデータを内部的にどう表現するかを定義します。
しかし、Unicodeエンコーディングは全て内部的にはutf-8で表現され、(必要ならば)読
み書きの際に変換されます。

さらなる情報については以下を参照してください

    :help 'encoding'

                                                                faq-37.4
37.4. Vimでは様々なUnicodeエンコーディングをどう表記しますか?

Utf-8はutf-8またはutf8と書きます。utf-16はucs-2またはucs2と書きます。utf-32は
ucs-4またはucs4と書きます。エンディアンを指定することもできます(utf-8はエンディ
アンによらないのでそれ以外)。末尾に"le"をつけるとリトルエンディアンになり、
"be"をつけるとビッグエンディアンになります。エンディアンの指定なしにucs-2や
ucs-4のエンコーディングでファイルを作成すると、Vimはあなたのマシンに応じて適切
な方を選択します。

さらなる情報については以下を参照してください

    :help encoding-names
    :help encoding-values
    :help encoding-table

                                                                faq-37.5
37.5. バイト順マークの有無を指定するには?

'fileencodings'が"ucs-bom"を含む場合、ファイルを読み込むときにバイト順マークの
チェックが行われます。オプション'bomb'がオンなら、ファイルを書き込むときに、そ
のファイルのエンコーディングを保証するバイト順マークを書き込みます。

さらなる情報については以下を参照してください

    :help 'fileencodings'
    :help 'bomb'

                                                                faq-37.6
37.6. オプション'fileencoding'とは何ですか?

オプション'fileencoding'はファイルを書き込むときに使うエンコーディングを定義し
ます。これが空の場合は、'encoding'の値が使われます。

さらなる情報については以下を参照してください

    :help 'fileencoding'

                                                                faq-37.7
37.7. オプション'fileencodings'とは何ですか?

オプション'fileencodings'はVimが既存のファイルを開くときに使う検査方法を定義し
ます。このオプションはコンマで区切られたエンコーディングのリストです。特別な名
前"ucs-bom"を含めると、バイト順マークの存在をチェックするようになります。
しかし、これが"utf-8"の後に来ると認識されなくなります。通常は、"ucs-bom"を含め
るならば、リストの最初に書くべきです。

Vimはファイルを開くとき、そのファイルを'fileencodings'内にリストされたエンコー
ディングに対してチェックします。もしここでマッチするものがなければ
'fileencoding'が空文字列に設定されます。つまり、'encoding'の値が使われます。

さらなる情報については以下を参照してください

    :help 'fileencodings'
    :help 'encoding'

                                                                faq-37.8
37.8. オプション'termencoding'とは何ですか?

オプション'termencoding'は、あなたがタイプしたデータをキーボードがどのようにエ
ンコードするかを定義します。これが空の場合は'encoding'と同じ値であるとされま
す。通常、このオプションはあなたのロケールに合うように設定するべきです。

さらなる情報については以下を参照してください

    :help 'termencoding'
    :help locale

                                                                faq-37.9
37.9. オプション'bomb'とは何ですか?

'fileencodings'に"ucs-bom"が含まれているときファイルを読み込むと、そのファイル
の先頭にバイト順マークがあるかどうかによって'bomb'がオン/オフに設定されます。
'bomb'がオンになっていると、ファイル書き込み時に、バイト順マークが書き込まれま
す。このバイト順マーク書き込みを手動で設定することもできます。

さらなる情報については以下を参照してください

    :help 'bomb'

                                                                faq-37.10
37.10. これらのオプションの典型的な例はどこにありますか?

これらを別な言葉で例をつけて説明した"tip"がここにあります。
http://vim.sourceforge.net/tip_view.php?tip_id=246

                                                                faq-37.11
37.11. Unicodeの文字を挿入するには?

いくつかの方法があります:

- キーボード上にある文字は普通にタイプできます。フランスのキーボードの曲線ア
  クセント記号のように"dead-key"プリフィックスが必要なものもです。
- ダイグラフが定義されている文字は、<Ctrl-K>に続けて2つの文字をタイプすること
  で入力できます。
- オプション'digraph'がセットされていると、ダイグラフが定義されている文字は
  <char1><BS><char2>のようにして入力できます。
- どんな文字も<Ctrl-V>プリフィックスを使えば入力できます(<Ctrl-V>がクリップボ
  ードからペーストするようにマップされている場合は<Ctrl-Q>です)。

さらなる情報については以下を参照してください。

    :help digraphs
    :help 'digraph'
    :help i_CTRL-V_digit

                                                                faq-37.12
37.12. どのダイグラフがどの文字に定義されているかを知るには?

まず'encoding'を適切に(例えばutf-8に)設定してください。それから :digraphs を
使って現在定義されているダイグラフを表示します。

さらなる情報については以下を参照してください。

    :help :digraphs
    :help 'encoding'


=============================================================================
 vim:tw=78:ts=8:ft=help:norl:
関連キーワード:  Vim, コマンド, 情報, 参照, 文字, バッファ, CTRL, テキスト, 表示, キー