Vim高亮显示特定的文件类型(在哪里放置语法文件,vim事件,放入vimrc的行)


17

我已经定义了一个文件时间,jak.vim以便在记笔记时提供自定义突出显示,但是它已应用于一些没有.jak扩展名的文件。特别是名为的文件progress.jlog。只是为了测试问题是否特定于该扩展名,我重命名progress.jlogprogress(无扩展名)但遇到了相同的问题。

我做了什么:

  • jak.vim在目录中创建~/.vim/ftdetect
  • 在vim参考中描述了此行:“ au BufRead,BufNewFile * .jak set filetype = jak”到顶部
  • 我重新启动了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: /superuser/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

不幸的是,代码与这两行冲突(在我的vimrc中)

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

加载vim时,我用这两个保存折叠,光标位置等(请参阅参考资料:help lo)。如果我将这两行注释掉,那么nsharish的建议就像一个魅力。在这两行中,我的任何文件中都没有突出显示。

结论

我将nsharish的答案标记为最佳答案(因为它对我最有帮助)。但是,这就是我解决问题的方法:

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是 BufRead / BufNew文件之后调用的因此突出显示被上次保存的格式所覆盖。

再次感谢nsharish帮助我提出这个解决方案。


1
* .c语句与* .jak语句有什么冲突?
akira 2010年

Answers:


10

你尝试过这个吗?

  • 将您的jak.vim放在.vim / syntax文件夹中
  • 仅将以下行放入.vimrc文件中。
语法启用
au BufRead,BufNewFile * .jak设置filetype = jak
我想这与你的jak.vim文件....它工作得很好,我....
我使用vim7.2 ...
编辑:
试试这个,
我有同样的问题与mkview和的loadView线...只需在文件中设置一次文件类型,它将被保留,然后

打开文件,然后执行“ :set ft = jak ”,保存文件并退出vim。...现在重新打开文件...语法突出显示现在应该可以正常工作...
mkviewloadview似乎保存了最后一个语法突出显示设置也....


现在尝试...但是您知道.vim / ftdetect /文件夹做什么吗?我遇到的行为是那里的任何格式化文件都适用于所有文件类型。
sixtyfootersdude

嗯,这部分起作用。但是,我的vimrc中与其他两行存在冲突。查看我的更新。
sixtyfootersdude 2010年

2

我必须承认,我不确定这对您有多大帮助...但是...

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

我已附加了文字,以防该页面被删除...或更改...

如何在vim语法突出显示中添加文件扩展名Artem Russakovskii发表于2008年4月2日,数据库,Linux,编程24 Delicious保存2 Diggs分享3retweet

更新日期:2009年7月8日

今天,有人问我一个有关为vim语法突出显示定义自定义扩展的问题,例如,vim会知道example.lmx实际上是xml类型,并对其应用xml语法突出显示。我知道vim已经不仅会自动基于扩展名,而且还会在文本中查找某些字符串,例如

深入研究后,我找到了解决方案。将以下内容添加到〜/ .vimrc(vim配置文件):

1 2 3 au BufNewFile,BufRead上的文件类型语法* .lmx设置filetype = xml应用后,我的.lmx文件突出显示:

例如,对于不时需要执行的mysql转储,同样的原理也适用。如果他们没有.sql扩展名,您将获得类似以下内容的信息:

1 2 3关于au BufNewFile,BufRead * .dump设置filetype = sql的文件类型的语法,一切都很好:

但是,您问它为什么起作用以及如何起作用?

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

将{cmd}添加到Vim将在{event}自动执行的命令列表中,找到与{pat}相匹配的文件。:help BufNewFile开始编辑不存在的文件时。:help BufRead将文件读入缓冲区后,开始编辑新缓冲区时。:help文件类型实际上将在B部分讲述整个故事。伙计们,这就是您的做法。


呵呵,将会有更好的了解这一快,但看起来有用..
sixtyfootersdude

好吧,这可能潜在地解决了一个问题,但是我认为它不会解决这个问题……我认为这与.vim/ftdetect目录有关……
sixtyfootersdude 2010年

老实说,我什至不使用VIM,所以我必须对您有所帮助...
Benjamin Schollnick

1

我尝试重现您所做的事情,但无法将文件类型应用于其他扩展名。

我还发现这有助于:

“ new-filetype”的Vim帮助文件提到在其中创建自己的“ filetype.vim” ~/.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

我认为情况可能会发生变化,但是我不是vim专家。

您的语法突出显示文件应位于语法目录中。nsharish的建议中的内容可能是您放入ftdetect内部文件的内容。

这部分:

au BufRead,BufNewFile *.jak set filetype=jak

在.vimrc中,您可能还需要添加如下一行:

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

恕我直言,这种方式更有意义。我希望这有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.