Usr_43

Nvim :help ページは、このスクリプトから ソース を使用して、tree-sitter-vimdoc パーサーによって生成されています。


VIM ユーザーマニュアル - Bram Moolenaar 著
ファイルタイプの利用
特定の種類のファイル、例えば C プログラムやシェルスクリプトを編集する場合、同じオプション設定やマッピングを頻繁に使用します。毎回手動で設定するのはすぐに面倒になります。この章では、自動的に行う方法を説明します。
43.1 ファイルタイプごとのプラグイン 43.2 ファイルタイプの追加
次の章: usr_44.txt 独自の構文ハイライト 前の章: usr_42.txt 新しいメニューの追加 目次: usr_toc.txt

ファイルタイプごとのプラグイン filetype-plugin

ファイルタイププラグインの使用方法については、既にここで説明しました: add-filetype-plugin。しかし、デフォルト設定は最小限に抑えられているため、おそらく満足できないでしょう。C ファイルの場合、'softtabstop' オプションを 4 に設定し、3 行のコメントを挿入するマッピングを定義したいとします。これは、次の 2 つの手順だけで実行できます。
あなたのランタイムディレクトリ
1. 独自のランタイムディレクトリを作成します。Unix では通常 "~/.config/nvim" です。このディレクトリに "ftplugin" ディレクトリを作成します。
mkdir -p ~/.config/nvim/ftplugin
Unix 以外の場合は、'runtimepath' オプションの値を確認して、Vim が "ftplugin" ディレクトリをどこで探すかを確認してください。
set runtimepath?
通常は最初のディレクトリ名(最初のカンマの前)を使用します。デフォルト値が気に入らない場合は、init.vim ファイルで 'runtimepath' オプションの前にディレクトリ名を付けることができます。
2. 次の内容で "~/.config/nvim/ftplugin/c.vim" ファイルを作成します。
setlocal softtabstop=4
noremap <buffer> <LocalLeader>c o/**************<CR><CR>/<Esc>
let b:undo_ftplugin = "setl softtabstop< | unmap <buffer> <LocalLeader>c"
C ファイルを編集してみてください。'softtabstop' オプションが 4 に設定されていることに気付くはずです。しかし、別のファイルを編集すると、デフォルトのゼロにリセットされます。これは、":setlocal" コマンドが使用されたためです。これは、'softtabstop' オプションをバッファに対してローカルにのみ設定します。別のバッファを編集するとすぐに、そのバッファに設定された値に設定されます。新しいバッファの場合、デフォルト値または最後の ":set" コマンドの値が取得されます。
同様に、"\c" のマッピングは、別のバッファを編集すると消えます。":map <buffer>" コマンドは、現在のバッファに対してローカルなマッピングを作成します。これは、":map!", ":vmap" など、あらゆるマッピングコマンドで機能します。マッピング内の <LocalLeader> は、「maplocalleader」変数の値に置き換えられます。
b:undo_ftplugin を設定する行は、ファイルタイプが別の値に設定されている場合のためのものです。その場合、設定を元に戻したいと思うでしょう。b:undo_ftplugin 変数はコマンドとして実行されます。バックスラッシュなど、文字列内で特別な意味を持つ文字に注意してください。
このディレクトリにファイルタイププラグインの例があります。
$VIMRUNTIME/ftplugin/
ファイルタイププラグインの作成の詳細については、こちらをご覧ください: write-plugin

43.2 ファイルタイプの追加

Vim で認識されない種類のファイルを使用している場合は、認識させる方法を次に示します。独自のランタイムディレクトリが必要です。上記の your-runtime-dir を参照してください。
ファイルタイプ用の自動コマンドを含む "filetype.vim" ファイルを作成します。(自動コマンドについては、40.3 セクションで説明しました。)例:
augroup filetypedetect
au BufNewFile,BufRead *.xyz        setf xyz
augroup END
これは、".xyz" で終わるすべてのファイルを "xyz" ファイルタイプとして認識します。":augroup" コマンドは、この自動コマンドを "filetypedetect" グループに配置します。これにより、":filetype off" を実行するときに、ファイルタイプ検出のすべての自動コマンドを削除できます。"setf" コマンドは、'filetype' オプションが既に設定されていない限り、引数に設定します。これは、'filetype' が 2 回設定されないようにします。
ファイル名に一致させるために、さまざまなパターンを使用できます。ディレクトリ名を含めることもできます。autocmd-pattern を参照してください。たとえば、"/usr/share/scripts/" の下のファイルはすべて "ruby" ファイルですが、予期されるファイル名拡張子がありません。上記の例にこれを追加します。
augroup filetypedetect
au BufNewFile,BufRead *.xyz                        setf xyz
au BufNewFile,BufRead /usr/share/scripts/*        setf ruby
augroup END
ただし、/usr/share/scripts/README.txt ファイルを編集する場合、これは ruby ファイルではありません。"*" で終わるパターンの危険性は、すぐに多くのファイルに一致してしまうことです。この問題を回避するには、filetype.vim ファイルを別のディレクトリ、'runtimepath' の最後にあるディレクトリに配置します。たとえば、Unix の場合は "~/.config/nvim/after/filetype.vim" を使用できます。テキストファイルの検出は ~/.config/nvim/filetype.vim に配置します。
augroup filetypedetect
au BufNewFile,BufRead *.txt                        setf text
augroup END
そのファイルは、最初に 'runtimepath' にあります。次に、最後にある ~/.config/nvim/after/filetype.vim でこれを使用します。
augroup filetypedetect
au BufNewFile,BufRead /usr/share/scripts/*        setf ruby
augroup END
これで、Vim は 'runtimepath' の各ディレクトリで "filetype.vim" ファイルを検索します. 最初に ~/.config/nvim/filetype.vim が見つかりました。 *.txt ファイルをキャッチする自動コマンドがそこで定義されています。次に、Vim は $VIMRUNTIME の filetype.vim ファイルを見つけます。これは 'runtimepath' の途中です.最後に ~/.config/nvim/after/filetype.vim が見つかり、/usr/share/scripts 内の ruby ファイルを検出するための自動コマンドが追加されます。/usr/share/scripts/README.txt を編集すると、自動コマンドは定義された順序でチェックされます。 *.txt パターンが一致するため、"setf text" が実行されてファイルタイプが "text" に設定されます。ruby のパターンも一致し、"setf ruby" が実行されます。しかし、'filetype' が既に "text" に設定されているため、ここでは何も起こりません。/usr/share/scripts/foobar ファイルを編集すると、同じ自動コマンドがチェックされます。ruby のものだけが一致し、"setf ruby" が 'filetype' を ruby に設定します.

内容による認識

ファイル名が認識できない場合は、内容によって認識できる場合があります。たとえば、多くのスクリプトファイルは次のような行で始まります。
#!/bin/xyz
このスクリプトを認識するには、ランタイムディレクトリ(filetype.vim と同じ場所)に "scripts.vim" ファイルを作成します。次のようになります。
if did_filetype()
  finish
endif
if getline(1) =~ '^#!.*[/\\]xyz\>'
  setf xyz
endif
did_filetype() による最初のチェックは、ファイル名によって既にファイルタイプが検出されているファイルの内容をチェックしないようにするためです。"setf" コマンドが何も実行しない場合に、ファイルのチェックに時間を無駄にすることを回避します。scripts.vim ファイルは、デフォルトの filetype.vim ファイルの自動コマンドによってソース化されます。したがって、チェックの順序は次のとおりです.
1. 'runtimepath' 内の $VIMRUNTIME より前の filetype.vim ファイル 2. $VIMRUNTIME/filetype.vim の前半部分 3. 'runtimepath' 内のすべての scripts.vim ファイル 4. $VIMRUNTIME/filetype.vim の残りの部分 5. 'runtimepath' 内の $VIMRUNTIME より後の filetype.vim ファイル
これが十分でない場合は、すべてのファイルに一致し、スクリプトをソース化するか、関数を 실행してファイルの内容をチェックする自動コマンドを追加します.
次の章: usr_44.txt 独自の構文ハイライト
著作権: manual-copyright を参照 vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンドインデックス
クイックリファレンス