5

vimで拡張子のないファイルのファイルタイプや構文を設定するにはどうすればよいですか?

ノート

これは、拡張子のないファイルの vim デフォルト構文の複製です。私の見解では誰も適切に答えていないので、もう一度質問します。

認識されないファイル タイプのデフォルトの構文を設定する方法は知りたくありません。拡張子のないファイルのみに設定する方法を知りたいです。

4

4 に答える 4

9

ファイル名に が含まれているかどうかを確認し、含まれて.いない場合は特定の構文に切り替える自動コマンドを作成できます。

autocmd BufNewFile,BufRead * if expand('%:t') !~ '\.' | set syntax=perl | endif

これperlはデフォルトの構文として選択されていますが、適切なものをそのまま使用できます。

于 2012-08-09T19:15:30.187 に答える
6

:help ftdetectファイルタイプ検出スクリプトの書き方に関するvimドキュメントの一部が表示されます。

この場合の提案は次のとおりです。

~/.vim/ftdetectファイルタイプにちなんで名付けられたファイルを作成しますmyfiletype.vim

このファイルに

au BufRead,BufNewFile * if expand('<afile>:e') == '' | set ft=myfiletype | end

これにより、vim は拡張子のないファイルのファイルタイプを に設定しますmyfiletype。他のファイルタイプが検出されなかった場合にのみ使用する場合は、setfiletype myfiletype代わりにset ft=myfiletype.

次に、構文ファイルを作成します~/.vim/syntax/myfiletype.vim。これは通常の vim 構文定義ファイルであり、特別なものではありません。独自のファイルタイプを作成したくない場合は、autocommand で myfiletype の代わりに通常のファイルタイプを使用してください。例えば

au BufRead,BufNewFile * if expand('<afile>:e') == '' | set ft=html | end

html構文ファイルをロードするhtmlファイルタイプを設定します。

于 2012-08-09T19:17:52.747 に答える
3
1) Hit escape to make sure you're in normal mode
2) Type ":set syntax=java" (or equivalent language)
3) :set filetype=FILETYPE, where FILETYPE is the filetype.

これを自動的に行う場合は、前の回答のソリューションを使用してみてください。

autocmd BufNewFile,BufRead * if expand('%:t') !~ '\.' | set syntax=perl | endif
于 2012-08-09T19:15:18.283 に答える
0

最終的に、C++ 構成にこれを選択しました。

let s:reserved = '^NERD_tree\|^GoToFile$'
au BufNewFile,BufRead *
\ if expand('%:e') =~ '^\(h\|hh\|hxx\|hpp\|ii\|ixx\|ipp\|inl\|txx\|tpp\|tpl\|cc\|cxx\|cpp\)$' ||
\    expand('%:t') !~ '\.\|'.s:reserved && expand('%:t') =~ '[a-z]'                            |
\   if &ft != 'cpp'                                                                            |
\     set ft=cpp                                                                               |
\   endif                                                                                      |
\   set syntax=cpp11                                                                           |
\   call CSyntaxAfter()                                                                        |
\ endif

.テールの不足をチェックするだけではありません。これにより、いくつかの非 cpp ファイルがCommandT やNERD ツリーからCOMMIT_EDITMSGREADME、 のように設定されるのを回避できます。GoToFileNERD_tree*

編集

私はこの考えをあきらめました。

于 2012-08-16T01:15:35.607 に答える