├── autoload └── pathogen.vim ├── ftdetect └── scala.vim ├── .gvimrc ├── .vimrc ├── plugin └── 31-create-scala.vim ├── indent └── scala.vim └── syntax └── scala.vim /autoload/pathogen.vim: -------------------------------------------------------------------------------- 1 | vim-pathogen/autoload/pathogen.vim -------------------------------------------------------------------------------- /ftdetect/scala.vim: -------------------------------------------------------------------------------- 1 | 2 | au BufRead,BufNewFile *.scala set filetype=scala 3 | -------------------------------------------------------------------------------- /.gvimrc: -------------------------------------------------------------------------------- 1 | " no toolbar 2 | set guioptions-=T 3 | 4 | " font 5 | set guifont=DejaVu\ Sans\ Mono:h16 6 | -------------------------------------------------------------------------------- /.vimrc: -------------------------------------------------------------------------------- 1 | call pathogen#runtime_append_all_bundles() 2 | 3 | " no compatibility with vi 4 | set nocp 5 | 6 | set bs=indent,eol,start 7 | 8 | " syntax highlighting enabled and automatic 9 | syntax on 10 | filetype plugin indent on 11 | 12 | " color 13 | set background=dark 14 | colorscheme solarized 15 | 16 | " no modelines 17 | set modelines=0 18 | 19 | set encoding=utf-8 20 | set scrolloff=3 21 | set autoindent 22 | set showmode 23 | set showcmd 24 | set hidden 25 | set wildmenu 26 | set wildmode=list:longest 27 | set visualbell 28 | set ttyfast 29 | set ruler 30 | set backspace=indent,eol,start 31 | set laststatus=2 32 | 33 | " indent 34 | set shiftwidth=2 35 | set softtabstop=2 36 | set expandtab 37 | set autoindent 38 | 39 | " sane searching 40 | set ignorecase 41 | set smartcase 42 | set gdefault 43 | set incsearch 44 | set showmatch 45 | set hlsearch 46 | nnoremap :noh 47 | nnoremap % 48 | vnoremap % 49 | 50 | " wrapping 51 | set wrap 52 | set linebreak 53 | 54 | " no dumb help key 55 | inoremap 56 | nnoremap 57 | vnoremap 58 | 59 | 60 | "tell the term has 256 colors 61 | set t_Co=256 62 | -------------------------------------------------------------------------------- /plugin/31-create-scala.vim: -------------------------------------------------------------------------------- 1 | " Vim plugin that generates new Scala source file when you type 2 | " vim nonexistent.scala. 3 | " Scripts tries to detect package name from the directory path, e. g. 4 | " .../src/main/scala/com/mycompany/myapp/app.scala gets header 5 | " package com.mycompany.myapp 6 | " 7 | " Author : Stepan Koltsov 8 | 9 | function! MakeScalaFile() 10 | if exists("b:template_used") && b:template_used 11 | return 12 | endif 13 | 14 | let b:template_used = 1 15 | 16 | let filename = expand(":p") 17 | let x = substitute(filename, "\.scala$", "", "") 18 | 19 | let p = substitute(x, "/[^/]*$", "", "") 20 | let p = substitute(p, "/", ".", "g") 21 | let p = substitute(p, ".*\.src$", "@", "") " unnamed package 22 | let p = substitute(p, ".*\.src\.", "!", "") 23 | let p = substitute(p, "^!main\.scala\.", "!", "") " 24 | let p = substitute(p, "^!.*\.ru\.", "!ru.", "") 25 | let p = substitute(p, "^!.*\.org\.", "!org.", "") 26 | let p = substitute(p, "^!.*\.com\.", "!com.", "") 27 | 28 | " ! marks that we found package name. 29 | if match(p, "^!") == 0 30 | let p = substitute(p, "^!", "", "") 31 | else 32 | " Don't know package name. 33 | let p = "@" 34 | endif 35 | 36 | let class = substitute(x, ".*/", "", "") 37 | 38 | if p != "@" 39 | call append("0", "package " . p) 40 | endif 41 | 42 | "norm G 43 | "call append(".", "class " . class . " {") 44 | 45 | "norm G 46 | "call append(".", "} /// end of " . class) 47 | 48 | call append(".", "// vim: set ts=4 sw=4 et:") 49 | call append(".", "") 50 | 51 | endfunction 52 | 53 | au BufNewFile *.scala call MakeScalaFile() 54 | 55 | " vim: set ts=4 sw=4 et: 56 | -------------------------------------------------------------------------------- /indent/scala.vim: -------------------------------------------------------------------------------- 1 | " Vim indent file 2 | " Language : Scala (http://scala-lang.org/) 3 | " Maintainer : Stefan Matthias Aust 4 | " Last Change: 2006 Apr 13 5 | 6 | if exists("b:did_indent") 7 | finish 8 | endif 9 | let b:did_indent = 1 10 | 11 | setlocal indentexpr=GetScalaIndent() 12 | 13 | setlocal indentkeys=0{,0},0),!^F,<>>, 14 | 15 | setlocal autoindent sw=2 et 16 | 17 | if exists("*GetScalaIndent") 18 | finish 19 | endif 20 | 21 | function! CountParens(line) 22 | let line = substitute(a:line, '"\(.\|\\"\)*"', '', 'g') 23 | let open = substitute(line, '[^(]', '', 'g') 24 | let close = substitute(line, '[^)]', '', 'g') 25 | return strlen(open) - strlen(close) 26 | endfunction 27 | 28 | function! GetScalaIndent() 29 | " Find a non-blank line above the current line. 30 | let lnum = prevnonblank(v:lnum - 1) 31 | 32 | " Hit the start of the file, use zero indent. 33 | if lnum == 0 34 | return 0 35 | endif 36 | 37 | let ind = indent(lnum) 38 | let prevline = getline(lnum) 39 | 40 | "Indent html literals 41 | if prevline !~ '/>\s*$' && prevline =~ '^\s*<[a-zA-Z][^>]*>\s*$' 42 | return ind + &shiftwidth 43 | endif 44 | 45 | " Add a 'shiftwidth' after lines that start a block 46 | " If if, for or while end with ), this is a one-line block 47 | " If val, var, def end with =, this is a one-line block 48 | if prevline =~ '^\s*\<\(\(else\s\+\)\?if\|for\|while\|va[lr]\|def\)\>.*[)=]\s*$' 49 | \ || prevline =~ '^\s*\\s*$' 50 | \ || prevline =~ '{\s*$' 51 | let ind = ind + &shiftwidth 52 | endif 53 | 54 | " If parenthesis are unbalanced, indent or dedent 55 | let c = CountParens(prevline) 56 | echo c 57 | if c > 0 58 | let ind = ind + &shiftwidth 59 | elseif c < 0 60 | let ind = ind - &shiftwidth 61 | endif 62 | 63 | " Dedent after if, for, while and val, var, def without block 64 | let pprevline = getline(prevnonblank(lnum - 1)) 65 | if pprevline =~ '^\s*\<\(\(else\s\+\)\?if\|for\|while\|va[lr]\|def\)\>.*[)=]\s*$' 66 | \ || pprevline =~ '^\s*\\s*$' 67 | let ind = ind - &shiftwidth 68 | endif 69 | 70 | " Align 'for' clauses nicely 71 | if prevline =~ '^\s*\ (.*;\s*$' 72 | let ind = ind - &shiftwidth + 5 73 | endif 74 | 75 | " Subtract a 'shiftwidth' on '}' or html 76 | let thisline = getline(v:lnum) 77 | if thisline =~ '^\s*[})]' 78 | \ || thisline =~ '^\s*]*>' 79 | let ind = ind - &shiftwidth 80 | endif 81 | 82 | return ind 83 | endfunction 84 | -------------------------------------------------------------------------------- /syntax/scala.vim: -------------------------------------------------------------------------------- 1 | " Vim syntax file 2 | " Language : Scala (http://scala-lang.org/) 3 | " Maintainers: Stefan Matthias Aust, Julien Wetterwald 4 | " Last Change: 2007 June 13 5 | 6 | if version < 600 7 | syntax clear 8 | elseif exists("b:current_syntax") 9 | finish 10 | endif 11 | 12 | syn case match 13 | syn sync minlines=50 14 | 15 | " most Scala keywords 16 | syn keyword scalaKeyword abstract case catch do else extends final finally for forSome if implicit lazy match new null override private protected requires return sealed super this throw try type while with yield 17 | syn match scalaKeyword "=>" 18 | syn match scalaKeyword "<-" 19 | syn match scalaKeyword "\<_\>" 20 | 21 | syn match scalaOperator ":\{2,\}" "this is not a type 22 | 23 | " package and import statements 24 | syn keyword scalaPackage package nextgroup=scalaFqn skipwhite 25 | syn keyword scalaImport import nextgroup=scalaFqn skipwhite 26 | syn match scalaFqn "\<[._$a-zA-Z0-9,]*" contained nextgroup=scalaFqnSet 27 | syn region scalaFqnSet start="{" end="}" contained 28 | 29 | " boolean literals 30 | syn keyword scalaBoolean true false 31 | 32 | " definitions 33 | syn keyword scalaDef def nextgroup=scalaDefName skipwhite 34 | syn keyword scalaVal val nextgroup=scalaValName skipwhite 35 | syn keyword scalaVar var nextgroup=scalaVarName skipwhite 36 | syn keyword scalaClass class nextgroup=scalaClassName skipwhite 37 | syn keyword scalaObject object nextgroup=scalaClassName skipwhite 38 | syn keyword scalaTrait trait nextgroup=scalaClassName skipwhite 39 | syn match scalaDefName "[^ =:;([]\+" contained nextgroup=scalaDefSpecializer skipwhite 40 | syn match scalaValName "[^ =:;([]\+" contained 41 | syn match scalaVarName "[^ =:;([]\+" contained 42 | syn match scalaClassName "[^ =:;(\[]\+" contained nextgroup=scalaClassSpecializer skipwhite 43 | syn region scalaDefSpecializer start="\[" end="\]" contained contains=scalaDefSpecializer 44 | syn region scalaClassSpecializer start="\[" end="\]" contained contains=scalaClassSpecializer 45 | 46 | " type constructor (actually anything with an uppercase letter) 47 | syn match scalaConstructor "\<[A-Z][_$a-zA-Z0-9]*\>" nextgroup=scalaConstructorSpecializer 48 | syn region scalaConstructorSpecializer start="\[" end="\]" contained contains=scalaConstructorSpecializer 49 | 50 | " method call 51 | syn match scalaRoot "\<[a-zA-Z][_$a-zA-Z0-9]*\."me=e-1 52 | syn match scalaMethodCall "\.[a-z][_$a-zA-Z0-9]*"ms=s+1 53 | 54 | " type declarations in val/var/def 55 | syn match scalaType ":\s*\(=>\s*\)\?[._$a-zA-Z0-9]\+\(\[[^]]*\]\+\)\?\(\s*\(<:\|>:\|#\|=>\)\s*[._$a-zA-Z0-9]\+\(\[[^]]*\]\+\)*\)*"ms=s+1 56 | 57 | " comments 58 | syn match scalaTodo "[tT][oO][dD][oO]" contained 59 | syn match scalaLineComment "//.*" contains=scalaTodo 60 | syn region scalaComment start="/\*" end="\*/" contains=scalaTodo 61 | syn case ignore 62 | syn include @scalaHtml syntax/html.vim 63 | unlet b:current_syntax 64 | syn case match 65 | syn region scalaDocComment start="/\*\*" end="\*/" contains=scalaDocTags,scalaTodo,@scalaHtml keepend 66 | syn region scalaDocTags start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}" contained 67 | syn match scalaDocTags "@[a-z]\+" contained 68 | 69 | syn match scalaEmptyString "\"\"" 70 | 71 | " multi-line string literals 72 | syn region scalaMultiLineString start="\"\"\"" end="\"\"\"" contains=scalaUnicode 73 | syn match scalaUnicode "\\u[0-9a-fA-F]\{4}" contained 74 | 75 | " string literals with escapes 76 | syn region scalaString start="\"[^"]" skip="\\\"" end="\"" contains=scalaStringEscape " TODO end \n or not? 77 | syn match scalaStringEscape "\\u[0-9a-fA-F]\{4}" contained 78 | syn match scalaStringEscape "\\[nrfvb\\\"]" contained 79 | 80 | " symbol and character literals 81 | syn match scalaSymbol "'[_a-zA-Z0-9][_a-zA-Z0-9]*\>" 82 | syn match scalaChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'" 83 | 84 | " number literals 85 | syn match scalaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 86 | syn match scalaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 87 | syn match scalaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 88 | syn match scalaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" 89 | 90 | " xml literals 91 | syn match scalaXmlTag "<[a-zA-Z]\_[^>]*/>" contains=scalaXmlQuote,scalaXmlEscape,scalaXmlString 92 | syn region scalaXmlString start="\"" end="\"" contained 93 | syn match scalaXmlStart "<[a-zA-Z]\_[^>]*>" contained contains=scalaXmlQuote,scalaXmlEscape,scalaXmlString 94 | syn region scalaXml start="<\([a-zA-Z]\_[^>]*\_[^/]\|[a-zA-Z]\)>" matchgroup=scalaXmlStart end="]\+>" contains=scalaXmlEscape,scalaXmlQuote,scalaXml,scalaXmlStart,scalaXmlComment 95 | syn region scalaXmlEscape matchgroup=scalaXmlEscapeSpecial start="{" matchgroup=scalaXmlEscapeSpecial end="}" contained contains=TOP 96 | syn match scalaXmlQuote "&[^;]\+;" contained 97 | syn match scalaXmlComment "" contained 98 | 99 | syn sync fromstart 100 | 101 | " map Scala groups to standard groups 102 | hi link scalaKeyword Keyword 103 | hi link scalaPackage Include 104 | hi link scalaImport Include 105 | hi link scalaBoolean Boolean 106 | hi link scalaOperator Normal 107 | hi link scalaNumber Number 108 | hi link scalaEmptyString String 109 | hi link scalaString String 110 | hi link scalaChar String 111 | hi link scalaMultiLineString String 112 | hi link scalaStringEscape Special 113 | hi link scalaSymbol Special 114 | hi link scalaUnicode Special 115 | hi link scalaComment Comment 116 | hi link scalaLineComment Comment 117 | hi link scalaDocComment Comment 118 | hi link scalaDocTags Special 119 | hi link scalaTodo Todo 120 | hi link scalaType Type 121 | hi link scalaTypeSpecializer scalaType 122 | hi link scalaXml String 123 | hi link scalaXmlTag Include 124 | hi link scalaXmlString String 125 | hi link scalaXmlStart Include 126 | hi link scalaXmlEscape Normal 127 | hi link scalaXmlEscapeSpecial Special 128 | hi link scalaXmlQuote Special 129 | hi link scalaXmlComment Comment 130 | hi link scalaDef Keyword 131 | hi link scalaVar Keyword 132 | hi link scalaVal Keyword 133 | hi link scalaClass Keyword 134 | hi link scalaObject Keyword 135 | hi link scalaTrait Keyword 136 | hi link scalaDefName Function 137 | hi link scalaDefSpecializer Function 138 | hi link scalaClassName Special 139 | hi link scalaClassSpecializer Special 140 | hi link scalaConstructor Special 141 | hi link scalaConstructorSpecializer scalaConstructor 142 | 143 | let b:current_syntax = "scala" 144 | 145 | " you might like to put these lines in your .vimrc 146 | " 147 | " customize colors a little bit (should be a different file) 148 | " hi scalaNew gui=underline 149 | " hi scalaMethodCall gui=italic 150 | " hi scalaValName gui=underline 151 | " hi scalaVarName gui=underline 152 | --------------------------------------------------------------------------------