web-dev-qa-db-ja.com

特定のファイルタイプのVimハイライト(構文ファイル、vimイベント、vimrcに配置する行)

メモを取るときにカスタムハイライトを提供するためにファイル時間jak.vimを定義しましたが、.jak拡張子が付いていない一部のファイルに適用されています。具体的には、progress.jlogという名前のファイル。問題がその拡張機能に固有であるかどうかをテストするために、progress.jlogの名前をprogress(拡張機能なし)に変更しましたが、同じ問題が発生しました。

私がしたこと:

  • ディレクトリjak.vim~/.vim/ftdetectを作成しました
  • 私はこの行を追加しました: "au BufRead、BufNewFile * .jak set filetype = jak"説明されているように vimリファレンスで
  • Vimを再起動しました(:x、その後再度開きました)

これは私の~/.vim/ftdetect/jak.vimがどのように見えるかです:

~/.vim/ftdetect][505]% cat jak.vim
au BufRead, BufNewFile *.jak set filetype=jak

syn region JakeSubtitle start=+==+ end=+==+
highlight JakeSubtitle ctermbg=black ctermfg=DarkMagenta

syn region JakeTitle start=+===+ end=+===+
highlight JakeTitle ctermbg=black ctermfg=yellow

syn region JakeMasterTitle start=+====+ end=+====+
highlight JakeMasterTitle cterm=bold term=bold ctermbg=black ctermfg=LightBlue

syn region emphasis start=+<em>+ end=+</em>+
highlight emphasis ctermbg=black ctermfg=yellow

" makes all of the numbered items bold."
" (this works I just don't like the effect.  Decided to change to just highlight the "number)
"syn region numberedItem start=+^\t*\d*)+ end=+\n+"
syn match numberedItem +^\t*\d*)+
highlight numberedItem cterm=bold

そして、あなたがこれが私の.vimrcがどのように見えるかを知る必要がある場合に備えて:

~/.vim/ftdetect][508]% cat ../../.vimrc
"on will override defaults set.  Enable will allow you to set defaults."
" also turns on filetype"
"syntax on"
syntax enable

set nocompatible

" ???"
set backspace=2

"Auto indent"
set ai

"Map jj to Esc so that you do not have to reach for the Esc button"
imap jj <Esc>

"do not allow the search to wrap around the screen, must stop at the bottom."
set nowrapscan

"when doing a search highlight all occurances"
":set hlsearch"

"stop text from wrapping on the screen"
set nowrap

"turn the mouse on while in insert mode"
set mouse=i

"attempting to highlight specific keywords so it is easy to see in code."
"see help e410 for more info."
"see this post I created: https://superuser.com/questions/110054/custom-vim-highlighting"
"Legal colors: Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta,"
"Brown, DarkYellow, LightGray, LightGrey, Gray, Grey, DarkGray, DarkGrey,"
"Blue, LightBlue, Green, LightGreen, Cyan, LightCyan, Red, LightRed, Magenta,"
"LightMagenta, Yellow, LightYellow, White"
syn keyword JakeKeywords        Question TODO Answer JAKEHTTPS PossibleProblem
highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue


"for case-insensitve searches"
set ignorecase

"Override the 'ignorecase' option if the search pattern contains upper"
"case characters.  Only used when the search pattern is typed and"
"'ignorecase' option is on."
set smartcase


"use indents as the folding method"
set foldmethod=indent

"make vim save and load the folding of the document each time it loads"
"also places the cursor in the last place that it was left."
au BufWinLeave * mkview
au BufWinEnter * silent loadview

注:読みやすくするために、すべての引用符(コメント)を完成させました


更新

私は nsharishの投稿 が非常に役立つことがわかりました。彼らは私がこれを私のvimrcに追加することを提案しました:

au BufRead,BufNewFile *.jak set filetype=jak

jak.vimファイルを~/.vim/syntaxに追加します

残念ながら、そのコードはこれらの2行と競合します(私のvimrc内)

au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview

私はこれら2つを使用して、vimをロードするときに折り目やカーソル位置などを保存します(:help loを参照)。これらの2行をコメントアウトすると、nsharishの提案は魅力のように機能します。これらの2行では、どのファイルにも強調表示はありません。

結論

私は nsharish's answer をベストアンサーとしてマークしました(私にとって最も役立つので)。しかし、これは私が問題を解決した方法です:

Nsharishは正しかったので、.vimrcにこの行が必要でした。

