*filetype.txt* For Vim version 6.1. Last change: 2002 Mar 05 VIMリファレンスマニュアル by Bram Moolenaar (訳 村岡太郎) ファイル形式 *filetype* *file-type* 1. ファイル形式 |filetypes| 2. ファイル形式別プラグイン |filetype-plugin| 3. 標準で付属する形式別プラグインの解説 |ftplugin-docs| |autocmd.txt|も参照。 {これらのコマンドはViには存在しない} ============================================================================== 1. ファイル形式 *filetypes* *file-types* Vimは編集しているファイルの形式を検出することができる。これは特定のテキストに 対してファイル名をチェックしたり、場合によってはその内容を調べることで実現され ている。 *:filetype* *:filet* ファイル形式の検出を有効化するには、vimrcファイルでこのコマンドを使用する: > :filetype on 新しいファイルや既存のファイルを編集する際には必ず、Vimはファイルの形式を認識 し'filetype'オプションを設定しようと試みる。それが構文強調やオプションの設定、 その他を行なうために使われるFileTypeイベントのきっかけとなる。 NOTE: Viコンパチブルとは全てのオプションがグローバルであることを意味するので、 ファイル形式識別と'compatible'は同時に使うことはできない。既に'compatible'を設 定している場合には、それを解除する必要がある。 詳細: ":filetype on"コマンドは次のファイルのうち1つをロードする。 Amiga $VIMRUNTIME/filetype.vim Mac $VIMRUNTIME:filetype.vim MS-DOS $VIMRUNTIME\filetype.vim RiscOS Vim:Filetype Unix $VIMRUNTIME/filetype.vim VMS $VIMRUNTIME/filetype.vim このファイルはBufNewFileとBufReadイベントに対する自動実行コマンドを定 義するVimスクリプトファイルである。ファイル形式がファイル名から決定で きない時には、ファイルの内容を検出するために$VIMRUNTIME/scripts.vimが 使用される。 独自のファイルタイプを追加するには、下の|new-filetype|を参照。 ファイル形式を自動的に検出できなかった場合や、間違った形式になってしまった場合 には、'filetype'オプションを手動で設定するか、ファイルにモード行(modeline)を追 加する選択肢がある。例として、IDLファイルに設定するにはこのコマンドを使うか: :set filetype=idl この|modeline|をファイルに追加する: > /* vim: set filetype=idl : */ < *:filetype-plugin-on* ファイル形式別プラグインのロードを有効化するには: > :filetype plugin on まだファイル形式検出が有効になっていない時には、同時に有効化される。 これは実際には'runtimepath'にある"ftplugin.vimをロードする。 結果的にファイルが編集される時に対応するプラグインファイルがロードされる(ただ し検出したファイル形式に合致するプラグインファイルがあった時のみ)。 |filetype-plugin| *:filetype-plugin-off* ファイル形式別プラグインを無効化するには: > :filetype plugin off ファイル形式の検出自体は無効にならない。しかしながらファイル形式の検出を無効に した場合には、プラグインもロードされなくなる。 これは実際には'runtimepath'にある"ftplugof.vim"をロードする。 *:filetype-indent-on* ファイル形式別インデントのロードを有効化するには: > :filetype indent on まだファイル形式検出が有効になっていない時には、同時に有効化される。 これは実際には'runtimepath'にある"indent.vimをロードする。 結果的にファイルが編集される時に対応するインデントファイルがロードされる(ただ し検出したファイル形式に合致するインデントファイルがあった時のみ)。 |filetype-plugin| *:filetype-indent-off* You can disable it again with: > ファイル形式別インデントを無効化するには: > :filetype indent off ファイル形式の検出自体は無効にならない。しかしながらファイル形式の検出を無効に した場合には、インデントファイルもロードされなくなる。 これは実際には'runtimepath'にある"indoff.vim"をロードする。 *:filetype-off* ファイル形式の検出を無効にするには、次のコマンドを使用する: > :filetype off これはプラグイン("plugin")とインデント("indent")のフラグを保持はするが、ファイ ル形式は検出されなくなるので、次に":filetype on"をするまではそれらは動作しなく なる。 概要: *:filetype-overview* コマンド 検出 プラグイン インデント ~ :filetype on 有効 変化なし 変化なし :filetype off 無効 変化なし 変化なし :filetype plugin on 有効 有効 変化なし :filetype plugin off 変化なし 無効 変化なし :filetype indent on 有効 変化なし 有効 :filetype indent off 変化なし 変化なし 無効 :filetype plugin indent on 有効 有効 有効 :filetype plugin indent off 変化なし 無効 無効 現在の状態を知るには次のようにタイプする: > :filetype このような出力が得られる: > filetype detection:ON plugin:ON indent:OFF ファイル形式は構文強調にも利用される。":syntax on"コマンドが使用されると、ファ イル形式検出もインストールされる。":filetype on" の後に ":syntax on"を実行する 必要はない。 特定のファイル形式を無効にするには、自分のファイル形式ファイルに1行追加する。 |remove-filetype|参照。 *filetype-detect* 再びファイル検出を有効化するには: > :filetype detect 空のファイルから編集を始めて、ファイル形式を判定するのに充分なテキストをタイプ してからコレを使用する。例えば、シェルスクリプトの中で"#!/bin/csh"を入力してか らということ。 ファイル形式検出が無効になっていた時には、引数"on"が指定された時のように、 初めに有効化される。 *filetype-overrule* 同じ拡張子が2つのファイル形式で使用されている時には、Vimはファイルがどのような 種類であるかを推測する。これは常に動作するわけではない。ある拡張子に対してどの ファイル形式を使うか明示的に指定するのに、幾つかのグローバル変数を使うことがで きる: ファイル名 変数 ~ *.asa g:filetype_asa |aspvbs-syntax| |aspperl-syntax| *.asp g:filetype_asp |aspvbs-syntax| |aspperl-syntax| *.asm g:asmsyntax |asm-syntax| *.prg g:filetype_prg *.pl g:filetype_pl *.inc g:filetype_inc *.w g:filetype_w |cweb-syntax| *.i g:filetype_i |progress-syntax| *.p g:filetype_p |pascal-syntax| *.sh g:bash_is_sh |sh-syntax| *new-filetype* 使いたいファイル形式がVimに検出されない(存在しない)場合には、その形式を追加す る2つの方法がある。どちらにせよファイル$VIMRUNTIME/filetype.vimは変更するべき ではない。そのファイルは新しいVimをインストールする際に上書されるのだから。 A. ファイル形式が名前だけで検出できる場合。 1. ユーザランタイムディレクトリを作成する。通常は'runtimepath'オプションに 記載される最初の項目使えば良い。UNIXを例に挙げる: > :!mkdir ~/.vim < 2. ファイル形式を検出する自動実行コマンドを含むファイルを作成する。 例: > " 独自の filetype ファイル if exists("did_load_filetypes") finish endif augroup filetypedetect au! BufRead,BufNewFile *.mine setfiletype mine au! BufRead,BufNewFile *.xyz setfiletype drawing augroup END < このファイルを"filetype.vim"としてユーザランタイムディレクトリに保存す る。UNIXを例にあげる: > :w ~/.vim/filetype.vim < 3. 新しいファイル形式の検出を有効化するためにVimを再起動する。 作成したfiletype.vimはデフォルトのFileType自動実行コマンドがインストールさ れる前に読み込まれる。そのため新しく作成した自動自動コマンドが先に適合し、 ":setfiletype"コマンドがこれ以後に他の自動実行コマンドにより'filetype'が設 定されないことを保証する。 *new-filetype-scripts* B. ファイル形式がファイルの内容を調べる事によってのみ検出可能な場合。 1. ユーザランタイムディレクトリを作成する。通常は'runtimepath'オプションに 記載される最初の項目使えば良い。UNIXを例に挙げる: > :!mkdir ~/.vim < 2. ファイルの内容で形式を決定するVimスクリプトを作成する。例: 2. Create a vim script file for doing this. Example: > if did_filetype() " 既にファイル形式が決定している finish " ..その時はこのチェックは行なわない endif if getline(1) =~ '^#!.*\' setfiletype mine elseif getline(1) =~? '\' setfiletype drawing endif < より多くの例については$VIMRUNTIME/scripts.vimを参照。 このファイルを"scripts.vim"としてユーザランタイムディレクトリに保存す る。UNIXを例にあげる: > :w ~/.vim/scripts.vim < 3. これだけで検出は正しく動作し、Vimを再起動する必要は無い。 新しく作成したscripts.vimはデフォルトのファイル形式チェックの前に読み込まれ ので、$VIMRUNTIME/scripts.vimに書かれたデフォルトの判定規則を上書することが できる。 *remove-filetype* ファイル形式が誤って検出されたならば、(上を参考に)それを補正するfiletype.vimか scripts.vimをインストールする。'filetype'に存在しない形式の名前を設定すれば、 それ以降の検出スクリプトで別の値が設定されてしまうのを避けることができる: > :set filetype=ignored 複数人で使用する環境を設定していて、個々のユーザにはファイル形式を追加/削除さ せたくないならば、ランタイムディレクトリに置いて全ユーザが共有するように filetype.vimとscripts.vimを書く必要がある。そのスクリプトを置くディレクトリに は'runtimepath'の示すうちのどれか1つを選択する。'runtimepath'の中に設定を置き たいディレクトリが見あたらなければ、|system-vimrc|内で正しく追加する必要があ る。既に設定されているデフォルトのディレクトリを変更しないように注意。 *autocmd-osfiletypes* ファイルと共に「形式」を記録できるオペレーティングシステム(OS)では、ファイルが ある「形式」だった時にだけ実行される自動コマンドを設定することができる。 実際の「形式」チェックはVimをどのプラットフォームで使用しているかに依存する; 詳細は使用しているシステムの解説書を参照のこと。 OSによる「形式」を利用するには自動実行コマンドの検出パターンの場所に、次の例に 示すように折カッコで囲んだ検出させたい「形式」のリストを書く: > :au BufRead *.html,<&faf;HTML> so $VIMRUNTIME/syntax/html.vim これは以下に適合する: - ファイル名が`.html'で終了するあらゆるファイル - 「形式」が`&faf' か `HTML'である全てのファイル。ただしここでいう「形式」とは Vimのバージョン(稼動しているOS)によって定義される。未知の形式は適合しないと みなされる。 「形式」とパターンを同時に指定することもできる (そのような場合には、両方供マッ チする必要がある): > :au BufRead <&fff>diff* これは「形式」が`&fff'で名前が`diff'で始まるファイルに適合する。 |+osfiletype|機能を有効にしてコンパイルしなければ、OSによる「形式」チェックは スキップされる。 *plugin-details* "plugin"ディレクトリは'runtimepath'オプションに示されているならば、どのディレ クトリに置いても良い。そこに示された全てのディレクトリにあるプラグインが検索さ れ読み込まれる。例えば、次のコマンドを実行すると: > set runtimepath 次の内容が出力される: > runtimepath=/etc/vim,~/.vim,/usr/local/share/vim/vim60 この時Vimは以下に示すディレクトリにある全てのプラグインを読み込む: > /etc/vim/plugin/ ~/.vim/plugin/ /usr/local/share/vim/vim60/plugin/ 最後の1つは$VIMRUNTIMEが展開されたものであることに注意。 プラグインが読み込まれていないらしい場合はどうすれば良いのか? Vim起動時に|-V| 引数を使用すれば何が起こっているか知ることができる: > vim -V1 多くのメッセージが表示されるが、プラグインの読み込みの前には特定の記述がなされ る。それは次のように始まる: Searching for "plugin/*.vim" in これを見ればVimがプラグインスクリプトをどこから探しているのかがわかる。 ============================================================================== 2. ファイル形式別プラグイン *filetype-plugins* ファイル形式プラグインが有効になっていれば|:filetype-plugin-on|、プラグイン読 込時にオプションが設定されキーマップが定義される。それらは全てバッファローカル で、他のファイルに対しては決して作用しない。 ファイル形式により定義されるキーマップが自分で定義したキーマップの邪魔になるこ ともあり得る。幾つかこれを回避する方法がある: 1. "maplocalleader"にキーマップの先頭に使用するキーシーケンスを設定する。例: > :let maplocalleader = "," < デフォルトのバックスラッシュ(\ 記号)に替えてカンマが全てのマップの始まりの キーになる。||も参照。 2. 独自のマップを定義する。例: > :map ,p MailQuote < どのような機能が提供され、それにどのような文字列がキーマップされているの か、プラグインファイルの説明をチェックする必要がある。 独自のキーマップはプラグインが読み込まれる (つまりその形式のファイルが読み 込まれる) 前に定義する必要がある。そうすればプラグインはデフォルトキーマッ ピングのインストールを行なわない。 3. 特定のファイル形式についてキーマップを無効化するならば、そのファイル形式名 を含むある変数を設定する。ファイル形式"mail"のキーマップを無効にするには次 のようにする: > :let no_mail_maps = 1 4. ファイル形式による全てのキーマップを無効化するには次の変数を設定する: > :let no_plugin_maps = 1 < *ftplugin-overrule* グローバルな($VIMRUNTIMEにある、システムが提供する)ファイル形式プラグインが キッチリ望むように動作しない場合には、これを変更する方法が3通りある: 1. 設定を追加する。 新しいファイル形式プラグインを作り、'runtimepath'の始めのほうに置く。一例と して、UNIXではこのファイルを利用できる: > vim ~/.vim/ftplugin/fortran.vim < 追加したい設定やキーマップをこのファイルに記述する。グローバルプラグインは これの後に読み込まれるので、ここで行なった設定は上書される可能性がある。そ のような場合には以下の2つの方法のどちらかを利用する。 2. プラグインのコピーを作成し、そちらを変更する。 'runtimepath'の始めのほうにそのプラグインのコピーを置く。一例として、UNIXで はこのように行なう: > cp $VIMRUNTIME/ftplugin/fortran.vim ~/.vim/ftplugin/fortran.vim < そうすればコピーしたファイルを好きなように変更できる。これは変数 b:did_ftpluginが設定されていれば、グローバルプラグインは読み込まれない仕組 みになっていることによる。 この方法には、配布されるプラグインが改良された際に、再びコピーし同じように 変更しなければならない、という短所がある。 3. グローバルプラグインの後で読み込まれる設定で上書する。 'runtimepath'の最後に、新しいファイル形式プラグインを作成する。一例として、 UNIXではこのファイルを利用できる: > vim ~/.vim/after/ftplugin/fortran.vim < このファイルの中では、変更したい設定をちょうど変更できる。 ============================================================================== 3. 標準で付属する形式別プラグインの解説 *ftplugin-docs* フォートラン(FORTRAN) *fortran-plugin* オプション: 'expandtab' .vimrcでfortran_have_tabsが指定されなければ、フォートラン標準 に従ってタブ文字を避けるために有効にする。 'textwidth' フォートラン標準に従って固定形式のソースでは72に、自由形式の ソースでは80に設定される。 'formatoptions' コードとコメントを分けて、長い行を保持するように設定される。 これにより|gq|でコメントを整形できる。 fortran_have_tabsについての議論とソース形式の判定法については|fortran-syntax| を参照。 メール(MAIL) *mail-plugin* オプション: 'modeline' トロイの木馬の危険を避けるのと、「件名」に含まれる"Vim:"がエ ラーメッセージの原因となる可能性を排除するために、モード行はオ フになる。 'textwidth' 72に設定する。e-mailでは良く推奨される値。 'formatoptions' テキストを折返し、新しい行ではコメントリーダを繰り返すをように 設定。引用記号の">"が繰り返される。 これにより|gq|で引用文を整形できる。 ローカルキーマップ: q or \\MailQuote ビジュアルモードでは選択されたテキストを、ノーマルモードではカーソルの 位置からファイル末端までのテキストを引用する。これは全ての行に "> " が 挿入されることを意味している。 MAN *man-plugin* マニュアルページを洗練された方法で表示する。 マニュアルページを読み込む前に":Man"を利用するには、起動vimrcファイルでこのス クリプトを読み込む必要がある: > runtime ftplugin/man.vim オプション: 'iskeyword' マニュアルページの名前の上でCTRL-]を使えるようにするために文字 '.' が追加される。 コマンド: Man {name} {name} についてのマニュアルページを表示する。 グローバルキーマップ: K カーソル下の単語についてのマニュアルページを表示する。 ローカルキーマップ: CTRL-] カーソルの下の単語についてのマニュアルページへ移動する。 CTRL-T 直前のマニュアルページへ戻る。 RPM SPEC *spec-plugin* このプラグインに関する説明は非常に多いので、別のファイル |pi_spec.txt| に記述 してある。 vim:tw=78:ts=8:ft=help:norl: