Vim 和 gVim 文件类型检测

4

操作系统:CentOS 5.7

我正在尝试使gVim/Vim对一种新文件类型进行语法高亮。到目前为止,我已经完成了以下步骤:

  • ~/.vim/ftdetect/目录下创建了一个名为foo.vim的语法文件。
  • 使用Vim可以自动检测到新的文件类型并启用语法高亮。$ vim myfile.foo
  • 但是gVim没有语法高亮。

我尝试将以下这行代码添加到~/.gvimrc文件中:

au BufRead,BufNewFile *.foo set filetype=foo

但是看起来gVim根本没有加载~/.vim/ftdetect/foo.vim。我该如何配置gVim?
  • foo.vim移动到~/.vim/syntax/对于Vim/gVim都不起作用。它们无法自动检测~/.vim/syntax文件夹。
  • 以下是脚本名称列表(加号表示gVim加载的额外文件),gVim确实加载了foo.vim,但不确定如何找出覆盖foo.vim设置的内容。因为在gVim中使用:set syntax=foo也行不通。
  • :au BufRead,BufNewFile *.foo对于vim/gVim都没有检测规则。所以vim就神奇地工作了...
  • 这是语法规则。规则文件中的版本检查是否导致gVim无法识别*.foo文件?

[vim:scriptnames]

  1: /etc/vimrc
  2: /usr/share/vim/vim70/syntax/syntax.vim
  3: /usr/share/vim/vim70/syntax/synload.vim
  4: /usr/share/vim/vim70/syntax/syncolor.vim
  5: /usr/share/vim/vim70/filetype.vim
  6: /home/myusername/.vim/ftdetect/foo.vim
  7: /home/myusername/.vimrc
  8: /usr/share/vim/vim70/plugin/getscript.vim
  9: /usr/share/vim/vim70/plugin/gzip.vim
 10: /usr/share/vim/vim70/plugin/matchparen.vim
 11: /usr/share/vim/vim70/plugin/netrwPlugin.vim
 12: /usr/share/vim/vim70/plugin/rrhelper.vim
 13: /usr/share/vim/vim70/plugin/spellfile.vim
 14: /usr/share/vim/vim70/plugin/tarPlugin.vim
 15: /usr/share/vim/vim70/plugin/tohtml.vim
 16: /usr/share/vim/vim70/plugin/vimballPlugin.vim
 17: /usr/share/vim/vim70/plugin/zipPlugin.vim
 18: /usr/share/vim/vim70/scripts.vim

[GVIM :scriptnames]

  1: /etc/vimrc
  2: /usr/share/vim/vim70/syntax/syntax.vim
  3: /usr/share/vim/vim70/syntax/synload.vim
  4: /usr/share/vim/vim70/syntax/syncolor.vim
  5: /usr/share/vim/vim70/filetype.vim
  6: /home/myusername/.vim/ftdetect/foo.vim
+  7: /usr/share/vim/vim70/menu.vim
+  8: /usr/share/vim/vim70/autoload/paste.vim
  9: /home/myusername/.vimrc
 10: /usr/share/vim/vim70/plugin/getscript.vim
 11: /usr/share/vim/vim70/plugin/gzip.vim
 12: /usr/share/vim/vim70/plugin/matchparen.vim
 13: /usr/share/vim/vim70/plugin/netrwPlugin.vim
 14: /usr/share/vim/vim70/plugin/rrhelper.vim
 15: /usr/share/vim/vim70/plugin/spellfile.vim
 16: /usr/share/vim/vim70/plugin/tarPlugin.vim
 17: /usr/share/vim/vim70/plugin/tohtml.vim
 18: /usr/share/vim/vim70/plugin/vimballPlugin.vim
 19: /usr/share/vim/vim70/plugin/zipPlugin.vim
+ 20: /home/myusername/.gvimrc
+ 21: /usr/share/vim/vim70/colors/torte.vim
 22: /usr/share/vim/vim70/scripts.vim

将其放入 ~/.vim/syntax/ 目录下。 - keltar
请将您的语法文件添加到问题中。 - keltar
对我来说运行良好。你的vim/gvim版本是什么?你尝试过使用干净的.vimrc/.gvimrc吗?(不知道有多大区别,我的.gvimrc只是一个符号链接到.vimrc) - keltar
vim/gvim 版本 = 7.0。GVIM 似乎完全不知道 "foo" 文件类型。 - Stan
2
等一下,你还试图把它放在 ~/.vim/ftdetect 吗?这个目录是用于自动命令 (au) 规则的,而不是语法文件本身。把它放进语法文件夹里,然后使用带 .foo 文件的 gvim 并输入 :echo b:current_syntax。如果它抱怨未知变量,请键入 :setf foo 然后再次 echo。 - keltar
太好了!通过 :au BufRead,BufNewFile *.foo,vim/gvim 可以自动检测 foo 文件并正确地进行语法高亮!谢谢! - Stan
1个回答

3
“Vim”和“gVim”加载的内容应该是相同的(除非您在自己的“.gvimrc”中操纵了“runtimepath”等),您可以使用“:scriptnames”检查是否已加载您的“语法检测”脚本(然后也会加载实际的“syntax/foo.vim”语法脚本)。
此外,“:au BufRead,BufNewFile *.foo”应列出您的检测规则。
“gVim”中是否还有其他语法高亮工作?如果没有,那么您在这里存在一般问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接