syntax enable
au BufRead,BufNewFile *.jak set filetype=jak

そして、jak.vimファイルを~/.vim/syntaxに移動する必要がありました。

しかし、上記のように、これらの行との矛盾がありました:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

これらの行がコメントされたとき、強調表示は機能しました。

私がする必要があるのは、...set filetype...を次のように変更することです。

au BufWinEnter,BufRead,BufNewFile *.jak set filetype=jak

BufWinEnterはafter BufRead/BufNewファイルと呼ばれているので、前回保存したフォーマットでハイライトが上書きされていたと思います。

この解決策を考え出すのを手伝ってくれたnsharishにもう一度感謝します。

17

これを試しましたか。

  • Jak.vimを入れて .vim/Syntax フォルダ
  • 次の行は、.vimrcファイルにのみ入れてください。
構文の有効化
au BufRead、BufNewFile * .jak set filetype = jak


編集:

ファイルを開いて、「:set ft = jak"、ファイルを保存してvimを終了します...ファイルを再度開きます...構文の強調表示が機能するはずです...
mkview そして loadview 最後の構文ハイライト設定も保存するようです...

10
asdfg

私は認めなければなりません、これがあなたにとってどれほど役立つかは確かではありません...しかし...

http://beerpla.net/2008/04/02/how-to-add-a-vim-file-extension-to-syntax-highlighting/

ページが削除された場合に備えて、テキストを追加しました...または変更しました...

ファイル拡張子をvimに追加する方法構文の強調表示ArtemRussakovskiiが2008年4月2日にデータベース、Linux、プログラミングで投稿24おいしい保存2ディグ共有3リツイート

更新日:2009年7月8日

今日、vim構文の強調表示用のカスタム拡張の定義について質問しました。たとえば、vimは、example.lmxが実際にはタイプxmlであり、xml構文の強調表示を適用することを知っています。 vimは、拡張子に基づくだけでなく、テキスト内の特定の文字列を検索することで、自動的に既にそうしていることを知っています。

掘り下げた後、私は解決策を見つけました。以下を〜/ .vimrc(vim設定ファイル)に追加します。

1 2 3 au BufNewFile、BufReadのfiletypeの構文* .lmx set filetype = xml適用後、.lmxファイルが強調表示されます。

たとえば、私が時々実行しなければならないmysqlダンプについても、同じ原理が機能します。拡張子が.sqlでない場合は、次のようになります。

1 2 3 au BufNewFile、BufReadのファイルタイプの構文* .dump set filetype = sqlすべてが正常です:

しかし、なぜ、どのように機能するのでしょうか。

:help au:au [tocmd] [group] {event} {pat} [nested] {cmd}

{pat}に一致するファイルに対してVimが{event}で自動的に実行するコマンドのリストに{cmd}を追加します。 :help BufNewFile存在しないファイルの編集を開始したとき。 :help BufReadファイルをバッファに読み込んだ後、新しいバッファの編集を開始するとき。 :help filetypeは、実際にはパートBでこの全体像を伝えます。それがあなたのやり方です。

2

物事はねじれているかもしれないと思いますが、私はvimの専門家ではありません。

構文強調表示ファイルは、構文ディレクトリにある必要があります。 nsharishのアドバイスにあるのは、ftdetect内に配置するファイルに何が入るかということかもしれません。

この部分:

au BufRead,BufNewFile *.jak set filetype=jak

.vimrcでは、次のような行を追加する必要がある場合もあります。

au! syntax jak source $VIM/syntax/jak.vim

私見、それはこのようにもっと理にかなっています。これがお役に立てば幸いです。

1
user29961

私はあなたがしたことを再現しようとしましたが、ファイルタイプを他の拡張子に適用することができませんでした。

また、これが役立つこともわかりました。

'new-filetype'のVimヘルプファイルでは、~/.vim/filetype.vimに独自の 'filetype.vim'を作成し、そのファイルに自動コマンドを書き込むことが記載されています。

if exists("did_load_filetypes")
  finish
endif
augroup filetypedetect
  au! BufRead,BufNewFile *.jak      setfiletype jak
augroup END

Jak.vimからのこれらすべての構文と強調表示コマンドは~/.vim/syntaxの下に格納する必要があるため、~/.vim/syntax/jak.vimにコピーします(auコマンドなし)。

変更を反映するには、Vimを終了して再起動する必要もあります。

1
njd