*filetype.txt* For
Vim バージョン 7.3. Last change: 2011 Jun 19
VIMリファレンスマニュアル by Bram Moolenaar
ファイル形式
*filetype* *file-type*
1. ファイル形式
|filetypes|
2. ファイル形式別プラグイン
|filetype-plugins|
3. 標準で付属する形式別プラグインの解説
|ftplugin-docs|
|autocmd.txt|も参照。
{これらのコマンドはViには存在しない}
==============================================================================
1. ファイル形式
*filetypes* *file-types*
Vimは編集しているファイルの形式を検出することができる。これは特定のテキストに
対してファイル名をチェックしたり、場合によってはその内容を調べることで実現され
ている。
*:filetype* *:filet*
ファイル形式の検出を有効化するには、vimrcファイルでこのコマンドを使用する:
新しいファイルや既存のファイルを編集する際には必ず、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が
使用される。
GUIで使用しているとき、またはGUIを開始しようとしているときには、
menu.vimも読み込まれる。これを避けるには
|'go-M'|を参照。
独自のファイルタイプを追加するには、下の
|new-filetype|を参照。あるファイルタイ
プについてのヘルプを検索するには、ファイルタイプ名の前に "ft-" をつけ、さらに
必要に応じて "-syntax", "-indent", "-plugin" をつける。例:
ファイル形式を自動的に検出できなかった場合や、間違った形式になってしまった場合
には、
'filetype'オプションを手動で設定するか、ファイルにモード行(modeline)を追
加する選択肢がある。例として、IDLファイルに設定するにはこのコマンドを使うか:
:set filetype=idl
この
|modeline|をファイルに追加する:
/* vim: set filetype=idl : */
*:filetype-plugin-on*
ファイル形式別プラグインのロードを有効化するには:
まだファイル形式検出が有効になっていない時には、同時に有効化される。
これは実際には
'runtimepath'にある"ftplugin.vimをロードする。
結果的にファイルが編集される時に対応するプラグインファイルがロードされる(ただ
し検出したファイル形式に合致するプラグインファイルがあった時のみ)。
|filetype-plugin|
*:filetype-plugin-off*
ファイル形式別プラグインを無効化するには:
ファイル形式の検出自体は無効にならない。しかしながらファイル形式の検出を無効に
した場合には、プラグインもロードされなくなる。
これは実際には
'runtimepath'にある"ftplugof.vim"をロードする。
*:filetype-indent-on*
ファイル形式別インデントのロードを有効化するには:
まだファイル形式検出が有効になっていない時には、同時に有効化される。
これは実際には
'runtimepath'にある"indent.vimをロードする。
結果的にファイルが編集される時に対応するインデントファイルがロードされる(ただ
し検出したファイル形式に合致するインデントファイルがあった時のみ)。
|filetype-plugin|
*:filetype-indent-off*
You can disable it again with:
ファイル形式別インデントを無効化するには:
ファイル形式の検出自体は無効にならない。しかしながらファイル形式の検出を無効に
した場合には、インデントファイルもロードされなくなる。
これは実際には
'runtimepath'にある"indoff.vim"をロードする。
そうすると、これから開くファイルに対して自動インデントが無効になる。すでに開い
ているファイルに対しては何も変わらない。すでに開いているファイルに対して自動イ
ンデントを無効にするには
'autoindent',
'cindent',
'smartindent',
'indentexpr'
をオフにする。
*: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 変化なし 無効 無効
現在の状態を知るには次のようにタイプする:
このような出力が得られる:
ファイル形式は構文強調にも利用される。":syntax on"コマンドが使用されると、ファ
イル形式検出もインストールされる。":filetype on" の後に ":syntax on"を実行する
必要はない。
特定のファイル形式を無効にするには、自分のファイル形式ファイルに1行追加する。
|remove-filetype|参照。
*filetype-detect*
再びファイル検出を有効化するには:
空のファイルから編集を始めて、ファイル形式を判定するのに充分なテキストをタイプ
してからコレを使用する。例えば、シェルスクリプトの中で"#!/bin/csh"を入力してか
らということ。
ファイル形式検出が無効になっていた時には、引数"on"が指定された時のように、
初めに有効化される。
*filetype-overrule*
同じ拡張子が2つのファイル形式で使用されている時には、Vimはファイルがどのような
種類であるかを推測する。これは常に動作するわけではない。ある拡張子に対してどの
ファイル形式を使うか明示的に指定するのに、幾つかのグローバル変数を使うことがで
きる:
ファイル名 変数
*.asa g:filetype_asa
|ft-aspvbs-syntax| |ft-aspperl-syntax|
*.asp g:filetype_asp
|ft-aspvbs-syntax| |ft-aspperl-syntax|
*.asm g:asmsyntax
|ft-asm-syntax|
*.prg g:filetype_prg
*.pl g:filetype_pl
*.inc g:filetype_inc
*.w g:filetype_w
|ft-cweb-syntax|
*.i g:filetype_i
|ft-progress-syntax|
*.p g:filetype_p
|ft-pascal-syntax|
*.sh g:bash_is_sh
|ft-sh-syntax|
*.tex g:tex_flavor
|ft-tex-plugin|
*filetype-ignore*
特定のファイルが検査されないようにするには、g:ft_ignore_pat 変数を使います。こ
の変数はデフォルトで次のように設定されています。
この設定は圧縮ファイルを検査しないようにしています。
*new-filetype*
使いたいファイル形式がVimに検出されない(存在しない)場合には、その形式を追加す
る4つの方法がある。どちらにせよファイル$VIMRUNTIME/filetype.vimは変更するべき
ではない。そのファイルは新しいVimをインストールする際に上書されるのだから。
A. デフォルトのファイルタイプの検査をくつがえす。
この方法はファイルタイプごとにファイルを作ることで機能する。不便な点は
ファイルがたくさんになってしまうこと。便利な点は適切なディレクトリにファ
イルを置くだけで機能すること。
*ftdetect*
1. ユーザランタイムディレクトリを作成する。通常は
'runtimepath'オプション
に記載される最初の項目使えば良い。次にそのディレクトリに"ftdetect"とい
うディレクトリを作成する。UNIXを例に挙げる:
:!mkdir ~/.vim
:!mkdir ~/.vim/ftdetect
2. ファイル形式を検出する自動実行コマンドを含むファイルを作成する。
例:
Note "augroup" コマンドは要らない。そのファイルを読み込むときに既に定
義されている。パターンに "*" を使いファイルの内容から判断することもで
きる。
そのファイルを例えば "mine.vim" という名前で先程の "ftdetect" ディレク
トリに保存する。UNIXを例に挙げる:
3. 新しいファイル形式の検出を有効化するにはVimを再起動しなければならない。
"ftdetect" ディレクトリの中のファイルはデフォルトの検査のあとに使われるの
で、それ以前に決定したファイルタイプを変更することができる。しかしここで
|:setfiletype|を使えば、それ以前に決定したファイルタイプをそのままにしてお
くこともできる。
B. デフォルトのファイルタイプの検査の後にファイルタイプを決定する。
上と同様。ただし、':setfiletype'を使って無条件に
'filetype'を設定する。
これはまだファイルタイプがまだ認識されていないときだけ
'filetype'を設定す
る。次に例を示す。
すでに認識されたファイルタイプをコマンドから使うことができる。例えば、ファ
イルタイプが"pascal"だった時にファイルタイプを"mypascal"に設定するには。
C. ファイル形式が名前だけで検出できる場合。
1. ユーザランタイムディレクトリを作成する。通常は
'runtimepath'オプションに
記載される最初の項目使えば良い。UNIXを例に挙げる:
2. ファイル形式を検出する自動実行コマンドを含むファイルを作成する。
例:
このファイルを"filetype.vim"としてユーザランタイムディレクトリに保存す
る。UNIXを例にあげる:
3. 新しいファイル形式の検出を有効化するためにVimを再起動する。
作成したfiletype.vimはデフォルトのFileType自動実行コマンドがインストールさ
れる前に読み込まれる。そのため新しく作成した自動実行コマンドが先に適合し、
":setfiletype"コマンドがこれ以後に他の自動実行コマンドにより
'filetype'が設
定されないことを保証する。
*new-filetype-scripts*
D. ファイル形式がファイルの内容を調べる事によってのみ検出可能な場合。
1. ユーザランタイムディレクトリを作成する。通常は
'runtimepath'オプションに
記載される最初の項目使えば良い。UNIXを例に挙げる:
2. ファイルの内容で形式を決定するVimスクリプトを作成する。例:
より多くの例については$VIMRUNTIME/scripts.vimを参照。
このファイルを"scripts.vim"としてユーザランタイムディレクトリに保存す
る。UNIXを例にあげる:
3. これだけで検出は正しく動作し、Vimを再起動する必要は無い。
新しく作成したscripts.vimはデフォルトのファイル形式チェックの前に読み込まれ
ので、$VIMRUNTIME/scripts.vimに書かれたデフォルトの判定規則を上書することが
できる。
*remove-filetype*
ファイル形式が誤って検出されたならば、(上を参考に)それを補正するfiletype.vimか
scripts.vimをインストールする。
'filetype'に存在しない形式の名前を設定すれば、
それ以降の検出スクリプトで別の値が設定されてしまうのを避けることができる:
複数人で使用する環境を設定していて、個々のユーザにはファイル形式を追加/削除さ
せたくないならば、ランタイムディレクトリに置いて全ユーザが共有するように
filetype.vimとscripts.vimを書く必要がある。そのスクリプトを置くディレクトリに
は
'runtimepath'の示すうちのどれか1つを選択する。
'runtimepath'の中に設定を置き
たいディレクトリが見あたらなければ、
|system-vimrc|内で正しく追加する必要があ
る。既に設定されているデフォルトのディレクトリを変更しないように注意。
*autocmd-osfiletypes*
NOTE: RISC OS サポートが削除されたため、このコードは現在無効化されている。将来
これは
'filetype' オプションを使用するでしょう。
ファイルと共に「形式」を記録できるオペレーティングシステム(OS)では、ファイルが
ある「形式」だった時にだけ実行される自動コマンドを設定することができる。
実際の「形式」チェックはVimをどのプラットフォームで使用しているかに依存する;
詳細は使用しているシステムの解説書を参照のこと。
OSによる「形式」を利用するには自動実行コマンドの検出パターンの場所に、次の例に
示すように折カッコで囲んだ検出させたい「形式」のリストを書く:
これは以下に適合する:
- ファイル名が".html"で終了するあらゆるファイル
- 「形式」が"&faf" か "HTML"である全てのファイル。ただしここでいう「形式」とは
Vimのバージョン(稼動しているOS)によって定義される。未知の形式は適合しないと
みなされる。
「形式」とパターンを同時に指定することもできる (そのような場合には、両方供マッ
チする必要がある):
これは「形式」が"&fff"で名前が"diff"で始まるファイルに適合する。
*plugin-details*
"plugin"ディレクトリは
'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|
引数を使用すれば何が起こっているか知ることができる:
多くのメッセージが表示されるが、プラグインの読み込みの前には特定の記述がなされ
る。それは次のように始まる:
Searching for "plugin/**/*.vim" in
これを見ればVimがプラグインスクリプトをどこから探しているのかがわかる。
==============================================================================
2. ファイル形式別プラグイン
*filetype-plugins*
ファイル形式プラグインが有効になっていれば
|:filetype-plugin-on|、プラグイン読
込時にオプションが設定されキーマップが定義される。それらは全てバッファローカル
で、他のファイルに対しては決して作用しない。
ファイル形式により定義されるキーマップが自分で定義したキーマップの邪魔になるこ
ともあり得る。幾つかこれを回避する方法がある:
1. "maplocalleader"にキーマップの先頭に使用するキーシーケンスを設定する。例:
デフォルトのバックスラッシュ(\ 記号)に替えてカンマが全てのマップの始まりの
キーになる。
|<LocalLeader>|も参照。
2. 独自のマップを定義する。例:
どのような機能が提供され、それにどのような文字列がキーマップされているの
か、プラグインファイルの説明をチェックする必要がある。
独自のキーマップはプラグインが読み込まれる (つまりその形式のファイルが読み
込まれる) 前に定義する必要がある。そうすればプラグインはデフォルトキーマッ
ピングのインストールを行なわない。
3. 特定のファイル形式についてキーマップを無効化するならば、そのファイル形式名
を含むある変数を設定する。ファイル形式"mail"のキーマップを無効にするには次
のようにする:
4. ファイル形式による全てのキーマップを無効化するには次の変数を設定する:
*ftplugin-overrule*
グローバルな($VIMRUNTIMEにある、システムが提供する)ファイル形式プラグインが
キッチリ望むように動作しない場合には、これを変更する方法が3通りある:
1. 設定を追加する。
新しいファイル形式プラグインを作り、
'runtimepath'の始めのほうに置く。一例と
して、UNIXではこのファイルを利用できる:
追加したい設定やキーマップをこのファイルに記述する。グローバルプラグインは
これの後に読み込まれるので、ここで行なった設定は上書される可能性がある。そ
のような場合には以下の2つの方法のどちらかを利用する。
2. プラグインのコピーを作成し、そちらを変更する。
'runtimepath'の始めのほうにそのプラグインのコピーを置く。一例として、UNIXで
はこのように行なう:
そうすればコピーしたファイルを好きなように変更できる。これは変数
b:did_ftpluginが設定されていれば、グローバルプラグインは読み込まれない仕組
みになっていることによる。
この方法には、配布されるプラグインが改良された際に、再びコピーし同じように
変更しなければならない、という短所がある。
3. グローバルプラグインの後で読み込まれる設定で上書する。
'runtimepath'の最後に、新しいファイル形式プラグインを作成する。一例として、
UNIXではこのファイルを利用できる:
このファイルの中では、変更したい設定をちょうど変更できる。
==============================================================================
3. 標準で付属する形式別プラグインの解説
*ftplugin-docs*
チェンジログ(CHANGELOG)
*ft-changelog-plugin*
(訳注)エントリ=日付ごとの区切り アイテム=日付内の項目
チェンジログファイルを簡単に扱うことを可能にする。いくつかの便利なコマンドや
マッピング、変数がある。
オプション:
'comments' フォーマットを崩さないように空に設定される。
'textwidth' 標準的な値である78に設定される。
'formatoptions' テキストを折り返すために 't' が加えられる。
コマンド:
NewChangelogEntry 適切にアイテムを追加する(以下参照)。
ローカルマッピング:
<Leader>o 上と同様に適切にアイテムを追加する(以下参照)。
グローバルマッピング:
NOTE: グローバルマッピングはあらかじめ
frplugin/changelog.vim を実行することで有効になる。
例えば
runtime ftplugin/changelog.vim
と
|.vimrc| に書くようにして。
(訳注)この例だと間違えてこのまま書いちゃいそう。
<Leader>o カレントディレクトリに"ChangeLog"というファイルがあ
れば開き、既に開かれていればバッファを切替える。そし
て上記のローカルマッピング
<Leader>oと同じように働
く。
変数:
g:changelog_timeformat 非推奨。g:changelog_dateformatを使うこと。
g:changelog_dateformat エントリに入れる日付(と時間)の書式。
使えるフォーマットは
|strftime()| と同じ。
デフォルトでは標準的に使われている "%Y-%m-%d" が設定
されている。
g:changelog_username ユーザーの名前とメールアドレス。
デフォルトは環境変数とシステムファイルから推定され
る。まずカレントユーザーについての情報を得るために
/etc/passwd を探す。そこの最初の区切りにユーザーの実
名があることを期待している。次に環境変数の$NAMEを
チェックする。最後にアドレスを得るために`whoami`と
`hostname`を実行する。最終的に次のような値を決定す
る。
g:changelog_new_date_format
エントリを作成するときの書式。
次の特別な文字が使える:
%% 一つの '%' が入る
%d 上記で定義した日付
%u 上記で定義したユーザーの名前
%c 作成後のカーソルの位置
デフォルトは "%d %u\n\n\5* %c\n\n"。これは次のように
なる ( | はカーソルの位置を示している。しかし、行頭
の | は行の始まりを表す)
g:changelog_new_entry_format
アイテムを作成するときの書式。
次の特別な文字が使える:
%c 作成後のカーソルの位置
デフォルトは "\t*\c"。これは次のようになる
g:changelog_date_entry_search
日付エントリを探すための検索パターン。
g:changelog_new_date_formatと同じ特別な文字が使え
る。デフォルトは '^/\s*%d\_s*%u' で、次のような行
を見つける。
g:changelog_date_end_entry_search
日付エントリの終端を探すための検索パターン。
g:changelog_new_date_formatにおけるトークンと同じもの
が使用できる。デフォルトは'^\s*$'で、空白文字のみを含
む行または完全な空行を検索する。
b:changelog_name
*b:changelog_name*
チェンジログファイルの名前。
既定値は 'ChangeLog'。
b:changelog_path
カレントバッファに使うチェンジログのパス。
既定では空文字列で、カレントバッファと同じディレクトリ
から
|b:changelog_name| という名前のファイルが検索され
る。それが見つからない場合は、カレントバッファの親
ディレクトリを検索する。ファイルが見つかるか、それ以上
上がれなくなるまで、再帰的にこれが繰り返される。
b:changelog_entry_prefix
新しいエントリのプレフィックスを生成するための関数の名
前を指定する。関数は引数を取らず、プレフィックスの文字
列を返す。関数は空文字を返しても構わない。
デフォルトでは ChangeLog のパスとカレントバッファのパ
スの間の最短パスが使用される。
将来的には他の変数コンテキスト (例えば g:) でも指定で
きるようになる予定です。
チェンジログエントリは適切な位置に挿入される。現在の日付とユーザーを得た後
に、その日付とユーザーのエントリをファイルから探し、見つかればその下にアイテ
ムを加える。なければ新しいエントリとアイテムをファイルの先頭に加える。
フォートラン(FORTRAN)
*ft-fortran-plugin*
オプション:
'expandtab' .vimrcでfortran_have_tabsが指定されなければ、フォートラン標準
に従ってタブ文字を避けるために有効にする。
'textwidth' フォートラン標準に従って固定形式のソースでは72に、自由形式の
ソースでは80に設定される。
'formatoptions' コードとコメントを分けて、長い行を保持するように設定される。
これにより
|gq|でコメントを整形できる。
fortran_have_tabsについての議論とソース形式の判定法については
|ft-fortran-syntax|を参照。
GIT COMMIT *ft-gitcommit-plugin*
現在のコミットの差分をプレビューウィンドウに表示する :DiffGitCached というコマ
ンドが提供されている。このコマンドを実行すると、その引数をつけて "git diff
--cached" が実行される。
メール(MAIL)
*ft-mail-plugin*
オプション:
'modeline' トロイの木馬の危険を避けるのと、「件名」に含まれる"Vim:"がエ
ラーメッセージの原因となる可能性を排除するために、モード行はオ
フになる。
'textwidth' 72に設定する。e-mailでは良く推奨される値。
'formatoptions' テキストを折返し、新しい行ではコメントリーダを繰り返すをように
設定。引用記号の">"が繰り返される。
これにより
|gq|で引用文を整形できる。
ローカルキーマップ:
<LocalLeader>q or \\MailQuote
ビジュアルモードでは選択されたテキストを、ノーマルモードではカーソルの
位置からファイル末端までのテキストを引用する。これは全ての行に "> " が
挿入されることを意味している。
MAN *ft-man-plugin* *:Man*
マニュアルページを洗練された方法で表示する。ユーザーマニュアルの
|find-manpage|もご覧ください。
マニュアルページを読み込む前に":Man"を利用するには、起動vimrcファイルでこのス
クリプトを読み込む必要がある:
オプション:
'iskeyword' マニュアルページの名前の上で
CTRL-]を使えるようにするために文字
'.' が追加される。
コマンド:
Man
{name} {name} についてのマニュアルページを表示する。
Man
{number} {name}
{number} セクションの
{name} に付いてのマニュアルページを表示
する。
グローバルキーマップ:
<Leader>K カーソル下の単語についてのマニュアルページを表示する。
ローカルキーマップ:
CTRL-] カーソルの下の単語についてのマニュアルページへ移動する。
CTRL-T 直前のマニュアルページへ戻る。
PDF *ft-pdf-plugin*
PDF ファイル内をジャンプするため、タグスタックをシミュレートする
<C-]> と
<C-T>
という2つのマップが提供されている。次のものがタグとして扱われる:
- "startxref" の後から xref テーブルまでのバイトオフセット
- トレイラー内の /Prev キーから前の xref テーブルへのバイトオフセット
- xref テーブル内の "0123456789 00000 n" という形式の行
- PDF 内の任意の位置における "1 0 R" のようなオブジェクト参照
これらのマップは次のコマンドで無効化できる
RPM SPEC *ft-spec-plugin*
このプラグインに関する説明は非常に多いので、別のファイル
|pi_spec.txt| に記述
してある。
SQL *ft-sql*
このプラグインについての解説は長くなるので、別のファイルに分割してある:
|ft_sql.txt|
TEX *ft-tex-plugin*
*.tex ファイルの最初の行が次のような形なら
ファイルタイプは次のどれかになる: plaintex (プレイン TeX), context (ConTeXt),
tex (LaTeX)。そうでなければ context か tex かを決定するためにファイル内から
キーワードを検索する。もしキーワードが見つからなければ既定値として plaintex に
なる。この既定値は、変数 g:tex_flavor を定義すれば変更することができる。次のど
れかのようにする:
現在のところこれ以外のフォーマットは識別されない。
vim:tw=78:ts=8:ft=help:norl: