DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

为VIM增加新的语法支持


添加语法高亮和自动缩进

以Scala语言为例。

在scala 2.9.1安装包的misc\scala-tool-support\vim下有4个文件夹: ftdetect, indent, plugin和syntax,将这4个文件夹合并到$vim/vimfiles (例如C:\Program Files\Vim\vimfiles)对应的文件夹中, 这样打开扩展名为scala的文件时就会自动增加语法高亮和缩进了。

如果没有语法高亮和自动缩进效果,在$vim/_vimrc中增加:

filetype on " Switch on filetype detection and loads 
filetype indent on " indent file (indent.vim) for specific file types 
syntax on " Turn on syntax highligthing 
set autoindent " Copy indent from the row above 
set si " Smart indent 
set showmatch "Show matching bracets when text indicator is over them

文件名匹配的原理见::h new-filetype

手工启动语法高亮的方法:

copy scala.vim to $vim/vim72/syntax; 
open test.scala with vim 
:set syntax=scala

详见:h mysyntaxfile

添加代码导航(code insight)

下载 Exuberant Ctags 5.8,解压;

下载 Tag List vim plugin 4.5,解压到$vim/vimfiles下;

到这里就可以显示ctags支持的语言(如C, JAVA, PYTHON等)了, 但Scala不在支持之列,需要手工添加ctags和taglist对scala的支持:

新建$HOME/.ctags文件(对于Windows是命令行程序cmd.exe的启动位置, win7下是c:\Users[user_name].ctags,例如c:\Users\chad.ctags),内容如下:

--langdef=scala 
--langmap=scala:.scala 
--regex-scala=/^[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\1/c,classes/ 
--regex-scala=/^[ \t]*trait[ \t]+([a-zA-Z0-9_]+)/\1/t,traits/ 
--regex-scala=/^[ \t]*type[ \t]+([a-zA-Z0-9_]+)/\1/T,types/ 
--regex-scala=/^[ \t]*def[ \t]+([a-zA-Z0-9_\?]+)/\1/m,methods/ 
--regex-scala=/^[ \t]*val[ \t]+([a-zA-Z0-9_]+)/\1/C,constants/ 
--regex-scala=/^[ \t]*var[ \t]+([a-zA-Z0-9_]+)/\1/l,local variables/ 
--regex-scala=/^[ \t]*package[ \t]+([a-zA-Z0-9_.]+)/\1/p,packages/ 
--regex-scala=/^[ \t]*case class[ \t]+([a-zA-Z0-9_]+)/\1/c,case classes/ 
--regex-scala=/^[ \t]*final case class[ \t]+([a-zA-Z0-9_]+)/\1/c,case classes/ 
--regex-scala=/^[ \t]*object[ \t]+([a-zA-Z0-9_]+)/\1/o,objects/ 
--regex-scala=/^[ \t]*private def[ \t]+([a-zA-Z0-9_]+)/\1/pd,defs/

这样每次ctags被调用时就会读取这个文件, 语法格式详见“ Creating a user-defined language ”。

在$vim/_vimrc里增加:

let Tlist_Ctags_Cmd="f:/Software/ctags58/ctags.exe" 
let tlist_scala_settings='scala;c:Classes;t:Traits;o:Objects;m:Methods;p:Packages;C:Constants;l:Local variables;T:Types' 

可以看到tlist_scala_settings的定义与.ctags里的定义是有对应关系的, 以上参考了taglist文档第9节:“ Extending ”;还可以增加一个开/关taglist窗口的快捷键: nnoremap <silent> <F4> :TlistToggle<CR>

taglist常用操作: 在taglist窗口按F1;添加自动补全 下载插件 AutoComplPop 和 L9 ,解压到\(vim/vim72目录下(plugin, doc, autoload都要解压, 且不能解压到\)vim/vimfiles下),重启VIM即可。

验证环境: Win7, vim v7.2, AutoComplPop v2.14.1, L9 v1.1。



Published

Oct 28, 2011

Last Updated

Oct 28, 2011

Category

Tech

Tags

  • IDE 26
  • Scala 20
  • Vim 92

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor