vim: syntastic, vim-coffee-script plugins
authorTomas Zeman <tzeman@volny.cz>
Fri, 29 Mar 2013 14:58:44 +0100
changeset 29 000bc60b425f
parent 28 d849e0cf95ae
child 30 1c032440b4bf
vim: syntastic, vim-coffee-script plugins
config/.vim/after/syntax/haml.vim
config/.vim/after/syntax/html.vim
config/.vim/autoload/syntastic/c.vim
config/.vim/compiler/coffee.vim
config/.vim/doc/coffee-script.txt
config/.vim/doc/syntastic.txt
config/.vim/doc/tags
config/.vim/ftdetect/coffee.vim
config/.vim/ftdetect/eco.vim
config/.vim/indent/coffee.vim
config/.vim/plugin/coffee.vim
config/.vim/plugin/syntastic.vim
config/.vim/syntax/coffee.vim
config/.vim/syntax/eco.vim
config/.vim/syntax_checkers/applescript.vim
config/.vim/syntax_checkers/c.vim
config/.vim/syntax_checkers/coffee.vim
config/.vim/syntax_checkers/cpp.vim
config/.vim/syntax_checkers/css.vim
config/.vim/syntax_checkers/cucumber.vim
config/.vim/syntax_checkers/cuda.vim
config/.vim/syntax_checkers/docbk.vim
config/.vim/syntax_checkers/efm_perl.pl
config/.vim/syntax_checkers/erlang.vim
config/.vim/syntax_checkers/erlang_check_file.erl
config/.vim/syntax_checkers/eruby.vim
config/.vim/syntax_checkers/fortran.vim
config/.vim/syntax_checkers/gentoo_metadata.vim
config/.vim/syntax_checkers/go.vim
config/.vim/syntax_checkers/go/6g.vim
config/.vim/syntax_checkers/go/gofmt.vim
config/.vim/syntax_checkers/haml.vim
config/.vim/syntax_checkers/haskell.vim
config/.vim/syntax_checkers/haxe.vim
config/.vim/syntax_checkers/html.vim
config/.vim/syntax_checkers/javascript.vim
config/.vim/syntax_checkers/javascript/gjslint.vim
config/.vim/syntax_checkers/javascript/jshint.vim
config/.vim/syntax_checkers/javascript/jsl.vim
config/.vim/syntax_checkers/javascript/jslint.vim
config/.vim/syntax_checkers/json.vim
config/.vim/syntax_checkers/json/jsonlint.vim
config/.vim/syntax_checkers/json/jsonval.vim
config/.vim/syntax_checkers/less.vim
config/.vim/syntax_checkers/lua.vim
config/.vim/syntax_checkers/matlab.vim
config/.vim/syntax_checkers/ocaml.vim
config/.vim/syntax_checkers/perl.vim
config/.vim/syntax_checkers/php.vim
config/.vim/syntax_checkers/puppet.vim
config/.vim/syntax_checkers/python.vim
config/.vim/syntax_checkers/rst.vim
config/.vim/syntax_checkers/ruby.vim
config/.vim/syntax_checkers/rust.vim
config/.vim/syntax_checkers/sass.vim
config/.vim/syntax_checkers/scss.vim
config/.vim/syntax_checkers/sh.vim
config/.vim/syntax_checkers/tcl.vim
config/.vim/syntax_checkers/tex.vim
config/.vim/syntax_checkers/vala.vim
config/.vim/syntax_checkers/xhtml.vim
config/.vim/syntax_checkers/xml.vim
config/.vim/syntax_checkers/xslt.vim
config/.vim/syntax_checkers/yaml.vim
config/.vim/syntax_checkers/zpt.vim
config/.vimrc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/after/syntax/haml.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,9 @@
+" Language:    CoffeeScript
+" Maintainer:  Sven Felix Oberquelle <Svelix.Github@gmail.com>
+" URL:         http://github.com/kchmck/vim-coffee-script
+" License:     WTFPL
+
+" Inherit coffee from html so coffeeComment isn't redefined and given higher
+" priority than hamlInterpolation.
+syn cluster hamlCoffeescript contains=@htmlCoffeeScript
+syn region  hamlCoffeescriptFilter matchgroup=hamlFilter start="^\z(\s*\):coffeescript\s*$" end="^\%(\z1 \| *$\)\@!" contains=@hamlCoffeeScript,hamlInterpolation keepend
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/after/syntax/html.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,11 @@
+" Language:    CoffeeScript
+" Maintainer:  Mick Koch <kchmck@gmail.com>
+" URL:         http://github.com/kchmck/vim-coffee-script
+" License:     WTFPL
+
+" Syntax highlighting for text/coffeescript script tags
+syn include @htmlCoffeeScript syntax/coffee.vim
+syn region coffeeScript start=+<script [^>]*type *=[^>]*text/coffeescript[^>]*>+
+\                       end=+</script>+me=s-1 keepend
+\                       contains=@htmlCoffeeScript,htmlScriptTag,@htmlPreproc
+\                       containedin=htmlHead
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/autoload/syntastic/c.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,171 @@
+if exists("g:loaded_syntastic_c_autoload")
+    finish
+endif
+let g:loaded_syntastic_c_autoload = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+" initialize c/cpp syntax checker handlers
+function! s:Init()
+    let s:handlers = []
+    let s:cflags = {}
+
+    call s:RegHandler('gtk', 'syntastic#c#CheckPKG',
+                \ ['gtk', 'gtk+-2.0', 'gtk+', 'glib-2.0', 'glib'])
+    call s:RegHandler('glib', 'syntastic#c#CheckPKG',
+                \ ['glib', 'glib-2.0', 'glib'])
+    call s:RegHandler('glade', 'syntastic#c#CheckPKG',
+                \ ['glade', 'libglade-2.0', 'libglade'])
+    call s:RegHandler('libsoup', 'syntastic#c#CheckPKG',
+                \ ['libsoup', 'libsoup-2.4', 'libsoup-2.2'])
+    call s:RegHandler('webkit', 'syntastic#c#CheckPKG',
+                \ ['webkit', 'webkit-1.0'])
+    call s:RegHandler('cairo', 'syntastic#c#CheckPKG',
+                \ ['cairo', 'cairo'])
+    call s:RegHandler('pango', 'syntastic#c#CheckPKG',
+                \ ['pango', 'pango'])
+    call s:RegHandler('libxml', 'syntastic#c#CheckPKG',
+                \ ['libxml', 'libxml-2.0', 'libxml'])
+    call s:RegHandler('freetype', 'syntastic#c#CheckPKG',
+                \ ['freetype', 'freetype2', 'freetype'])
+    call s:RegHandler('SDL', 'syntastic#c#CheckPKG',
+                \ ['sdl', 'sdl'])
+    call s:RegHandler('opengl', 'syntastic#c#CheckPKG',
+                \ ['opengl', 'gl'])
+    call s:RegHandler('ruby', 'syntastic#c#CheckRuby', [])
+    call s:RegHandler('Python\.h', 'syntastic#c#CheckPython', [])
+    call s:RegHandler('php\.h', 'syntastic#c#CheckPhp', [])
+endfunction
+
+" search the first 100 lines for include statements that are
+" given in the handlers dictionary
+function! syntastic#c#SearchHeaders()
+    let includes = ''
+    let files = []
+    let found = []
+    let lines = filter(getline(1, 100), 'v:val =~# "#\s*include"')
+
+    " search current buffer
+    for line in lines
+        let file = matchstr(line, '"\zs\S\+\ze"')
+        if file != ''
+            call add(files, file)
+            continue
+        endif
+        for handler in s:handlers
+            if line =~# handler["regex"]
+                let includes .= call(handler["func"], handler["args"])
+                call add(found, handler["regex"])
+                break
+            endif
+        endfor
+    endfor
+
+    " search included headers
+    for hfile in files
+        if hfile != ''
+            let filename = expand('%:p:h') . ((has('win32') || has('win64')) ?
+                        \ '\' : '/') . hfile
+            try
+                let lines = readfile(filename, '', 100)
+            catch /E484/
+                continue
+            endtry
+            let lines = filter(lines, 'v:val =~# "#\s*include"')
+            for handler in s:handlers
+                if index(found, handler["regex"]) != -1
+                    continue
+                endif
+                for line in lines
+                    if line =~# handler["regex"]
+                        let includes .= call(handler["func"], handler["args"])
+                        call add(found, handler["regex"])
+                        break
+                    endif
+                endfor
+            endfor
+        endif
+    endfor
+
+    return includes
+endfunction
+
+" try to find library with 'pkg-config'
+" search possible libraries from first to last given
+" argument until one is found
+function! syntastic#c#CheckPKG(name, ...)
+    if executable('pkg-config')
+        if !has_key(s:cflags, a:name)
+            for i in range(a:0)
+                let l:cflags = system('pkg-config --cflags '.a:000[i])
+                " since we cannot necessarily trust the pkg-config exit code
+                " we have to check for an error output as well
+                if v:shell_error == 0 && l:cflags !~? 'not found'
+                    let l:cflags = ' '.substitute(l:cflags, "\n", '', '')
+                    let s:cflags[a:name] = l:cflags
+                    return l:cflags
+                endif
+            endfor
+        else
+            return s:cflags[a:name]
+        endif
+    endif
+    return ''
+endfunction
+
+" try to find PHP includes with 'php-config'
+function! syntastic#c#CheckPhp()
+    if executable('php-config')
+        if !exists('s:php_flags')
+            let s:php_flags = system('php-config --includes')
+            let s:php_flags = ' ' . substitute(s:php_flags, "\n", '', '')
+        endif
+        return s:php_flags
+    endif
+    return ''
+endfunction
+
+" try to find the ruby headers with 'rbconfig'
+function! syntastic#c#CheckRuby()
+    if executable('ruby')
+        if !exists('s:ruby_flags')
+            let s:ruby_flags = system('ruby -r rbconfig -e '
+                        \ . '''puts Config::CONFIG["archdir"]''')
+            let s:ruby_flags = substitute(s:ruby_flags, "\n", '', '')
+            let s:ruby_flags = ' -I' . s:ruby_flags
+        endif
+        return s:ruby_flags
+    endif
+    return ''
+endfunction
+
+" try to find the python headers with distutils
+function! syntastic#c#CheckPython()
+    if executable('python')
+        if !exists('s:python_flags')
+            let s:python_flags = system('python -c ''from distutils import '
+                        \ . 'sysconfig; import sys; sys.stdout.write(sysconfig.get_python_inc())''')
+            let s:python_flags = substitute(s:python_flags, "\n", '', '')
+            let s:python_flags = ' -I' . s:python_flags
+        endif
+        return s:python_flags
+    endif
+    return ''
+endfunction
+
+" return a handler dictionary object
+function! s:RegHandler(regex, function, args)
+    let handler = {}
+    let handler["regex"] = a:regex
+    let handler["func"] = function(a:function)
+    let handler["args"] = a:args
+    call add(s:handlers, handler)
+endfunction
+
+call s:Init()
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/compiler/coffee.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,68 @@
+" Language:    CoffeeScript
+" Maintainer:  Mick Koch <kchmck@gmail.com>
+" URL:         http://github.com/kchmck/vim-coffee-script
+" License:     WTFPL
+
+if exists('current_compiler')
+  finish
+endif
+
+let current_compiler = 'coffee'
+" Pattern to check if coffee is the compiler
+let s:pat = '^' . current_compiler
+
+" Extra options passed to CoffeeMake
+if !exists("coffee_make_options")
+  let coffee_make_options = ""
+endif
+
+" Get a `makeprg` for the current filename. This is needed to support filenames
+" with spaces and quotes, but also not break generic `make`.
+function! s:GetMakePrg()
+  return 'coffee -c ' . g:coffee_make_options . ' $* ' . fnameescape(expand('%'))
+endfunction
+
+" Set `makeprg` and return 1 if coffee is still the compiler, else return 0.
+function! s:SetMakePrg()
+  if &l:makeprg =~ s:pat
+    let &l:makeprg = s:GetMakePrg()
+  elseif &g:makeprg =~ s:pat
+    let &g:makeprg = s:GetMakePrg()
+  else
+    return 0
+  endif
+
+  return 1
+endfunction
+
+" Set a dummy compiler so we can check whether to set locally or globally.
+CompilerSet makeprg=coffee
+call s:SetMakePrg()
+
+CompilerSet errorformat=Error:\ In\ %f\\,\ %m\ on\ line\ %l,
+                       \Error:\ In\ %f\\,\ Parse\ error\ on\ line\ %l:\ %m,
+                       \SyntaxError:\ In\ %f\\,\ %m,
+                       \%-G%.%#
+
+" Compile the current file.
+command! -bang -bar -nargs=* CoffeeMake make<bang> <args>
+
+" Set `makeprg` on rename since we embed the filename in the setting.
+augroup CoffeeUpdateMakePrg
+  autocmd!
+
+  " Update `makeprg` if coffee is still the compiler, else stop running this
+  " function.
+  function! s:UpdateMakePrg()
+    if !s:SetMakePrg()
+      autocmd! CoffeeUpdateMakePrg
+    endif
+  endfunction
+
+  " Set autocmd locally if compiler was set locally.
+  if &l:makeprg =~ s:pat
+    autocmd BufFilePost,BufWritePost <buffer> call s:UpdateMakePrg()
+  else
+    autocmd BufFilePost,BufWritePost          call s:UpdateMakePrg()
+  endif
+augroup END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/doc/coffee-script.txt	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,116 @@
+*coffee-script.txt*                                         For Vim version 7.3
+
+=============================================================================
+Author:  Mick Koch <kchmck@gmail.com>		*coffee-script-author*
+License: WTFPL (see |coffee-script-license|)
+=============================================================================
+
+CONTENTS					*coffee-script-contents*
+
+|coffee-script-introduction|		Introduction and Feature Summary
+|coffee-script-commands|			Commands
+|coffee-script-settings|			Settings
+
+{Vi does not have any of this}
+
+=============================================================================
+
+INTRODUCTION					*coffee-script*
+						*coffee-script-introduction*
+
+This plugin adds support for CoffeeScript syntax, indenting, and compiling.
+Also included is an eco syntax and support for CoffeeScript in Haml and HTML.
+
+COMMANDS					*coffee-script-commands*
+
+						*:CoffeeMake*
+:CoffeeMake[!] {opts}	Wrapper around |:make| that also passes options in
+                        |g:coffee_make_options| to the compiler. Use |:silent|
+                        to hide compiler output. See |:make| for more
+                        information about the bang and other helpful commands.
+
+						*:CoffeeCompile*
+:[range]CoffeeCompile [vertical] [{win-size}]
+			Shows how the current file or [range] is compiled
+			to JavaScript. [vertical] (or vert) splits the
+			compile buffer vertically instead of horizontally, and
+			{win-size} sets the initial size of the buffer. It can
+			be closed quickly with the "q" key.
+
+:CoffeeCompile {watch} [vertical] [{win-size}]
+			The watch mode of :CoffeeCompile emulates the "Try
+			CoffeeScript" live preview on the CoffeeScript web
+			site. After making changes to the source file,
+			exiting insert mode will cause the preview buffer to
+			update automatically. {watch} should be given as
+                        "watch" or "unwatch," where the latter will stop the
+                        automatic updating. [vertical] is recommended, and
+                        'scrollbind' is useful.
+
+						*:CoffeeRun*
+:[range]CoffeeRun	Compiles the file or [range] and runs the resulting
+			JavaScript, displaying the output.
+
+SETTINGS					*coffee-script-settings*
+
+You can configure plugin behavior using global variables and syntax commands
+in your |vimrc|.
+
+Global Settings~
+
+						*g:coffee_make_options*
+Set default options |CoffeeMake| should pass to the compiler.
+>
+	let coffee_make_options = '--bare'
+<
+						*g:coffee_compile_vert*
+Split the CoffeeCompile buffer vertically by default.
+>
+	let coffee_compile_vert = 1
+
+Syntax Highlighting~
+						*ft-coffee-script-syntax*
+Trailing whitespace is highlighted as an error by default. This can be
+disabled with:
+>
+	hi link coffeeSpaceError NONE
+
+Trailing semicolons are also considered an error (for help transitioning from
+JavaScript.) This can be disabled with:
+>
+	hi link coffeeSemicolonError NONE
+
+Reserved words like {function} and {var} are highlighted where they're not
+allowed in CoffeeScript. This can be disabled with:
+>
+        hi link coffeeReservedError NONE
+
+COMPILER					*compiler-coffee-script*
+
+A CoffeeScript compiler is provided as a wrapper around {coffee} and can be
+loaded with;
+>
+    compiler coffee
+
+This is done automatically when a CoffeeScript file is opened if no other
+compiler is loaded.
+
+=============================================================================
+
+LICENSE							*coffee-script-license*
+
+		DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+			Version 2, December 2004
+
+     Copyright (C) 2010 to 2011 Mick Koch <kchmck@gmail.com>
+
+     Everyone is permitted to copy and distribute verbatim or modified
+     copies of this license document, and changing it is allowed as long
+     as the name is changed.
+
+		DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+       TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+      0. You just DO WHAT THE FUCK YOU WANT TO.
+
+ vim:tw=78:ts=8:ft=help:norl:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/doc/syntastic.txt	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,574 @@
+*syntastic.txt*   Syntax checking on the fly has never been so pimp.
+*syntastic*
+
+
+                    It's a bird! It's a plane! ZOMG It's ... ~
+
+                   _____             __             __  _      ~
+                  / ___/__  ______  / /_____ ______/ /_(_)____ ~
+                  \__ \/ / / / __ \/ __/ __ `/ ___/ __/ / ___/ ~
+                 ___/ / /_/ / / / / /_/ /_/ (__  ) /_/ / /__   ~
+                /____/\__, /_/ /_/\__/\__,_/____/\__/_/\___/   ~
+                     /____/                                    ~
+
+
+
+                              Reference Manual~
+
+
+==============================================================================
+CONTENTS                                                  *syntastic-contents*
+
+    1.Intro...................................|syntastic-intro|
+    2.Functionality provided..................|syntastic-functionality|
+        2.1.The statusline flag...............|syntastic-statusline-flag|
+        2.2.Error signs.......................|syntastic-error-signs|
+        2.3.Error window......................|syntastic-error-window|
+    3.Commands................................|syntastic-commands|
+    4.Options.................................|syntastic-options|
+    5.Writing syntax checkers.................|syntastic-syntax-checkers|
+    6.About...................................|syntastic-about|
+    7.Changelog...............................|syntastic-changelog|
+    8.Credits.................................|syntastic-credits|
+    9.License.................................|syntastic-license|
+
+
+==============================================================================
+1. Intro                                                     *syntastic-intro*
+
+Syntastic is a syntax checking plugin that runs files through external syntax
+checkers. This can be done on demand, or automatically as files are saved and
+opened.  If syntax errors are detected, the user is notified and is happy
+because they didn't have to compile their code or execute their script to find
+them.
+
+Syntastic comes in two parts: the syntax checker plugins, and the core script
+(i.e. syntastic.vim). The syntax checker plugins are defined on a per-filetype
+basis where each one wraps up an external syntax checking program. The core
+script delegates off to these plugins and uses their output to provide the
+syntastic functionality. At the time of this writing, syntax checking plugins
+exist for c, coffee, cpp, css, cucumber, cuda, docbk, erlang, eruby, fortran,
+go, haml, haskell, html, javascript, less, lua, matlab, perl, php, puppet,
+python, ruby, sass/scss, sh, tcl, tex, vala, xhtml, xml, xslt, zpt
+
+Take a look in the syntax_checkers directory for the most up to date list.
+
+If your language is not supported then see |syntastic-syntax-checkers| for
+details on how to implement a syntax checking plugin, and be sure to send me a
+patch ;-)
+
+This plugin is currently only recommended for *nix users. It is functional on
+Windows, but since the syntax checking plugins shell out, the command window
+briefly appears whenever one is executed.
+
+
+==============================================================================
+2. Functionality provided                            *syntastic-functionality*
+
+Syntax checking can be done automatically or on demand (see
+|'syntastic_mode_map'| for configuring this).
+
+When syntax checking is done, the features below can be used to notify the
+user of errors. See |syntastic-options| for how to configure and
+activate/deactivate these features.
+
+    * A configurable statusline flag
+    * Lines with errors can have |signs| placed beside them - where a different
+      sign is used for errors and warnings.
+    * A |location-list| can be displayed with error messages for erroneous
+      buffers.
+    * Offending parts of lines can be highlighted (this functionality is only
+      provided by some syntax checkers).
+    * Balloons (if compiled in) can be used to display error messages for
+      erroneous lines when hovering the mouse over them.
+
+
+Note: This functionality is only available if a syntax checker plugin is
+present for the filetype of the buffer in question. See
+|syntastic-syntax-checkers| for details.
+
+------------------------------------------------------------------------------
+2.1. The statusline flag                           *syntastic-statusline-flag*
+
+To use the statusline flag, this must appear in your |'statusline'| setting >
+    %{SyntasticStatuslineFlag()}
+<
+Something like this could be more useful: >
+    set statusline+=%#warningmsg#
+    set statusline+=%{SyntasticStatuslineFlag()}
+    set statusline+=%*
+<
+When syntax errors are detected a flag will be shown. The content of the flag
+is derived from the |syntastic_stl_format| option
+------------------------------------------------------------------------------
+2.2. Error signs                                       *syntastic-error-signs*
+
+Syntastic uses the |:sign| commands to mark lines with errors and warnings in
+the sign column. To enable this feature, use the |'syntastic_enable_signs'|
+option.
+
+------------------------------------------------------------------------------
+2.3. The error window                       *:Errors* *syntastic-error-window*
+
+You can use the :Errors command to display the errors for the current buffer
+in the |location-list|.
+
+Note that when you use :Errors, the current location list is overwritten with
+Syntastic's own location list.
+
+
+==============================================================================
+3. Commands                                               *syntastic-commands*
+
+:Errors                                                     *:SyntasticErrors*
+
+When errors have been detected, use this command to pop up the |location-list|
+and display the error messages.
+
+
+:SyntasticToggleMode                                    *:SyntasticToggleMode*
+
+Toggles syntastic between active and passive mode. See |'syntastic_mode_map'|
+for more info.
+
+
+:SyntasticCheck                                              *:SyntasticCheck*
+
+Manually cause a syntax check to be done. Useful in passive mode, or if the
+current filetype is set to passive. See |'syntastic_mode_map'| for more info.
+
+
+==============================================================================
+4. Options                                                 *syntastic-options*
+
+
+                                                   *'syntastic_check_on_open'*
+Default: 0
+If enabled, syntastic will do syntax checks when buffers are first loaded as
+well as on saving >
+    let g:syntastic_check_on_open=1
+<
+
+                                              *'syntastic_echo_current_error'*
+Default: 1
+If enabled, syntastic will error message associated with the current line to
+the command window. If multiple errors are found, the first will be used. >
+    let g:syntastic_echo_current_error=1
+<
+
+                                                    *'syntastic_enable_signs'*
+Default: 1
+Use this option to tell syntastic whether to use the |:sign| interface to mark
+syntax errors: >
+    let g:syntastic_enable_signs=1
+<
+
+                                                 *'syntastic_enable_balloons'*
+Default: 1
+Use this option to tell syntastic whether to display error messages in balloons
+when the mouse is hovered over erroneous lines: >
+    let g:syntastic_enable_balloons = 1
+<
+Note that vim must be compiled with |+balloon_eval|.
+
+                                            *'syntastic_enable_highlighting'*
+Default: 1
+Use this option to tell syntastic whether to use syntax highlighting to mark
+errors (where possible). Highlighting can be turned off with the following >
+    let g:syntastic_enable_highlighting = 0
+<
+
+                                                       *'syntastic_auto_jump'*
+Default: 0
+Enable this option if you want the cursor to jump to the first detected error
+when saving or opening a file: >
+    let g:syntastic_auto_jump=1
+<
+
+                                                   *'syntastic_auto_loc_list'*
+Default: 2
+Use this option to tell syntastic to automatically open and/or close the
+|location-list| (see |syntastic-error-window|).
+
+When set to 0 the error window will not be opened or closed automatically. >
+    let g:syntastic_auto_loc_list=0
+<
+
+When set to 1 the error window will be automatically opened when errors are
+detected, and closed when none are detected. >
+    let g:syntastic_auto_loc_list=1
+<
+When set to 2 the error window will be automatically closed when no errors are
+detected, but not opened automatically. >
+    let g:syntastic_auto_loc_list=2
+<
+
+                                                 *'syntastic_loc_list_height'*
+Default: 10
+Use this option to specify the height of the location lists that syntastic
+opens. >
+    let g:syntastic_loc_list_height=5
+<
+
+
+                                                        *'syntastic_mode_map'*
+Default: { "mode": "active",
+           "active_filetypes": [],
+           "passive_filetypes": [] }
+
+Use this option to fine tune when automatic syntax checking is done (or not
+done).
+
+The option should be set to something like: >
+
+    let g:syntastic_mode_map = { 'mode': 'active',
+                               \ 'active_filetypes': ['ruby', 'php'],
+                               \ 'passive_filetypes': ['puppet'] }
+<
+
+"mode" can be mapped to one of two values - "active" or "passive". When set to
+active, syntastic does automatic checking whenever a buffer is saved or
+initially opened.  When set to "passive" syntastic only checks when the user
+calls :SyntasticCheck.
+
+The exceptions to these rules are defined with "active_filetypes" and
+"passive_filetypes". In passive mode, automatic checks are still done
+for all filetypes in the "active_filetypes" array. In active mode,
+automatic checks are not done for any filetypes in the
+"passive_filetypes" array.
+
+At runtime, the |:SyntasticToggleMode| command can be used to switch between
+active and passive mode.
+
+If any of "mode", "active_filetypes", or "passive_filetypes" are not specified
+then they will default to their default value as above.
+
+                                                  *'syntastic_quiet_warnings'*
+
+Use this option if you only care about syntax errors, not warnings. When set,
+this option has the following effects:
+    * no |signs| appear unless there is at least one error, whereupon both
+      errors and warnings are displayed
+    * the |'syntastic_auto_loc_list'| option only pops up the error window if
+      there's at least one error, whereupon both errors and warnings are
+      displayed
+>
+    let g:syntastic_quiet_warnings=1
+<
+
+                                                      *'syntastic_stl_format'*
+
+Default: [Syntax: line:%F (%t)]
+Use this option to control what the syntastic statusline text contains. Several
+magic flags are availble to insert information:
+    %e - number of errors
+    %w - number of warnings
+    %t - total number of warnings and errors
+    %fe - line number of first error
+    %fw - line number of first warning
+    %F - line number of first warning or error
+
+Several additional flags are available to hide text under certain conditions:
+    %E{...} - hide the text in the brackets unless there are errors
+    %W{...} - hide the text in the brackets unless there are warnings
+    %B{...} - hide the text in the brackets unless there are both warnings AND
+              errors
+These flags cant be nested.
+
+Example: >
+    let g:syntastic_stl_format = '[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]'
+<
+If this format is used and the current buffer has 5 errors and 1 warning
+starting on lines 20 and 10 respectively then this would appear on the
+statusline: >
+    [Err: 20 #5, Warn: 10 #1]
+<
+If the buffer had 2 warnings, starting on line 5 then this would appear: >
+    [Warn: 5 #2]
+<
+
+
+==============================================================================
+5. Writing syntax checkers                         *syntastic-syntax-checkers*
+
+
+A syntax checker plugin is really nothing more than a single function.  You
+should define them in ~/.vim/syntax_checkers/<filetype>.vim, but this is
+purely for convenience; Syntastic doesn't actually care where these functions
+are defined.
+
+A syntax checker plugin must define a function of the form:
+>
+    SyntaxCheckers_<filetype>_GetLocList()
+<
+The output of this function must be of the same format as that returned by
+the |getloclist()| function. See |getloclist()| and |getqflist()| for
+details.
+
+To achieve this, the function should call |SyntasticMake()| or shell out to a
+syntax checker, parse the output and munge it into the format.
+
+There are several syntax checker plugins provided with this plugin. The ruby
+one is a good example of |SyntasticMake()|, while the haml one is a good
+example of how to create the data structure manually.
+
+
+SyntasticMake({options})                                     *SyntasticMake()*
+    {options} must be a dictionary. It can contain "makeprg" and "errorformat"
+    as keys (both optional).
+
+    SyntasticMake will run |:lmake| with the given |'makeprg'| and
+    |'errorformat'| (using the current settings if none are supplied). It will
+    store the resulting error list and use it to provide all of the
+    |syntastic-functionality|. The previous makeprg and errorformat settings
+    will then be restored, as well as the location list for the window.  From
+    the user's perspective, it will be as though |:lmake| was never run.
+
+    Note that the given "makeprg" and "errorformat" will be set using |:let-&|,
+    so you should not escape spaces.
+
+
+==============================================================================
+6. About                                                     *syntastic-about*
+
+The author of syntastic is a mighty wild stallion, hear him roar! >
+     _   _ _____ _____ ___ ___ ___ ____ _   _ _
+    | \ | | ____| ____|_ _|_ _|_ _/ ___| | | | |
+    |  \| |  _| |  _|  | | | | | | |  _| |_| | |
+    | |\  | |___| |___ | | | | | | |_| |  _  |_|
+    |_| \_|_____|_____|___|___|___\____|_| |_(_)
+
+<
+He likes to trot around in the back yard reading his emails and sipping a
+scolding hot cup of Earl Grey. Email him at martin.grenfell at gmail dot com.
+He can also be found trolling the #vim channel on the freenode IRC network as
+scrooloose.
+
+Bug reports, feedback, suggestions etc are welcomed.
+
+
+The latest official releases will be on vim.org at some point.
+
+The latest dev versions are on github
+    http://github.com/scrooloose/syntastic
+
+==============================================================================
+7. Changelog                                             *syntastic-changelog*
+
+2.3.0
+    - Add syntastic_loc_list_height option
+    - Allow errors to have a "subtype" that is signed differently to standard
+      errors. Currently geared towards differentiating style errors from
+      syntax errors. Currently implemented for phpcs (technosophos).
+    - New checkers for:
+        - yaml
+        - haxe (davidB)
+        - ocaml (edwintorok)
+        - pylint (parantapa)
+        - rust (cjab)
+
+    - Updates to existing checkers:
+        - jslint
+        - jshint (gillesruppert)
+        - fortran (bmattern)
+        - sass
+        - html (darcyparker)
+        - coffee (darcyparker)
+        - docbk (darcyparker)
+        - xml
+        - xslt
+        - less (irrationalfab)
+        - php (AD7six, technosophos)
+        - cuda
+        - python (mitchellh, pneff)
+        - perl (Anthony Carapetis)
+        - c (naoina, zsprackett)
+        - puppet (frimik)
+
+2.2.0
+    - only do syntax checks when files are saved (not when first opened) - add
+      g:syntastic_check_on_open option to get the old behavior back
+    - bug fix with echoing error messages; fixes incompatability with cmd-t (datanoise)
+    - dont allow warnings to mask errors when signing/echoing errors (ashikase)
+    - auto close location list when leaving buffer. (millermedeiros)
+    - update errors appropriately when :SyntasticToggleMode is called
+    - updates/fixes to existing checkers:
+        - javascript/jshint (millermedeiros)
+        - javascript/jslint
+        - c (kongo2002)
+    - Support for new filetypes:
+        - JSON (millermedeiros, tocer)
+        - rst (reStructuredText files) (JNRowe)
+        - gentoo-metadata (JNRowe)
+
+
+2.1.0
+    - when the cursor is on a line containing an error, echo the
+      error msg (kevinw)
+    - various bug fixes and refactoring
+    - updates/fixes to existing checkers:
+        - html (millermedeiros)
+        - erlang
+        - coffeescript
+        - javascript
+        - sh
+        - php (add support for phpcs - technosophos)
+    - add an applescript checker (Zhai Cai)
+    - add support for hyphenated filetypes (JNRowe)
+
+2.0.0
+    - Add support for highlighting the erroneous parts of lines (kstep)
+    - Add support for displaying errors via balloons (kstep)
+    - Add syntastic_mode_map option to give more control over when checking
+      should be done.
+    - Add :SyntasticCheck command to force a syntax check -  useful in passive
+      mode (justone).
+    - Add the option to automatically close the location list, but not
+      automatically open it (milkypostman)
+    - Add syntastic_auto_jump option to automatically jump to the first
+      error (milkypostman)
+    - Only source syntax checkers as needed - instead of loading all of them
+      when vim starts
+
+    - Support for new filetypes:
+        - less (julienXX)
+        - docbook (tpope)
+        - matlab (jasongraham)
+        - go (dtjm)
+        - puppet (uggedal, roman, zsprackett)
+        - haskell (baldo, roman)
+        - tcl (et)
+        - vala (kstep)
+        - cuda (temporaer)
+        - css (oryband, sitedyno)
+        - fortran (Karl Yngve Lervåg)
+        - xml (kusnier)
+        - xslt (kusnier)
+        - erlang (kTT)
+        - zpt (claytron)
+
+    - updates to existing checkers:
+        - javascript (mogren, bryanforbes, cjab, ajduncan)
+        - sass/scss (tmm1, atourino, dlee, epeli)
+        - ruby (changa)
+        - perl (harleypig)
+        - haml (bmihelac)
+        - php (kstep, docteurklein)
+        - python (kstep, soli)
+        - lua (kstep)
+        - html (kstep)
+        - xhtml (kstep)
+        - c (kongo2002, brandonw)
+        - cpp (kongo2002)
+        - coffee (industrial)
+        - eruby (sergevm)
+
+1.2.0
+    - New syntax checkers from github:kongo2002
+      - c (thanks also to github:jperras)
+      - cpp
+      - lua
+      - sh (thanks also to github:jmcantrell)
+    - add coffee syntax checked by github:lstoll
+    - add tex syntax checker
+    - make html checker play nicer with html5, thanks to github:enaeseth
+    - escape filenames properly when invoking syntax checkers, thanks to
+      github:jmcantrell
+    - adjust the ruby syntax checker to avoid some common annoying warnings,
+      thanks to github:robertwahler
+
+1.1.0 [codenamed: tpimp]
+    - Dont load rubygems for ruby/eruby syntax checkers. Thanks tpope.
+    - Improve the javascript syntax checker to catch some warnings that were
+      getting missed. Thanks tpope.
+    - Dont automatically focus the error window. Thanks tpope.
+    - Add support for cucumber [tpope], haskell & perl [Anthony Carapetis],
+      and xhtml
+    - Add commands to enable/disable syntax checking at runtime. See :help
+      syntastic-commands.
+    - Add an option to specifiy syntax checkers that should be disabled by
+      default. See :help syntastic_disabled_filetypes.
+    - Dont use :signs if vim wasnt compiled with support for them.
+)
+
+==============================================================================
+8. Credits                                                 *syntastic-credits*
+
+Thanks to the following people for testing, bug reports, patches etc. They own,
+hard.
+
+    Mikael Fridh (frimik)
+    Patrice Neff (pneff )
+    Gilles Ruppert (gillesruppert)
+    Naoya INADA (naoina)
+    Mitchell Hashimoto (mitchellh)
+    irrationalfab
+    Andy Dawson (AD7six)
+    Parantapa Bhattacharya (parantapa)
+    edwintorok
+    Darcy Parker (darcyparker)
+    bmattern
+    David Bernard (davidB)
+    Aleksey V. Zapparov (ixti)
+    Benji Fisher (benjifisher)
+    Lance Fetters (ashikase)
+    datanoise
+    Giuseppe Rota (grota)
+    tocer
+    James Rowe (JNRowe)
+    Zhai Cai
+    Matt Butcher (technosophos)
+    Kevin Watters (kevinw)
+    Miller Medeiros (millermedeiros)
+    Pawel Salata (kTT)
+    Fjölnir Ãsgeirsson (aptiva)
+    Clayton Parker (claytron)
+    S. Zachariah Sprackett (zsprackett)
+    Sylvain Soliman (soli)
+    Ricardo Catalinas Jiménez (jimenezrick)
+    kusnier
+    Klein Florian (docteurklein)
+    sitedyno
+    Matthew Batema (mlb-)
+    Nate Jones (justone)
+    sergevm
+    Karl Yngve Lervåg
+    Pavel Argentov (argent-smith)
+    Andy Duncan (ajduncan)
+    Antonio Touriño (atourino)
+    Chad Jablonski (cjab)
+    Roman Gonzalez (roman)
+    Tom Wieland (industrial)
+    Ory Band (oryband)
+    Esa-Matti Suuronen (epeli)
+    Brandon Waskiewicz (brandonw)
+    dlee
+    temporaer
+    Jason Graham (jasongraham)
+    Sam Nguyen (dtjm)
+    Claes Mogren (mogren)
+    Eivind Uggedal (uggedal)
+    kstep
+    Andreas Baldeau (baldo)
+    Eric Thomas (et)
+    Brian Donovan (eventualbuddha)
+    Bryan Forbes (bryanforbes)
+    Aman Gupta (tmm1)
+    Donald Ephraim Curtis (milkypostman)
+    Dominique Rose-Rosette (changa)
+    Harley Pig (harleypig)
+    bmihelac
+    Julien Blanchard (julienXX)
+    Gregor Uhlenheuer (kongo2002)
+    Lincoln Stoll
+    Tim Carey-Smith (halorgium)
+    Tim Pope (tpope)
+    Travis Jeffery
+    Anthony Carapetis
+
+
+==============================================================================
+9. License                                                 *syntastic-license*
+
+Syntastic is released under the wtfpl.
+See http://sam.zoy.org/wtfpl/COPYING.
--- a/config/.vim/doc/tags	Thu Jan 10 09:18:28 2013 +0100
+++ b/config/.vim/doc/tags	Fri Mar 29 14:58:44 2013 +0100
@@ -1,7 +1,26 @@
+'syntastic_auto_jump'	syntastic.txt	/*'syntastic_auto_jump'*
+'syntastic_auto_loc_list'	syntastic.txt	/*'syntastic_auto_loc_list'*
+'syntastic_check_on_open'	syntastic.txt	/*'syntastic_check_on_open'*
+'syntastic_echo_current_error'	syntastic.txt	/*'syntastic_echo_current_error'*
+'syntastic_enable_balloons'	syntastic.txt	/*'syntastic_enable_balloons'*
+'syntastic_enable_highlighting'	syntastic.txt	/*'syntastic_enable_highlighting'*
+'syntastic_enable_signs'	syntastic.txt	/*'syntastic_enable_signs'*
+'syntastic_loc_list_height'	syntastic.txt	/*'syntastic_loc_list_height'*
+'syntastic_mode_map'	syntastic.txt	/*'syntastic_mode_map'*
+'syntastic_quiet_warnings'	syntastic.txt	/*'syntastic_quiet_warnings'*
+'syntastic_stl_format'	syntastic.txt	/*'syntastic_stl_format'*
 :AlignCenter	textformat.txt	/*:AlignCenter*
 :AlignJustify	textformat.txt	/*:AlignJustify*
 :AlignLeft	textformat.txt	/*:AlignLeft*
 :AlignRight	textformat.txt	/*:AlignRight*
+:CoffeeCompile	coffee-script.txt	/*:CoffeeCompile*
+:CoffeeMake	coffee-script.txt	/*:CoffeeMake*
+:CoffeeRun	coffee-script.txt	/*:CoffeeRun*
+:Errors	syntastic.txt	/*:Errors*
+:SyntasticCheck	syntastic.txt	/*:SyntasticCheck*
+:SyntasticErrors	syntastic.txt	/*:SyntasticErrors*
+:SyntasticToggleMode	syntastic.txt	/*:SyntasticToggleMode*
+SyntasticMake()	syntastic.txt	/*SyntasticMake()*
 bufexplorer	bufexplorer.txt	/*bufexplorer*
 bufexplorer-changelog	bufexplorer.txt	/*bufexplorer-changelog*
 bufexplorer-credits	bufexplorer.txt	/*bufexplorer-credits*
@@ -12,6 +31,15 @@
 bufexplorer-windowlayout	bufexplorer.txt	/*bufexplorer-windowlayout*
 bufexplorer.txt	bufexplorer.txt	/*bufexplorer.txt*
 buffer-explorer	bufexplorer.txt	/*buffer-explorer*
+coffee-script	coffee-script.txt	/*coffee-script*
+coffee-script-author	coffee-script.txt	/*coffee-script-author*
+coffee-script-commands	coffee-script.txt	/*coffee-script-commands*
+coffee-script-contents	coffee-script.txt	/*coffee-script-contents*
+coffee-script-introduction	coffee-script.txt	/*coffee-script-introduction*
+coffee-script-license	coffee-script.txt	/*coffee-script-license*
+coffee-script-settings	coffee-script.txt	/*coffee-script-settings*
+coffee-script.txt	coffee-script.txt	/*coffee-script.txt*
+compiler-coffee-script	coffee-script.txt	/*compiler-coffee-script*
 drawit	DrawIt.txt	/*drawit*
 drawit-a	DrawIt.txt	/*drawit-a*
 drawit-b	DrawIt.txt	/*drawit-b*
@@ -39,6 +67,7 @@
 drawit-usage	DrawIt.txt	/*drawit-usage*
 drawit-visblock	DrawIt.txt	/*drawit-visblock*
 drawit.txt	DrawIt.txt	/*drawit.txt*
+ft-coffee-script-syntax	coffee-script.txt	/*ft-coffee-script-syntax*
 g:bufExplorerDefaultHelp	bufexplorer.txt	/*g:bufExplorerDefaultHelp*
 g:bufExplorerDetailedHelp	bufexplorer.txt	/*g:bufExplorerDetailedHelp*
 g:bufExplorerFindActive	bufexplorer.txt	/*g:bufExplorerFindActive*
@@ -51,6 +80,8 @@
 g:bufExplorerSplitBelow	bufexplorer.txt	/*g:bufExplorerSplitBelow*
 g:bufExplorerSplitOutPathName	bufexplorer.txt	/*g:bufExplorerSplitOutPathName*
 g:bufExplorerSplitRight	bufexplorer.txt	/*g:bufExplorerSplitRight*
+g:coffee_compile_vert	coffee-script.txt	/*g:coffee_compile_vert*
+g:coffee_make_options	coffee-script.txt	/*g:coffee_make_options*
 g:drawit_insertmode	DrawIt.txt	/*g:drawit_insertmode*
 project	project.txt	/*project*
 project-adding-mappings	project.txt	/*project-adding-mappings*
@@ -64,6 +95,21 @@
 project-syntax	project.txt	/*project-syntax*
 project-tips	project.txt	/*project-tips*
 project.txt	project.txt	/*project.txt*
+syntastic	syntastic.txt	/*syntastic*
+syntastic-about	syntastic.txt	/*syntastic-about*
+syntastic-changelog	syntastic.txt	/*syntastic-changelog*
+syntastic-commands	syntastic.txt	/*syntastic-commands*
+syntastic-contents	syntastic.txt	/*syntastic-contents*
+syntastic-credits	syntastic.txt	/*syntastic-credits*
+syntastic-error-signs	syntastic.txt	/*syntastic-error-signs*
+syntastic-error-window	syntastic.txt	/*syntastic-error-window*
+syntastic-functionality	syntastic.txt	/*syntastic-functionality*
+syntastic-intro	syntastic.txt	/*syntastic-intro*
+syntastic-license	syntastic.txt	/*syntastic-license*
+syntastic-options	syntastic.txt	/*syntastic-options*
+syntastic-statusline-flag	syntastic.txt	/*syntastic-statusline-flag*
+syntastic-syntax-checkers	syntastic.txt	/*syntastic-syntax-checkers*
+syntastic.txt	syntastic.txt	/*syntastic.txt*
 textformat-commands	textformat.txt	/*textformat-commands*
 textformat-config	textformat.txt	/*textformat-config*
 textformat-history	textformat.txt	/*textformat-history*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/ftdetect/coffee.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,8 @@
+" Language:    CoffeeScript
+" Maintainer:  Mick Koch <kchmck@gmail.com>
+" URL:         http://github.com/kchmck/vim-coffee-script
+" License:     WTFPL
+
+autocmd BufNewFile,BufRead *.coffee set filetype=coffee
+autocmd BufNewFile,BufRead *Cakefile set filetype=coffee
+autocmd BufNewFile,BufRead *.coffeekup set filetype=coffee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/ftdetect/eco.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,1 @@
+autocmd BufNewFile,BufRead *.eco set filetype=eco
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/indent/coffee.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,338 @@
+" Language:    CoffeeScript
+" Maintainer:  Mick Koch <kchmck@gmail.com>
+" URL:         http://github.com/kchmck/vim-coffee-script
+" License:     WTFPL
+
+if exists("b:did_indent")
+  finish
+endif
+
+let b:did_indent = 1
+
+setlocal autoindent
+setlocal indentexpr=GetCoffeeIndent(v:lnum)
+" Make sure GetCoffeeIndent is run when these are typed so they can be
+" indented or outdented.
+setlocal indentkeys+=0],0),0.,=else,=when,=catch,=finally
+
+" Only define the function once.
+if exists("*GetCoffeeIndent")
+  finish
+endif
+
+" Keywords to indent after
+let s:INDENT_AFTER_KEYWORD = '^\%(if\|unless\|else\|for\|while\|until\|'
+\                          . 'loop\|switch\|when\|try\|catch\|finally\|'
+\                          . 'class\)\>'
+
+" Operators to indent after
+let s:INDENT_AFTER_OPERATOR = '\%([([{:=]\|[-=]>\)$'
+
+" Keywords and operators that continue a line
+let s:CONTINUATION = '\<\%(is\|isnt\|and\|or\)\>$'
+\                  . '\|'
+\                  . '\%(-\@<!-\|+\@<!+\|<\|[-=]\@<!>\|\*\|/\@<!/\|%\||\|'
+\                  . '&\|,\|\.\@<!\.\)$'
+
+" Operators that block continuation indenting
+let s:CONTINUATION_BLOCK = '[([{:=]$'
+
+" A continuation dot access
+let s:DOT_ACCESS = '^\.'
+
+" Keywords to outdent after
+let s:OUTDENT_AFTER = '^\%(return\|break\|continue\|throw\)\>'
+
+" A compound assignment like `... = if ...`
+let s:COMPOUND_ASSIGNMENT = '[:=]\s*\%(if\|unless\|for\|while\|until\|'
+\                         . 'switch\|try\|class\)\>'
+
+" A postfix condition like `return ... if ...`.
+let s:POSTFIX_CONDITION = '\S\s\+\zs\<\%(if\|unless\)\>'
+
+" A single-line else statement like `else ...` but not `else if ...
+let s:SINGLE_LINE_ELSE = '^else\s\+\%(\<\%(if\|unless\)\>\)\@!'
+
+" Max lines to look back for a match
+let s:MAX_LOOKBACK = 50
+
+" Syntax names for strings
+let s:SYNTAX_STRING = 'coffee\%(String\|AssignString\|Embed\|Regex\|Heregex\|'
+\                   . 'Heredoc\)'
+
+" Syntax names for comments
+let s:SYNTAX_COMMENT = 'coffee\%(Comment\|BlockComment\|HeregexComment\)'
+
+" Syntax names for strings and comments
+let s:SYNTAX_STRING_COMMENT = s:SYNTAX_STRING . '\|' . s:SYNTAX_COMMENT
+
+" Get the linked syntax name of a character.
+function! s:SyntaxName(linenum, col)
+  return synIDattr(synID(a:linenum, a:col, 1), 'name')
+endfunction
+
+" Check if a character is in a comment.
+function! s:IsComment(linenum, col)
+  return s:SyntaxName(a:linenum, a:col) =~ s:SYNTAX_COMMENT
+endfunction
+
+" Check if a character is in a string.
+function! s:IsString(linenum, col)
+  return s:SyntaxName(a:linenum, a:col) =~ s:SYNTAX_STRING
+endfunction
+
+" Check if a character is in a comment or string.
+function! s:IsCommentOrString(linenum, col)
+  return s:SyntaxName(a:linenum, a:col) =~ s:SYNTAX_STRING_COMMENT
+endfunction
+
+" Check if a whole line is a comment.
+function! s:IsCommentLine(linenum)
+  " Check the first non-whitespace character.
+  return s:IsComment(a:linenum, indent(a:linenum) + 1)
+endfunction
+
+" Repeatedly search a line for a regex until one is found outside a string or
+" comment.
+function! s:SmartSearch(linenum, regex)
+  " Start at the first column.
+  let col = 0
+
+  " Search until there are no more matches, unless a good match is found.
+  while 1
+    call cursor(a:linenum, col + 1)
+    let [_, col] = searchpos(a:regex, 'cn', a:linenum)
+
+    " No more matches.
+    if !col
+      break
+    endif
+
+    if !s:IsCommentOrString(a:linenum, col)
+      return 1
+    endif
+  endwhile
+
+  " No good match found.
+  return 0
+endfunction
+
+" Skip a match if it's in a comment or string, is a single-line statement that
+" isn't adjacent, or is a postfix condition.
+function! s:ShouldSkip(startlinenum, linenum, col)
+  if s:IsCommentOrString(a:linenum, a:col)
+    return 1
+  endif
+
+  " Check for a single-line statement that isn't adjacent.
+  if s:SmartSearch(a:linenum, '\<then\>') && a:startlinenum - a:linenum > 1
+    return 1
+  endif
+
+  if s:SmartSearch(a:linenum, s:POSTFIX_CONDITION) &&
+  \ !s:SmartSearch(a:linenum, s:COMPOUND_ASSIGNMENT)
+    return 1
+  endif
+
+  return 0
+endfunction
+
+" Find the farthest line to look back to, capped to line 1 (zero and negative
+" numbers cause bad things).
+function! s:MaxLookback(startlinenum)
+  return max([1, a:startlinenum - s:MAX_LOOKBACK])
+endfunction
+
+" Get the skip expression for searchpair().
+function! s:SkipExpr(startlinenum)
+  return "s:ShouldSkip(" . a:startlinenum . ", line('.'), col('.'))"
+endfunction
+
+" Search for pairs of text.
+function! s:SearchPair(start, end)
+  " The cursor must be in the first column for regexes to match.
+  call cursor(0, 1)
+
+  let startlinenum = line('.')
+
+  " Don't need the W flag since MaxLookback caps the search to line 1.
+  return searchpair(a:start, '', a:end, 'bcn',
+  \                 s:SkipExpr(startlinenum),
+  \                 s:MaxLookback(startlinenum))
+endfunction
+
+" Try to find a previous matching line.
+function! s:GetMatch(curline)
+  let firstchar = a:curline[0]
+
+  if firstchar == '}'
+    return s:SearchPair('{', '}')
+  elseif firstchar == ')'
+    return s:SearchPair('(', ')')
+  elseif firstchar == ']'
+    return s:SearchPair('\[', '\]')
+  elseif a:curline =~ '^else\>'
+    return s:SearchPair('\<\%(if\|unless\|when\)\>', '\<else\>')
+  elseif a:curline =~ '^catch\>'
+    return s:SearchPair('\<try\>', '\<catch\>')
+  elseif a:curline =~ '^finally\>'
+    return s:SearchPair('\<try\>', '\<finally\>')
+  endif
+
+  return 0
+endfunction
+
+" Get the nearest previous line that isn't a comment.
+function! s:GetPrevNormalLine(startlinenum)
+  let curlinenum = a:startlinenum
+
+  while curlinenum > 0
+    let curlinenum = prevnonblank(curlinenum - 1)
+
+    if !s:IsCommentLine(curlinenum)
+      return curlinenum
+    endif
+  endwhile
+
+  return 0
+endfunction
+
+" Try to find a comment in a line.
+function! s:FindComment(linenum)
+  let col = 0
+
+  while 1
+    call cursor(a:linenum, col + 1)
+    let [_, col] = searchpos('#', 'cn', a:linenum)
+
+    if !col
+      break
+    endif
+
+    if s:IsComment(a:linenum, col)
+      return col
+    endif
+  endwhile
+
+  return 0
+endfunction
+
+" Get a line without comments or surrounding whitespace.
+function! s:GetTrimmedLine(linenum)
+  let comment = s:FindComment(a:linenum)
+  let line = getline(a:linenum)
+
+  if comment
+    " Subtract 1 to get to the column before the comment and another 1 for
+    " zero-based indexing.
+    let line = line[:comment - 2]
+  endif
+
+  return substitute(substitute(line, '^\s\+', '', ''),
+  \                                  '\s\+$', '', '')
+endfunction
+
+function! s:GetCoffeeIndent(curlinenum)
+  let prevlinenum = s:GetPrevNormalLine(a:curlinenum)
+
+  " Don't do anything if there's no previous line.
+  if !prevlinenum
+    return -1
+  endif
+
+  let curline = s:GetTrimmedLine(a:curlinenum)
+
+  " Try to find a previous matching statement. This handles outdenting.
+  let matchlinenum = s:GetMatch(curline)
+
+  if matchlinenum
+    return indent(matchlinenum)
+  endif
+
+  " Try to find a matching `when`.
+  if curline =~ '^when\>' && !s:SmartSearch(prevlinenum, '\<switch\>')
+    let linenum = a:curlinenum
+
+    while linenum > 0
+      let linenum = s:GetPrevNormalLine(linenum)
+
+      if getline(linenum) =~ '^\s*when\>'
+        return indent(linenum)
+      endif
+    endwhile
+
+    return -1
+  endif
+
+  let prevline = s:GetTrimmedLine(prevlinenum)
+  let previndent = indent(prevlinenum)
+
+  " Always indent after these operators.
+  if prevline =~ s:INDENT_AFTER_OPERATOR
+    return previndent + &shiftwidth
+  endif
+
+  " Indent after a continuation if it's the first.
+  if prevline =~ s:CONTINUATION
+    " If the line ends in a slash, make sure it isn't a regex.
+    if prevline =~ '/$'
+      " Move to the line so we can get the last column.
+      call cursor(prevlinenum)
+
+      if s:IsString(prevlinenum, col('$') - 1)
+        return -1
+      endif
+    endif
+
+    let prevprevlinenum = s:GetPrevNormalLine(prevlinenum)
+
+    " If the continuation is the first in the file, don't run the other checks.
+    if !prevprevlinenum
+      return previndent + &shiftwidth
+    endif
+
+    let prevprevline = s:GetTrimmedLine(prevprevlinenum)
+
+    if prevprevline !~ s:CONTINUATION && prevprevline !~ s:CONTINUATION_BLOCK
+      return previndent + &shiftwidth
+    endif
+
+    return -1
+  endif
+
+  " Indent after these keywords and compound assignments if they aren't a
+  " single-line statement.
+  if prevline =~ s:INDENT_AFTER_KEYWORD || prevline =~ s:COMPOUND_ASSIGNMENT
+    if !s:SmartSearch(prevlinenum, '\<then\>') && prevline !~ s:SINGLE_LINE_ELSE
+      return previndent + &shiftwidth
+    endif
+
+    return -1
+  endif
+
+  " Indent a dot access if it's the first.
+  if curline =~ s:DOT_ACCESS && prevline !~ s:DOT_ACCESS
+    return previndent + &shiftwidth
+  endif
+
+  " Outdent after these keywords if they don't have a postfix condition or are
+  " a single-line statement.
+  if prevline =~ s:OUTDENT_AFTER
+    if !s:SmartSearch(prevlinenum, s:POSTFIX_CONDITION) ||
+    \   s:SmartSearch(prevlinenum, '\<then\>')
+      return previndent - &shiftwidth
+    endif
+  endif
+
+  " No indenting or outdenting is needed.
+  return -1
+endfunction
+
+" Wrap s:GetCoffeeIndent to keep the cursor position.
+function! GetCoffeeIndent(curlinenum)
+  let oldcursor = getpos('.')
+  let indent = s:GetCoffeeIndent(a:curlinenum)
+  call setpos('.', oldcursor)
+
+  return indent
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/plugin/coffee.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,221 @@
+" Language:    CoffeeScript
+" Maintainer:  Mick Koch <kchmck@gmail.com>
+" URL:         http://github.com/kchmck/vim-coffee-script
+" License:     WTFPL
+
+if exists("b:did_ftplugin")
+  finish
+endif
+
+let b:did_ftplugin = 1
+
+setlocal formatoptions-=t formatoptions+=croql
+setlocal comments=:#
+setlocal commentstring=#\ %s
+setlocal omnifunc=javascriptcomplete#CompleteJS
+
+" Enable CoffeeMake if it won't overwrite any settings.
+if !len(&l:makeprg)
+  compiler coffee
+endif
+
+" Reset the global variables used by CoffeeCompile.
+function! s:CoffeeCompileResetVars()
+  " Position in the source buffer
+  let s:coffee_compile_src_buf = -1
+  let s:coffee_compile_src_pos = []
+
+  " Position in the CoffeeCompile buffer
+  let s:coffee_compile_buf = -1
+  let s:coffee_compile_win = -1
+  let s:coffee_compile_pos = []
+
+  " If CoffeeCompile is watching a buffer
+  let s:coffee_compile_watch = 0
+endfunction
+
+" Save the cursor position when moving to and from the CoffeeCompile buffer.
+function! s:CoffeeCompileSavePos()
+  let buf = bufnr('%')
+  let pos = getpos('.')
+
+  if buf == s:coffee_compile_buf
+    let s:coffee_compile_pos = pos
+  else
+    let s:coffee_compile_src_buf = buf
+    let s:coffee_compile_src_pos = pos
+  endif
+endfunction
+
+" Restore the cursor to the source buffer.
+function! s:CoffeeCompileRestorePos()
+  let win = bufwinnr(s:coffee_compile_src_buf)
+
+  if win != -1
+    exec win 'wincmd w'
+    call setpos('.', s:coffee_compile_src_pos)
+  endif
+endfunction
+
+" Close the CoffeeCompile buffer and clean things up.
+function! s:CoffeeCompileClose()
+  silent! autocmd! CoffeeCompileAuPos
+  silent! autocmd! CoffeeCompileAuWatch
+
+  call s:CoffeeCompileRestorePos()
+  call s:CoffeeCompileResetVars()
+endfunction
+
+" Update the CoffeeCompile buffer given some input lines.
+function! s:CoffeeCompileUpdate(startline, endline)
+  let input = join(getline(a:startline, a:endline), "\n")
+
+  " Coffee doesn't like empty input.
+  if !len(input)
+    return
+  endif
+
+  " Compile input.
+  let output = system('coffee -scb 2>&1', input)
+
+  " Move to the CoffeeCompile buffer.
+  exec s:coffee_compile_win 'wincmd w'
+
+  " Replace buffer contents with new output and delete the last empty line.
+  setlocal modifiable
+    exec '% delete _'
+    put! =output
+    exec '$ delete _'
+  setlocal nomodifiable
+
+  " Highlight as JavaScript if there is no compile error.
+  if v:shell_error
+    setlocal filetype=
+  else
+    setlocal filetype=javascript
+  endif
+
+  " Restore the cursor in the compiled output.
+  call setpos('.', s:coffee_compile_pos)
+endfunction
+
+" Update the CoffeeCompile buffer with the whole source buffer and restore the
+" cursor.
+function! s:CoffeeCompileWatchUpdate()
+  call s:CoffeeCompileSavePos()
+  call s:CoffeeCompileUpdate(1, '$')
+  call s:CoffeeCompileRestorePos()
+endfunction
+
+" Peek at compiled CoffeeScript in a scratch buffer. We handle ranges like this
+" to prevent the cursor from being moved (and its position saved) before the
+" function is called.
+function! s:CoffeeCompile(startline, endline, args)
+  " Don't compile the CoffeeCompile buffer.
+  if bufnr('%') == s:coffee_compile_buf
+    return
+  endif
+
+  " Parse arguments.
+  let watch = a:args =~ '\<watch\>'
+  let unwatch = a:args =~ '\<unwatch\>'
+  let size = str2nr(matchstr(a:args, '\<\d\+\>'))
+   
+  " Determine default split direction.
+  if exists("g:coffee_compile_vert")
+    let vert = 1
+  else
+    let vert = a:args =~ '\<vert\%[ical]\>'
+  endif
+
+  " Remove any watch listeners.
+  silent! autocmd! CoffeeCompileAuWatch
+
+  " If just unwatching, don't compile.
+  if unwatch
+    let s:coffee_compile_watch = 0
+    return
+  endif
+
+  if watch
+    let s:coffee_compile_watch = 1
+  endif
+
+  call s:CoffeeCompileSavePos()
+
+  " Build the CoffeeCompile buffer if it doesn't exist.
+  if s:coffee_compile_buf == -1
+    let src_win = bufwinnr(s:coffee_compile_src_buf)
+
+    " Create the new window and resize it.
+    if vert
+      let width = size ? size : winwidth(src_win) / 2
+
+      vertical new
+      exec 'vertical resize' width
+    else
+      " Try to guess the compiled output's height.
+      let height = size ? size : min([winheight(src_win) / 2,
+      \                               a:endline - a:startline + 2])
+
+      botright new
+      exec 'resize' height
+    endif
+
+    " Set up scratch buffer.
+    setlocal bufhidden=wipe buftype=nofile
+    setlocal nobuflisted nomodifiable noswapfile nowrap
+
+    autocmd BufWipeout <buffer> call s:CoffeeCompileClose()
+    nnoremap <buffer> <silent> q :hide<CR>
+
+    " Save the cursor position on each buffer switch.
+    augroup CoffeeCompileAuPos
+      autocmd BufEnter,BufLeave * call s:CoffeeCompileSavePos()
+    augroup END
+
+    let s:coffee_compile_buf = bufnr('%')
+    let s:coffee_compile_win = bufwinnr(s:coffee_compile_buf)
+  endif
+
+  " Go back to the source buffer and do the initial compile.
+  call s:CoffeeCompileRestorePos()
+
+  if s:coffee_compile_watch
+    call s:CoffeeCompileWatchUpdate()
+
+    augroup CoffeeCompileAuWatch
+      autocmd InsertLeave <buffer> call s:CoffeeCompileWatchUpdate()
+    augroup END
+  else
+    call s:CoffeeCompileUpdate(a:startline, a:endline)
+  endif
+endfunction
+
+" Complete arguments for the CoffeeCompile command.
+function! s:CoffeeCompileComplete(arg, cmdline, cursor)
+  let args = ['unwatch', 'vertical', 'watch']
+
+  if !len(a:arg)
+    return args
+  endif
+
+  let match = '^' . a:arg
+
+  for arg in args
+    if arg =~ match
+      return [arg]
+    endif
+  endfor
+endfunction
+
+" Don't let new windows overwrite the CoffeeCompile variables.
+if !exists("s:coffee_compile_buf")
+  call s:CoffeeCompileResetVars()
+endif
+
+" Peek at compiled CoffeeScript.
+command! -range=% -bar -nargs=* -complete=customlist,s:CoffeeCompileComplete
+\        CoffeeCompile call s:CoffeeCompile(<line1>, <line2>, <q-args>)
+" Run some CoffeeScript.
+command! -range=% -bar CoffeeRun <line1>,<line2>:w !coffee -s
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/plugin/syntastic.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,614 @@
+"============================================================================
+"File:        syntastic.vim
+"Description: vim plugin for on the fly syntax checking
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"Version:     2.3.0
+"Last Change: 16 Feb, 2012
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists("g:loaded_syntastic_plugin")
+    finish
+endif
+let g:loaded_syntastic_plugin = 1
+
+let s:running_windows = has("win16") || has("win32") || has("win64")
+
+if !s:running_windows
+    let s:uname = system('uname')
+endif
+
+if !exists("g:syntastic_enable_signs")
+    let g:syntastic_enable_signs = 1
+endif
+if !has('signs')
+    let g:syntastic_enable_signs = 0
+endif
+
+if !exists("g:syntastic_enable_balloons")
+    let g:syntastic_enable_balloons = 1
+endif
+if !has('balloon_eval')
+    let g:syntastic_enable_balloons = 0
+endif
+
+if !exists("g:syntastic_enable_highlighting")
+    let g:syntastic_enable_highlighting = 1
+endif
+
+if !exists("g:syntastic_echo_current_error")
+    let g:syntastic_echo_current_error = 1
+endif
+
+if !exists("g:syntastic_auto_loc_list")
+    let g:syntastic_auto_loc_list = 2
+endif
+
+if !exists("g:syntastic_auto_jump")
+    let syntastic_auto_jump=0
+endif
+
+if !exists("g:syntastic_quiet_warnings")
+    let g:syntastic_quiet_warnings = 0
+endif
+
+if !exists("g:syntastic_stl_format")
+    let g:syntastic_stl_format = '[Syntax: line:%F (%t)]'
+endif
+
+if !exists("g:syntastic_mode_map")
+    let g:syntastic_mode_map = {}
+endif
+
+if !has_key(g:syntastic_mode_map, "mode")
+    let g:syntastic_mode_map['mode'] = 'active'
+endif
+
+if !has_key(g:syntastic_mode_map, "active_filetypes")
+    let g:syntastic_mode_map['active_filetypes'] = []
+endif
+
+if !has_key(g:syntastic_mode_map, "passive_filetypes")
+    let g:syntastic_mode_map['passive_filetypes'] = []
+endif
+
+if !exists("g:syntastic_check_on_open")
+    let g:syntastic_check_on_open = 0
+endif
+
+if !exists("g:syntastic_loc_list_height")
+    let g:syntastic_loc_list_height = 10
+endif
+
+command! SyntasticToggleMode call s:ToggleMode()
+command! SyntasticCheck call s:UpdateErrors(0) <bar> redraw!
+command! Errors call s:ShowLocList()
+
+highlight link SyntasticError SpellBad
+highlight link SyntasticWarning SpellCap
+
+augroup syntastic
+    if g:syntastic_echo_current_error
+        autocmd cursormoved * call s:EchoCurrentError()
+    endif
+
+    autocmd BufReadPost * if g:syntastic_check_on_open | call s:UpdateErrors(1) | endif
+    autocmd BufWritePost * call s:UpdateErrors(1)
+
+    autocmd BufWinEnter * if empty(&bt) | call s:AutoToggleLocList() | endif
+    autocmd BufWinLeave * if empty(&bt) | lclose | endif
+augroup END
+
+
+"refresh and redraw all the error info for this buf when saving or reading
+function! s:UpdateErrors(auto_invoked)
+    if !empty(&buftype)
+        return
+    endif
+
+    if !a:auto_invoked || s:ModeMapAllowsAutoChecking()
+        call s:CacheErrors()
+    end
+
+    if s:BufHasErrorsOrWarningsToDisplay()
+        call setloclist(0, s:LocList())
+    endif
+
+    if g:syntastic_enable_balloons
+        call s:RefreshBalloons()
+    endif
+
+    if g:syntastic_enable_signs
+        call s:RefreshSigns()
+    endif
+
+    if g:syntastic_auto_jump && s:BufHasErrorsOrWarningsToDisplay()
+        silent! ll
+    endif
+
+    call s:AutoToggleLocList()
+endfunction
+
+"automatically open/close the location list window depending on the users
+"config and buffer error state
+function! s:AutoToggleLocList()
+    if s:BufHasErrorsOrWarningsToDisplay()
+        if g:syntastic_auto_loc_list == 1
+            call s:ShowLocList()
+        endif
+    else
+        if g:syntastic_auto_loc_list > 0
+
+            "TODO: this will close the loc list window if one was opened by
+            "something other than syntastic
+            lclose
+        endif
+    endif
+endfunction
+
+"lazy init the loc list for the current buffer
+function! s:LocList()
+    if !exists("b:syntastic_loclist")
+        let b:syntastic_loclist = []
+    endif
+    return b:syntastic_loclist
+endfunction
+
+"clear the loc list for the buffer
+function! s:ClearLocList()
+    let b:syntastic_loclist = []
+endfunction
+
+"detect and cache all syntax errors in this buffer
+"
+"depends on a function called SyntaxCheckers_{&ft}_GetLocList() existing
+"elsewhere
+function! s:CacheErrors()
+    call s:ClearLocList()
+
+    if filereadable(expand("%"))
+
+        "sub - for _ in filetypes otherwise we cant name syntax checker
+        "functions legally for filetypes like "gentoo-metadata"
+        let fts = substitute(&ft, '-', '_', 'g')
+        for ft in split(fts, '\.')
+            if s:Checkable(ft)
+                let errors = SyntaxCheckers_{ft}_GetLocList()
+                "make errors have type "E" by default
+                call SyntasticAddToErrors(errors, {'type': 'E'})
+                call extend(s:LocList(), errors)
+            endif
+        endfor
+    endif
+endfunction
+
+"toggle the g:syntastic_mode_map['mode']
+function! s:ToggleMode()
+    if g:syntastic_mode_map['mode'] == "active"
+        let g:syntastic_mode_map['mode'] = "passive"
+    else
+        let g:syntastic_mode_map['mode'] = "active"
+    endif
+
+    call s:ClearLocList()
+    call s:UpdateErrors(1)
+
+    echo "Syntastic: " . g:syntastic_mode_map['mode'] . " mode enabled"
+endfunction
+
+"check the current filetypes against g:syntastic_mode_map to determine whether
+"active mode syntax checking should be done
+function! s:ModeMapAllowsAutoChecking()
+    let fts = split(&ft, '\.')
+
+    if g:syntastic_mode_map['mode'] == 'passive'
+        "check at least one filetype is active
+        let actives = g:syntastic_mode_map["active_filetypes"]
+        return !empty(filter(fts, 'index(actives, v:val) != -1'))
+    else
+        "check no filetypes are passive
+        let passives = g:syntastic_mode_map["passive_filetypes"]
+        return empty(filter(fts, 'index(passives, v:val) != -1'))
+    endif
+endfunction
+
+"return true if there are cached errors/warnings for this buf
+function! s:BufHasErrorsOrWarnings()
+    return !empty(s:LocList())
+endfunction
+
+"return true if there are cached errors for this buf
+function! s:BufHasErrors()
+    return len(s:ErrorsForType('E')) > 0
+endfunction
+
+function! s:BufHasErrorsOrWarningsToDisplay()
+    return s:BufHasErrors() || (!g:syntastic_quiet_warnings && s:BufHasErrorsOrWarnings())
+endfunction
+
+function! s:ErrorsForType(type)
+    return s:FilterLocList({'type': a:type})
+endfunction
+
+function! s:Errors()
+    return s:ErrorsForType("E")
+endfunction
+
+function! s:Warnings()
+    return s:ErrorsForType("W")
+endfunction
+
+"Filter a loc list (defaults to s:LocList()) by a:filters
+"e.g.
+"  s:FilterLocList({'bufnr': 10, 'type': 'e'})
+"
+"would return all errors in s:LocList() for buffer 10.
+"
+"Note that all comparisons are done with ==?
+function! s:FilterLocList(filters, ...)
+    let llist = a:0 ? a:1 : s:LocList()
+
+    let rv = deepcopy(llist)
+    for error in llist
+        for key in keys(a:filters)
+            let rhs = a:filters[key]
+            if type(rhs) == 1 "string
+                let rhs = '"' . rhs . '"'
+            endif
+
+            call filter(rv, "v:val['".key."'] ==? " . rhs)
+        endfor
+    endfor
+    return rv
+endfunction
+
+if g:syntastic_enable_signs
+    "define the signs used to display syntax and style errors/warns
+    sign define SyntasticError text=>> texthl=error
+    sign define SyntasticWarning text=>> texthl=todo
+    sign define SyntasticStyleError text=S> texthl=error
+    sign define SyntasticStyleWarning text=S> texthl=todo
+endif
+
+"start counting sign ids at 5000, start here to hopefully avoid conflicting
+"with any other code that places signs (not sure if this precaution is
+"actually needed)
+let s:first_sign_id = 5000
+let s:next_sign_id = s:first_sign_id
+
+"place signs by all syntax errs in the buffer
+function! s:SignErrors()
+    if s:BufHasErrorsOrWarningsToDisplay()
+
+        let errors = s:FilterLocList({'bufnr': bufnr('')})
+        for i in errors
+            let sign_severity = 'Error'
+            let sign_subtype = ''
+            if has_key(i,'subtype')
+                let sign_subtype = i['subtype']
+            endif
+            if i['type'] ==? 'w'
+                let sign_severity = 'Warning'
+            endif
+            let sign_type = 'Syntastic' . sign_subtype . sign_severity
+
+            if !s:WarningMasksError(i, errors)
+                exec "sign place ". s:next_sign_id ." line=". i['lnum'] ." name=". sign_type ." file=". expand("%:p")
+                call add(s:BufSignIds(), s:next_sign_id)
+                let s:next_sign_id += 1
+            endif
+        endfor
+    endif
+endfunction
+
+"return true if the given error item is a warning that, if signed, would
+"potentially mask an error if displayed at the same time
+function! s:WarningMasksError(error, llist)
+    if a:error['type'] !=? 'w'
+        return 0
+    endif
+
+    return len(s:FilterLocList({ 'type': "E", 'lnum': a:error['lnum'] }, a:llist)) > 0
+endfunction
+
+"remove the signs with the given ids from this buffer
+function! s:RemoveSigns(ids)
+    for i in a:ids
+        exec "sign unplace " . i
+        call remove(s:BufSignIds(), index(s:BufSignIds(), i))
+    endfor
+endfunction
+
+"get all the ids of the SyntaxError signs in the buffer
+function! s:BufSignIds()
+    if !exists("b:syntastic_sign_ids")
+        let b:syntastic_sign_ids = []
+    endif
+    return b:syntastic_sign_ids
+endfunction
+
+"update the error signs
+function! s:RefreshSigns()
+    let old_signs = copy(s:BufSignIds())
+    call s:SignErrors()
+    call s:RemoveSigns(old_signs)
+    let s:first_sign_id = s:next_sign_id
+endfunction
+
+"display the cached errors for this buf in the location list
+function! s:ShowLocList()
+    if !empty(s:LocList())
+        let num = winnr()
+        exec "lopen " . g:syntastic_loc_list_height
+        if num != winnr()
+            wincmd p
+        endif
+    endif
+endfunction
+
+"remove all error highlights from the window
+function! s:ClearErrorHighlights()
+    for match in getmatches()
+        if stridx(match['group'], 'Syntastic') == 0
+            call matchdelete(match['id'])
+        endif
+    endfor
+endfunction
+
+"check if a syntax checker exists for the given filetype - and attempt to
+"load one
+function! s:Checkable(ft)
+    if !exists("g:loaded_" . a:ft . "_syntax_checker")
+        exec "runtime syntax_checkers/" . a:ft . ".vim"
+    endif
+
+    return exists("*SyntaxCheckers_". a:ft ."_GetLocList")
+endfunction
+
+"set up error ballons for the current set of errors
+function! s:RefreshBalloons()
+    let b:syntastic_balloons = {}
+    if s:BufHasErrorsOrWarningsToDisplay()
+        for i in s:LocList()
+            let b:syntastic_balloons[i['lnum']] = i['text']
+        endfor
+        set beval bexpr=SyntasticErrorBalloonExpr()
+    endif
+endfunction
+
+"print as much of a:msg as possible without "Press Enter" prompt appearing
+function! s:WideMsg(msg)
+    let old_ruler = &ruler
+    let old_showcmd = &showcmd
+
+    let msg = strpart(a:msg, 0, winwidth(0)-1)
+
+    "This is here because it is possible for some error messages to begin with
+    "\n which will cause a "press enter" prompt. I have noticed this in the
+    "javascript:jshint checker and have been unable to figure out why it
+    "happens
+    let msg = substitute(msg, "\n", "", "g")
+
+    set noruler noshowcmd
+    redraw
+
+    echo msg
+
+    let &ruler=old_ruler
+    let &showcmd=old_showcmd
+endfunction
+
+"echo out the first error we find for the current line in the cmd window
+function! s:EchoCurrentError()
+    "If we have an error or warning at the current line, show it
+    let errors = s:FilterLocList({'lnum': line("."), "type": 'e'})
+    let warnings = s:FilterLocList({'lnum': line("."), "type": 'w'})
+
+    let b:syntastic_echoing_error = len(errors) || len(warnings)
+    if len(errors)
+        return s:WideMsg(errors[0]['text'])
+    endif
+    if len(warnings)
+        return s:WideMsg(warnings[0]['text'])
+    endif
+
+    "Otherwise, clear the status line
+    if b:syntastic_echoing_error
+        echo
+        let b:syntastic_echoing_error = 0
+    endif
+endfunction
+
+"load the chosen checker for the current filetype - useful for filetypes like
+"javascript that have more than one syntax checker
+function! s:LoadChecker(checker)
+    exec "runtime syntax_checkers/" . &ft . "/" . a:checker . ".vim"
+endfunction
+
+"return a string representing the state of buffer according to
+"g:syntastic_stl_format
+"
+"return '' if no errors are cached for the buffer
+function! SyntasticStatuslineFlag()
+    if s:BufHasErrorsOrWarningsToDisplay()
+        let errors = s:Errors()
+        let warnings = s:Warnings()
+
+        let output = g:syntastic_stl_format
+
+        "hide stuff wrapped in %E(...) unless there are errors
+        let output = substitute(output, '\C%E{\([^}]*\)}', len(errors) ? '\1' : '' , 'g')
+
+        "hide stuff wrapped in %W(...) unless there are warnings
+        let output = substitute(output, '\C%W{\([^}]*\)}', len(warnings) ? '\1' : '' , 'g')
+
+        "hide stuff wrapped in %B(...) unless there are both errors and warnings
+        let output = substitute(output, '\C%B{\([^}]*\)}', (len(warnings) && len(errors)) ? '\1' : '' , 'g')
+
+        "sub in the total errors/warnings/both
+        let output = substitute(output, '\C%w', len(warnings), 'g')
+        let output = substitute(output, '\C%e', len(errors), 'g')
+        let output = substitute(output, '\C%t', len(s:LocList()), 'g')
+
+        "first error/warning line num
+        let output = substitute(output, '\C%F', s:LocList()[0]['lnum'], 'g')
+
+        "first error line num
+        let output = substitute(output, '\C%fe', len(errors) ? errors[0]['lnum'] : '', 'g')
+
+        "first warning line num
+        let output = substitute(output, '\C%fw', len(warnings) ? warnings[0]['lnum'] : '', 'g')
+
+        return output
+    else
+        return ''
+    endif
+endfunction
+
+"A wrapper for the :lmake command. Sets up the make environment according to
+"the options given, runs make, resets the environment, returns the location
+"list
+"
+"a:options can contain the following keys:
+"    'makeprg'
+"    'errorformat'
+"
+"The corresponding options are set for the duration of the function call. They
+"are set with :let, so dont escape spaces.
+"
+"a:options may also contain:
+"   'defaults' - a dict containing default values for the returned errors
+"   'subtype' - all errors will be assigned the given subtype
+function! SyntasticMake(options)
+    let old_loclist = getloclist(0)
+    let old_makeprg = &makeprg
+    let old_shellpipe = &shellpipe
+    let old_shell = &shell
+    let old_errorformat = &errorformat
+
+    if !s:running_windows && (s:uname !~ "FreeBSD")
+        "this is a hack to stop the screen needing to be ':redraw'n when
+        "when :lmake is run. Otherwise the screen flickers annoyingly
+        let &shellpipe='&>'
+        let &shell = '/bin/bash'
+    endif
+
+    if has_key(a:options, 'makeprg')
+        let &makeprg = a:options['makeprg']
+    endif
+
+    if has_key(a:options, 'errorformat')
+        let &errorformat = a:options['errorformat']
+    endif
+
+    silent lmake!
+    let errors = getloclist(0)
+
+    call setloclist(0, old_loclist)
+    let &makeprg = old_makeprg
+    let &errorformat = old_errorformat
+    let &shellpipe=old_shellpipe
+    let &shell=old_shell
+
+    if !s:running_windows && s:uname =~ "FreeBSD"
+        redraw!
+    endif
+
+    if has_key(a:options, 'defaults')
+        call SyntasticAddToErrors(errors, a:options['defaults'])
+    endif
+
+    " Add subtype info if present.
+    if has_key(a:options, 'subtype')
+        call SyntasticAddToErrors(errors, {'subtype': a:options['subtype']})
+    endif
+
+    return errors
+endfunction
+
+"get the error balloon for the current mouse position
+function! SyntasticErrorBalloonExpr()
+    if !exists('b:syntastic_balloons')
+        return ''
+    endif
+    return get(b:syntastic_balloons, v:beval_lnum, '')
+endfunction
+
+"highlight the list of errors (a:errors) using matchadd()
+"
+"a:termfunc is provided to highlight errors that do not have a 'col' key (and
+"hence cant be done automatically). This function must take one arg (an error
+"item) and return a regex to match that item in the buffer.
+"
+"an optional boolean third argument can be provided to force a:termfunc to be
+"used regardless of whether a 'col' key is present for the error
+function! SyntasticHighlightErrors(errors, termfunc, ...)
+    if !g:syntastic_enable_highlighting
+        return
+    endif
+
+    call s:ClearErrorHighlights()
+
+    let force_callback = a:0 && a:1
+    for item in a:errors
+        let group = item['type'] == 'E' ? 'SyntasticError' : 'SyntasticWarning'
+        if item['col'] && !force_callback
+            let lastcol = col([item['lnum'], '$'])
+            let lcol = min([lastcol, item['col']])
+            call matchadd(group, '\%'.item['lnum'].'l\%'.lcol.'c')
+        else
+            let term = a:termfunc(item)
+            if len(term) > 0
+                call matchadd(group, '\%' . item['lnum'] . 'l' . term)
+            endif
+        endif
+    endfor
+endfunction
+
+"take a list of errors and add default values to them from a:options
+function! SyntasticAddToErrors(errors, options)
+    for i in range(0, len(a:errors)-1)
+        for key in keys(a:options)
+            if !has_key(a:errors[i], key) || empty(a:errors[i][key])
+                let a:errors[i][key] = a:options[key]
+            endif
+        endfor
+    endfor
+    return a:errors
+endfunction
+
+"take a list of syntax checkers for the current filetype and load the right
+"one based on the global settings and checker executable availabity
+"
+"a:checkers should be a list of syntax checker names. These names are assumed
+"to be the names of the vim syntax checker files that should be sourced, as
+"well as the names of the actual syntax checker executables. The checkers
+"should be listed in order of default preference.
+"
+"if a option called 'g:syntastic_[filetype]_checker' exists then attempt to
+"load the checker that it points to
+function! SyntasticLoadChecker(checkers)
+    let opt_name = "g:syntastic_" . &ft . "_checker"
+
+    if exists(opt_name)
+        let opt_val = {opt_name}
+        if index(a:checkers, opt_val) != -1 && executable(opt_val)
+            call s:LoadChecker(opt_val)
+        else
+            echoerr &ft . " syntax not supported or not installed."
+        endif
+    else
+        for checker in a:checkers
+            if executable(checker)
+                return s:LoadChecker(checker)
+            endif
+        endfor
+    endif
+endfunction
+
+" vim: set et sts=4 sw=4:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax/coffee.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,217 @@
+" Language:    CoffeeScript
+" Maintainer:  Mick Koch <kchmck@gmail.com>
+" URL:         http://github.com/kchmck/vim-coffee-script
+" License:     WTFPL
+
+" Bail if our syntax is already loaded.
+if exists('b:current_syntax') && b:current_syntax == 'coffee'
+  finish
+endif
+
+" Include JavaScript for coffeeEmbed.
+syn include @coffeeJS syntax/javascript.vim
+
+" Highlight long strings.
+syn sync minlines=100
+
+" CoffeeScript identifiers can have dollar signs.
+setlocal isident+=$
+
+" These are `matches` instead of `keywords` because vim's highlighting
+" priority for keywords is higher than matches. This causes keywords to be
+" highlighted inside matches, even if a match says it shouldn't contain them --
+" like with coffeeAssign and coffeeDot.
+syn match coffeeStatement /\<\%(return\|break\|continue\|throw\)\>/ display
+hi def link coffeeStatement Statement
+
+syn match coffeeRepeat /\<\%(for\|while\|until\|loop\)\>/ display
+hi def link coffeeRepeat Repeat
+
+syn match coffeeConditional /\<\%(if\|else\|unless\|switch\|when\|then\)\>/
+\                           display
+hi def link coffeeConditional Conditional
+
+syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display
+hi def link coffeeException Exception
+
+syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\)\>/
+\                       display
+" The `own` keyword is only a keyword after `for`.
+syn match coffeeKeyword /\<for\s\+own\>/ contained containedin=coffeeRepeat
+\                       display
+hi def link coffeeKeyword Keyword
+
+syn match coffeeOperator /\<\%(instanceof\|typeof\|delete\)\>/ display
+hi def link coffeeOperator Operator
+
+" The first case matches symbol operators only if they have an operand before.
+syn match coffeeExtendedOp /\%(\S\s*\)\@<=[+\-*/%&|\^=!<>?.]\+\|[-=]>\|--\|++\|:/
+\                          display
+syn match coffeeExtendedOp /\<\%(and\|or\)=/ display
+hi def link coffeeExtendedOp coffeeOperator
+
+" This is separate from `coffeeExtendedOp` to help differentiate commas from
+" dots.
+syn match coffeeSpecialOp /[,;]/ display
+hi def link coffeeSpecialOp SpecialChar
+
+syn match coffeeBoolean /\<\%(true\|on\|yes\|false\|off\|no\)\>/ display
+hi def link coffeeBoolean Boolean
+
+syn match coffeeGlobal /\<\%(null\|undefined\)\>/ display
+hi def link coffeeGlobal Type
+
+" A special variable
+syn match coffeeSpecialVar /\<\%(this\|prototype\|arguments\)\>/ display
+" An @-variable
+syn match coffeeSpecialVar /@\%(\I\i*\)\?/ display
+hi def link coffeeSpecialVar Special
+
+" A class-like name that starts with a capital letter
+syn match coffeeObject /\<\u\w*\>/ display
+hi def link coffeeObject Structure
+
+" A constant-like name in SCREAMING_CAPS
+syn match coffeeConstant /\<\u[A-Z0-9_]\+\>/ display
+hi def link coffeeConstant Constant
+
+" A variable name
+syn cluster coffeeIdentifier contains=coffeeSpecialVar,coffeeObject,
+\                                     coffeeConstant
+
+" A non-interpolated string
+syn cluster coffeeBasicString contains=@Spell,coffeeEscape
+" An interpolated string
+syn cluster coffeeInterpString contains=@coffeeBasicString,coffeeInterp
+
+" Regular strings
+syn region coffeeString start=/"/ skip=/\\\\\|\\"/ end=/"/
+\                       contains=@coffeeInterpString
+syn region coffeeString start=/'/ skip=/\\\\\|\\'/ end=/'/
+\                       contains=@coffeeBasicString
+hi def link coffeeString String
+
+" A integer, including a leading plus or minus
+syn match coffeeNumber /\i\@<![-+]\?\d\+\%([eE][+-]\?\d\+\)\?/ display
+" A hex number
+syn match coffeeNumber /\<0[xX]\x\+\>/ display
+syn match coffeeNumber /\<0b[01]\+\>/ display
+hi def link coffeeNumber Number
+
+" A floating-point number, including a leading plus or minus
+syn match coffeeFloat /\i\@<![-+]\?\d*\.\@<!\.\d\+\%([eE][+-]\?\d\+\)\?/
+\                     display
+hi def link coffeeFloat Float
+
+" An error for reserved keywords
+if !exists("coffee_no_reserved_words_error")
+  syn match coffeeReservedError /\<\%(case\|default\|function\|var\|void\|with\|const\|let\|enum\|export\|import\|native\|__hasProp\|__extends\|__slice\|__bind\|__indexOf\)\>/
+  \                             display
+  hi def link coffeeReservedError Error
+endif
+
+" A normal object assignment
+syn match coffeeObjAssign /@\?\I\i*\s*\ze::\@!/ contains=@coffeeIdentifier display
+hi def link coffeeObjAssign Identifier
+
+syn keyword coffeeTodo TODO FIXME XXX contained
+hi def link coffeeTodo Todo
+
+syn match coffeeComment /#.*/ contains=@Spell,coffeeTodo
+hi def link coffeeComment Comment
+
+syn region coffeeBlockComment start=/####\@!/ end=/###/
+\                             contains=@Spell,coffeeTodo
+hi def link coffeeBlockComment coffeeComment
+
+" A comment in a heregex
+syn region coffeeHeregexComment start=/#/ end=/\ze\/\/\/\|$/ contained
+\                               contains=@Spell,coffeeTodo
+hi def link coffeeHeregexComment coffeeComment
+
+" Embedded JavaScript
+syn region coffeeEmbed matchgroup=coffeeEmbedDelim
+\                      start=/`/ skip=/\\\\\|\\`/ end=/`/
+\                      contains=@coffeeJS
+hi def link coffeeEmbedDelim Delimiter
+
+syn region coffeeInterp matchgroup=coffeeInterpDelim start=/#{/ end=/}/ contained
+\                       contains=@coffeeAll
+hi def link coffeeInterpDelim PreProc
+
+" A string escape sequence
+syn match coffeeEscape /\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\./ contained display
+hi def link coffeeEscape SpecialChar
+
+" A regex -- must not follow a parenthesis, number, or identifier, and must not
+" be followed by a number
+syn region coffeeRegex start=/\%(\%()\|\i\@<!\d\)\s*\|\i\)\@<!\/=\@!\s\@!/
+\                      skip=/\[[^\]]\{-}\/[^\]]\{-}\]/
+\                      end=/\/[gimy]\{,4}\d\@!/
+\                      oneline contains=@coffeeBasicString
+hi def link coffeeRegex String
+
+" A heregex
+syn region coffeeHeregex start=/\/\/\// end=/\/\/\/[gimy]\{,4}/
+\                        contains=@coffeeInterpString,coffeeHeregexComment
+\                        fold
+hi def link coffeeHeregex coffeeRegex
+
+" Heredoc strings
+syn region coffeeHeredoc start=/"""/ end=/"""/ contains=@coffeeInterpString
+\                        fold
+syn region coffeeHeredoc start=/'''/ end=/'''/ contains=@coffeeBasicString
+\                        fold
+hi def link coffeeHeredoc String
+
+" An error for trailing whitespace, as long as the line isn't just whitespace
+if !exists("coffee_no_trailing_space_error")
+  syn match coffeeSpaceError /\S\@<=\s\+$/ display
+  hi def link coffeeSpaceError Error
+endif
+
+" An error for trailing semicolons, for help transitioning from JavaScript
+if !exists("coffee_no_trailing_semicolon_error")
+  syn match coffeeSemicolonError /;$/ display
+  hi def link coffeeSemicolonError Error
+endif
+
+" Ignore reserved words in dot accesses.
+syn match coffeeDotAccess /\.\@<!\.\s*\I\i*/he=s+1 contains=@coffeeIdentifier
+hi def link coffeeDotAccess coffeeExtendedOp
+
+" Ignore reserved words in prototype accesses.
+syn match coffeeProtoAccess /::\s*\I\i*/he=s+2 contains=@coffeeIdentifier
+hi def link coffeeProtoAccess coffeeExtendedOp
+
+" This is required for interpolations to work.
+syn region coffeeCurlies matchgroup=coffeeCurly start=/{/ end=/}/
+\                        contains=@coffeeAll
+syn region coffeeBrackets matchgroup=coffeeBracket start=/\[/ end=/\]/
+\                         contains=@coffeeAll
+syn region coffeeParens matchgroup=coffeeParen start=/(/ end=/)/
+\                       contains=@coffeeAll
+
+" These are highlighted the same as commas since they tend to go together.
+hi def link coffeeBlock coffeeSpecialOp
+hi def link coffeeBracket coffeeBlock
+hi def link coffeeCurly coffeeBlock
+hi def link coffeeParen coffeeBlock
+
+" This is used instead of TOP to keep things coffee-specific for good
+" embedding. `contained` groups aren't included.
+syn cluster coffeeAll contains=coffeeStatement,coffeeRepeat,coffeeConditional,
+\                              coffeeException,coffeeKeyword,coffeeOperator,
+\                              coffeeExtendedOp,coffeeSpecialOp,coffeeBoolean,
+\                              coffeeGlobal,coffeeSpecialVar,coffeeObject,
+\                              coffeeConstant,coffeeString,coffeeNumber,
+\                              coffeeFloat,coffeeReservedError,coffeeObjAssign,
+\                              coffeeComment,coffeeBlockComment,coffeeEmbed,
+\                              coffeeRegex,coffeeHeregex,coffeeHeredoc,
+\                              coffeeSpaceError,coffeeSemicolonError,
+\                              coffeeDotAccess,coffeeProtoAccess,
+\                              coffeeCurlies,coffeeBrackets,coffeeParens
+
+if !exists('b:current_syntax')
+  let b:current_syntax = 'coffee'
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax/eco.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,62 @@
+" Vim syntax file
+" Language:		eco
+" Maintainer:		Jay Adkisson
+" Mostly stolen from eruby.vim
+
+if !exists("g:eco_default_subtype")
+  let g:eco_default_subtype = "html"
+endif
+
+if !exists("b:eco_subtype")
+  let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
+  let b:eco_subtype = matchstr(s:lines,'eco_subtype=\zs\w\+')
+  if b:eco_subtype == ''
+    let b:eco_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.eco\)\+$','',''),'\.\zs\w\+$')
+  endif
+  if b:eco_subtype == 'rhtml'
+    let b:eco_subtype = 'html'
+  elseif b:eco_subtype == 'jst'
+    let b:eco_subtype = 'html'
+  elseif b:eco_subtype == 'rb'
+    let b:eco_subtype = 'ruby'
+  elseif b:eco_subtype == 'yml'
+    let b:eco_subtype = 'yaml'
+  elseif b:eco_subtype == 'js' || b:eco_subtype == 'json'
+    let b:eco_subtype = 'javascript'
+  elseif b:eco_subtype == 'txt'
+    " Conventional; not a real file type
+    let b:eco_subtype = 'text'
+  elseif b:eco_subtype == ''
+    if exists('b:current_syntax') && b:current_syntax != ''
+      let b:eco_subtype = b:current_syntax
+    else
+      let b:eco_subtype = g:eco_default_subtype
+    endif
+  endif
+endif
+
+if exists("b:eco_subtype") && b:eco_subtype != '' && b:eco_subtype != 'eco'
+  exec "runtime! syntax/".b:eco_subtype.".vim"
+  syn include @coffeeTop syntax/coffee.vim
+endif
+
+syn cluster ecoRegions contains=ecoBlock,ecoExpression,ecoComment
+
+syn region ecoBlock      matchgroup=ecoDelimiter start=/<%/      end=/%>/ contains=@coffeeTop containedin=ALLBUT,@ecoRegions keepend
+syn region ecoExpression matchgroup=ecoDelimiter start=/<%[=\-]/ end=/%>/ contains=@coffeeTop containedin=ALLBUT,@ecoRegions keepend
+syn region ecoComment    matchgroup=ecoComment   start=/<%#/     end=/%>/ contains=@coffeeTodo,@Spell containedin=ALLBUT,@ecoRegions keepend
+
+" eco features not in coffeescript proper
+syn keyword ecoEnd end containedin=@ecoRegions
+syn match ecoIndentColon /\s+\w+:/ containedin=@ecoRegions
+
+" Define the default highlighting.
+
+hi def link ecoDelimiter    Delimiter
+hi def link ecoComment      Comment
+hi def link ecoEnd          coffeeConditional
+hi def link ecoIndentColon  None
+
+let b:current_syntax = 'eco'
+
+" vim: nowrap sw=2 sts=2 ts=8:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/applescript.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,43 @@
+"==============================================================================
+"       FileName: applescript.vim
+"           Desc: Syntax checking plugin for syntastic.vim
+"         Author: Zhao Cai
+"          Email: caizhaoff@gmail.com
+"        Version: 0.2.1
+"   Date Created: Thu 09 Sep 2011 10:30:09 AM EST 
+"  Last Modified: Fri 09 Dec 2011 01:10:24 PM EST 
+"
+"        History: 0.1.0 - working, but it will run the script everytime to check
+"                 syntax. Should use osacompile but strangely it does not give
+"                 errors.
+"
+"                 0.2.0 - switch to osacompile, it gives less errors compared
+"                 with osascript.
+"
+"                 0.2.1 - remove g:syntastic_applescript_tempfile. use
+"                 tempname() instead.
+"
+"        License: This program is free software. It comes without any
+"        warranty, to the extent permitted by applicable law. You can
+"        redistribute it and/or modify it under the terms of the Do What The
+"        Fuck You Want To Public License, Version 2, as published by Sam
+"        Hocevar.  See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists("loaded_applescript_syntax_checker")
+    finish
+endif
+let loaded_applescript_syntax_checker = 1
+
+"bail if the user doesnt have osacompile installed
+if !executable("osacompile")
+    finish
+endif
+
+function! SyntaxCheckers_applescript_GetLocList()
+    let makeprg = 'osacompile -o ' . tempname() . '.scpt '. shellescape(expand('%'))
+    let errorformat = '%f:%l:%m'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/c.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,156 @@
+"============================================================================
+"File:        c.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Gregor Uhlenheuer <kongo2002 at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+" In order to also check header files add this to your .vimrc:
+" (this usually creates a .gch file in your source directory)
+"
+"   let g:syntastic_c_check_header = 1
+"
+" To disable the search of included header files after special
+" libraries like gtk and glib add this line to your .vimrc:
+"
+"   let g:syntastic_c_no_include_search = 1
+"
+" To enable header files being re-checked on every file write add the
+" following line to your .vimrc. Otherwise the header files are checked only
+" one time on initially loading the file.
+" In order to force syntastic to refresh the header includes simply
+" unlet b:syntastic_c_includes. Then the header files are being re-checked on
+" the next file write.
+"
+"   let g:syntastic_c_auto_refresh_includes = 1
+"
+" Alternatively you can set the buffer local variable b:syntastic_c_cflags.
+" If this variable is set for the current buffer no search for additional
+" libraries is done. I.e. set the variable like this:
+"
+"   let b:syntastic_c_cflags = ' -I/usr/include/libsoup-2.4'
+"
+" In order to add some custom include directories that should be added to the
+" gcc command line you can add those to the global variable
+" g:syntastic_c_include_dirs. This list can be used like this:
+"
+"   let g:syntastic_c_include_dirs = [ 'includes', 'headers' ]
+"
+" Moreover it is possible to add additional compiler options to the syntax
+" checking execution via the variable 'g:syntastic_c_compiler_options':
+"
+"   let g:syntastic_c_compiler_options = ' -ansi'
+"
+" Using the global variable 'g:syntastic_c_remove_include_errors' you can
+" specify whether errors of files included via the g:syntastic_c_include_dirs'
+" setting are removed from the result set:
+"
+"   let g:syntastic_c_remove_include_errors = 1
+
+if exists('loaded_c_syntax_checker')
+    finish
+endif
+let loaded_c_syntax_checker = 1
+
+if !executable('gcc')
+    finish
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+" default include directories
+let s:default_includes = [ '.', '..', 'include', 'includes',
+            \ '../include', '../includes' ]
+
+" uniquify the input list
+function! s:Unique(list)
+    let l = []
+    for elem in a:list
+        if index(l, elem) == -1
+            let l = add(l, elem)
+        endif
+    endfor
+    return l
+endfunction
+
+" get the gcc include directory argument depending on the default
+" includes and the optional user-defined 'g:syntastic_c_include_dirs'
+function! s:GetIncludeDirs()
+    let include_dirs = s:default_includes
+
+    if exists('g:syntastic_c_include_dirs')
+        call extend(include_dirs, g:syntastic_c_include_dirs)
+    endif
+
+    return join(map(s:Unique(include_dirs), '"-I" . v:val'), ' ')
+endfunction
+
+function! SyntaxCheckers_c_GetLocList()
+    let makeprg = 'gcc -fsyntax-only -std=gnu99 '.shellescape(expand('%')).
+               \ ' '.s:GetIncludeDirs()
+    let errorformat = '%-G%f:%s:,%-G%f:%l: %#error: %#(Each undeclared '.
+               \ 'identifier is reported only%.%#,%-G%f:%l: %#error: %#for '.
+               \ 'each function it appears%.%#,%-GIn file included%.%#,'.
+               \ '%-G %#from %f:%l\,,%f:%l:%c: %m,%f:%l: %trror: %m,%f:%l: %m'
+
+    " determine whether to parse header files as well
+    if expand('%') =~? '.h$'
+        if exists('g:syntastic_c_check_header')
+            let makeprg = 'gcc -c '.shellescape(expand('%')).
+                        \ ' '.s:GetIncludeDirs()
+        else
+            return []
+        endif
+    endif
+
+    " add optional user-defined compiler options
+    if exists('g:syntastic_c_compiler_options')
+        let makeprg .= g:syntastic_c_compiler_options
+    endif
+
+    " check if the user manually set some cflags
+    if !exists('b:syntastic_c_cflags')
+        " check whether to search for include files at all
+        if !exists('g:syntastic_c_no_include_search') ||
+                    \ g:syntastic_c_no_include_search != 1
+            " refresh the include file search if desired
+            if exists('g:syntastic_c_auto_refresh_includes') &&
+                        \ g:syntastic_c_auto_refresh_includes != 0
+                let makeprg .= syntastic#c#SearchHeaders()
+            else
+                " search for header includes if not cached already
+                if !exists('b:syntastic_c_includes')
+                    let b:syntastic_c_includes = syntastic#c#SearchHeaders()
+                endif
+                let makeprg .= b:syntastic_c_includes
+            endif
+        endif
+    else
+        " use the user-defined cflags
+        let makeprg .= b:syntastic_c_cflags
+    endif
+
+    " process makeprg
+    let errors = SyntasticMake({ 'makeprg': makeprg,
+                \ 'errorformat': errorformat })
+
+    " filter the processed errors if desired
+    if exists('g:syntastic_c_remove_include_errors') &&
+                \ g:syntastic_c_remove_include_errors != 0
+        return filter(errors,
+                    \ 'has_key(v:val, "bufnr") && v:val["bufnr"]=='.bufnr(''))
+    else
+        return errors
+    endif
+endfunction
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/coffee.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,27 @@
+"============================================================================
+"File:        coffee.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Lincoln Stoll <l@lds.li>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_coffee_syntax_checker")
+    finish
+endif
+let loaded_coffee_syntax_checker = 1
+
+"bail if the user doesnt have coffee installed
+if !executable("coffee")
+    finish
+endif
+
+function! SyntaxCheckers_coffee_GetLocList()
+    let makeprg = 'coffee -c -l -o /tmp '.shellescape(expand('%'))
+    let errorformat =  'Syntax%trror: In %f\, %m on line %l,%EError: In %f\, Parse error on line %l: %m,%EError: In %f\, %m on line %l,%W%f(%l): lint warning: %m,%-Z%p^,%W%f(%l): warning: %m,%-Z%p^,%E%f(%l): SyntaxError: %m,%-Z%p^,%-G%.%#'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/cpp.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,94 @@
+"============================================================================
+"File:        cpp.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Gregor Uhlenheuer <kongo2002 at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+" in order to also check header files add this to your .vimrc:
+" (this usually creates a .gch file in your source directory)
+"
+"   let g:syntastic_cpp_check_header = 1
+"
+" To disable the search of included header files after special
+" libraries like gtk and glib add this line to your .vimrc:
+"
+"   let g:syntastic_cpp_no_include_search = 1
+"
+" To enable header files being re-checked on every file write add the
+" following line to your .vimrc. Otherwise the header files are checked only
+" one time on initially loading the file.
+" In order to force syntastic to refresh the header includes simply
+" unlet b:syntastic_cpp_includes. Then the header files are being re-checked
+" on the next file write.
+"
+"   let g:syntastic_cpp_auto_refresh_includes = 1
+"
+" Alternatively you can set the buffer local variable b:syntastic_cpp_cflags.
+" If this variable is set for the current buffer no search for additional
+" libraries is done. I.e. set the variable like this:
+"
+"   let b:syntastic_cpp_cflags = ' -I/usr/include/libsoup-2.4'
+"
+" Moreover it is possible to add additional compiler options to the syntax
+" checking execution via the variable 'g:syntastic_cpp_compiler_options':
+"
+"   let g:syntastic_cpp_compiler_options = ' -std=c++0x'
+
+if exists('loaded_cpp_syntax_checker')
+    finish
+endif
+let loaded_cpp_syntax_checker = 1
+
+if !executable('g++')
+    finish
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+function! SyntaxCheckers_cpp_GetLocList()
+    let makeprg = 'g++ -fsyntax-only '.shellescape(expand('%'))
+    let errorformat =  '%-G%f:%s:,%f:%l:%c: %m,%f:%l: %m'
+
+    if expand('%') =~? '\%(.h\|.hpp\|.hh\)$'
+        if exists('g:syntastic_cpp_check_header')
+            let makeprg = 'g++ -c '.shellescape(expand('%'))
+        else
+            return []
+        endif
+    endif
+
+    if exists('g:syntastic_cpp_compiler_options')
+        let makeprg .= g:syntastic_cpp_compiler_options
+    endif
+
+    if !exists('b:syntastic_cpp_cflags')
+        if !exists('g:syntastic_cpp_no_include_search') ||
+                    \ g:syntastic_cpp_no_include_search != 1
+            if exists('g:syntastic_cpp_auto_refresh_includes') &&
+                        \ g:syntastic_cpp_auto_refresh_includes != 0
+                let makeprg .= syntastic#c#SearchHeaders()
+            else
+                if !exists('b:syntastic_cpp_includes')
+                    let b:syntastic_cpp_includes = syntastic#c#SearchHeaders()
+                endif
+                let makeprg .= b:syntastic_cpp_includes
+            endif
+        endif
+    else
+        let makeprg .= b:syntastic_cpp_cflags
+    endif
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
+
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim: set et sts=4 sw=4:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/css.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,31 @@
+"============================================================================
+"File:        css.vim
+"Description: Syntax checking plugin for syntastic.vim using `csslint` CLI tool (http://csslint.net).
+"Maintainer:  Ory Band <oryband at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"============================================================================
+if exists("loaded_css_syntax_checker")
+    finish
+endif
+let loaded_css_syntax_checker = 1
+
+" Bail if the user doesn't have `csslint` installed.
+if !executable("csslint")
+    finish
+endif
+
+function! SyntaxCheckers_css_GetLocList()
+    let makeprg = 'csslint --format=compact '.shellescape(expand('%'))
+
+    " Print CSS Lint's error/warning messages from compact format. Ignores blank lines.
+    let errorformat = '%-G,%-G%f: lint free!,%f: line %l\, col %c\, %trror - %m,%f: line %l\, col %c\, %tarning - %m,%f: line %l\, col %c\, %m,'
+
+    return SyntasticMake({ 'makeprg': makeprg,
+                                \ 'errorformat': errorformat,
+                                \ 'defaults': {'bufnr': bufnr("")} })
+
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/cucumber.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,27 @@
+"============================================================================
+"File:        cucumber.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_cucumber_syntax_checker")
+    finish
+endif
+let loaded_cucumber_syntax_checker = 1
+
+"bail if the user doesnt have cucumber installed
+if !executable("cucumber")
+    finish
+endif
+
+function! SyntaxCheckers_cucumber_GetLocList()
+    let makeprg = 'cucumber --dry-run --quiet --strict --format pretty '.shellescape(expand('%'))
+    let errorformat =  '%f:%l:%c:%m,%W      %.%# (%m),%-Z%f:%l:%.%#,%-G%.%#'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/cuda.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,37 @@
+"============================================================================
+"File:        cuda.vim
+"Description: Syntax checking plugin for syntastic.vim
+"
+"Author:      Hannes Schulz <schulz at ais dot uni-bonn dot de>
+"
+"============================================================================
+
+" in order to also check header files add this to your .vimrc:
+" (this creates an empty .syntastic_dummy.cu file in your source directory)
+"
+"   let g:syntastic_cuda_check_header = 1
+
+if exists('loaded_cuda_syntax_checker')
+    finish
+endif
+let loaded_cuda_syntax_checker = 1
+
+if !executable('nvcc')
+    finish
+endif
+
+function! SyntaxCheckers_cuda_GetLocList()
+    let makeprg = 'nvcc --cuda -O0 -I . -Xcompiler -fsyntax-only '.shellescape(expand('%')).' -o /dev/null'
+    "let errorformat =  '%-G%f:%s:,%f:%l:%c: %m,%f:%l: %m'
+    let errorformat =  '%*[^"]"%f"%*\D%l: %m,"%f"%*\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,"%f"\, line %l%*\D%c%*[^ ] %m,%D%*\a[%*\d]: Entering directory `%f'',%X%*\a[%*\d]: Leaving directory `%f'',%D%*\a: Entering directory `%f'',%X%*\a: Leaving directory `%f'',%DMaking %*\a in %f,%f|%l| %m'
+
+    if expand('%') =~? '\%(.h\|.hpp\|.cuh\)$'
+        if exists('g:syntastic_cuda_check_header')
+            let makeprg = 'echo > .syntastic_dummy.cu ; nvcc --cuda -O0 -I . .syntastic_dummy.cu -Xcompiler -fsyntax-only -include '.shellescape(expand('%')).' -o /dev/null'
+        else
+            return []
+        endif
+    endif
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/docbk.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,29 @@
+"============================================================================
+"File:        docbk.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_docbk_syntax_checker")
+    finish
+endif
+let loaded_docbk_syntax_checker = 1
+
+"bail if the user doesnt have tidy or grep installed
+if !executable("xmllint")
+    finish
+endif
+
+function! SyntaxCheckers_docbk_GetLocList()
+
+    let makeprg="xmllint --xinclude --noout --postvalid ".shellescape(expand(%:p))
+    let errorformat='%E%f:%l: parser error : %m,%W%f:%l: parser warning : %m,%E%f:%l:%.%# validity error : %m,%W%f:%l:%.%# validity warning : %m,%-Z%p^,%-C%.%#,%-G%.%#'
+    let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+
+    return loclist
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/efm_perl.pl	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,153 @@
+#!/usr/bin/perl -w
+
+# vimparse.pl - Reformats the error messages of the Perl interpreter for use
+# with the quickfix mode of Vim
+#
+# Copyright (©) 2001 by Jörg Ziefle <joerg.ziefle@gmx.de>
+# You may use and distribute this software under the same terms as Perl itself.
+#
+# Usage: put one of the two configurations below in your ~/.vimrc (without the
+# description and '# ') and enjoy (be sure to adjust the paths to vimparse.pl
+# before):
+#
+# Program is run interactively with 'perl -w':
+#
+# set makeprg=$HOME/bin/vimparse.pl\ %\ $*
+# set errorformat=%f:%l:%m
+#
+# Program is only compiled with 'perl -wc':
+#
+# set makeprg=$HOME/bin/vimparse.pl\ -c\ %\ $*
+# set errorformat=%f:%l:%m
+#
+# Usage:
+#	vimparse.pl [-c] [-f <errorfile>] <programfile> [programargs]
+#
+#		-c	compile only, don't run (perl -wc)
+#		-f	write errors to <errorfile>
+#
+# Example usages:
+#	* From the command line:
+#		vimparse.pl program.pl
+#
+#		vimparse.pl -c -f errorfile program.pl
+#		Then run vim -q errorfile to edit the errors with Vim.
+#
+#	* From Vim:
+#		Edit in Vim (and save, if you don't have autowrite on), then
+#		type ':mak' or ':mak args' (args being the program arguments)
+#		to error check.
+#
+# Version history:
+#	0.2 (04/12/2001):
+#		* First public version (sent to Bram)
+#		* -c command line option for compiling only
+#		* grammatical fix: 'There was 1 error.'
+#		* bug fix for multiple arguments
+#		* more error checks
+#		* documentation (top of file, &usage)
+#		* minor code clean ups
+#	0.1 (02/02/2001):
+#		* Initial version
+#		* Basic functionality
+#
+# Todo:
+#	* test on more systems
+#	* use portable way to determine the location of perl ('use Config')
+#	* include option that shows perldiag messages for each error
+#	* allow to pass in program by STDIN
+#	* more intuitive behaviour if no error is found (show message)
+#
+# Tested under SunOS 5.7 with Perl 5.6.0.  Let me know if it's not working for
+# you.
+
+use strict;
+use Getopt::Std;
+
+use vars qw/$opt_c $opt_f $opt_h/; # needed for Getopt in combination with use strict 'vars'
+
+use constant VERSION => 0.2;
+
+getopts('cf:h');
+
+&usage if $opt_h; # not necessarily needed, but good for further extension
+
+if (defined $opt_f) {
+
+    open FILE, "> $opt_f" or do {
+	warn "Couldn't open $opt_f: $!.  Using STDOUT instead.\n";
+	undef $opt_f;
+    };
+
+};
+
+my $handle = (defined $opt_f ? \*FILE : \*STDOUT);
+
+(my $file = shift) or &usage; # display usage if no filename is supplied
+my $args = (@ARGV ? ' ' . join ' ', @ARGV : '');
+
+my @lines = `perl @{[defined $opt_c ? '-c ' : '' ]} -w "$file$args" 2>&1`;
+
+my $errors = 0;
+foreach my $line (@lines) {
+
+    chomp($line);
+    my ($file, $lineno, $message, $rest);
+
+    if ($line =~ /^(.*)\sat\s(.*)\sline\s(\d+)(\.|,\snear\s\".*\")$/) {
+
+	($message, $file, $lineno, $rest) = ($1, $2, $3, $4);
+	$errors++;
+	$message .= $rest if ($rest =~ s/^,//);
+	print $handle "$file:$lineno:$message\n";
+
+    } else { next };
+
+}
+
+if (defined $opt_f) {
+
+    my $msg;
+    if ($errors == 1) {
+
+	$msg = "There was 1 error.\n";
+
+    } else {
+
+	$msg = "There were $errors errors.\n";
+
+    };
+
+    print STDOUT $msg;
+    close FILE;
+    unlink $opt_f unless $errors;
+
+};
+
+sub usage {
+
+    (local $0 = $0) =~ s/^.*\/([^\/]+)$/$1/; # remove path from name of program
+    print<<EOT;
+Usage:
+	$0 [-c] [-f <errorfile>] <programfile> [programargs]
+
+		-c	compile only, don't run (executes 'perl -wc')
+		-f	write errors to <errorfile>
+
+Examples:
+	* At the command line:
+		$0 program.pl
+		Displays output on STDOUT.
+
+		$0 -c -f errorfile program.pl
+		Then run 'vim -q errorfile' to edit the errors with Vim.
+
+	* In Vim:
+		Edit in Vim (and save, if you don't have autowrite on), then
+		type ':mak' or ':mak args' (args being the program arguments)
+		to error check.
+EOT
+
+    exit 0;
+
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/erlang.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,42 @@
+"============================================================================
+"File:        erlang.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Pawel Salata <rockplayer.pl at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_erlang_syntax_checker")
+    finish
+endif
+let loaded_erlang_syntax_checker = 1
+
+"bail if the user doesnt have escript installed
+if !executable("escript")
+    finish
+endif
+
+let s:check_file = expand('<sfile>:p:h') . '/erlang_check_file.erl'
+
+function! SyntaxCheckers_erlang_GetLocList()
+    let extension = expand('%:e')
+    if match(extension, 'hrl') >= 0
+        return []
+    endif
+    let shebang = getbufline(bufnr('%'), 1)[0]
+    if len(shebang) > 0
+        if match(shebang, 'escript') >= 0
+            let makeprg = 'escript -s '.shellescape(expand('%:p'))
+        else
+            let makeprg = s:check_file . ' '. shellescape(expand('%:p'))
+        endif
+    else
+        let makeprg =  s:check_file . ' ' . shellescape(expand('%:p'))
+    endif
+    let errorformat = '%f:%l:\ %tarning:\ %m,%E%f:%l:\ %m'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/erlang_check_file.erl	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,12 @@
+#!/usr/bin/env escript
+-export([main/1]).
+
+main([FileName]) ->
+    compile:file(FileName, [warn_obsolete_guard,
+                            warn_unused_import,
+                            warn_shadow_vars,
+                            warn_export_vars,
+                            strong_validation,
+                            report,
+                            {i, filename:dirname(FileName) ++ "/../include"}
+                        ]).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/eruby.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,34 @@
+"============================================================================
+"File:        eruby.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_eruby_syntax_checker")
+    finish
+endif
+let loaded_eruby_syntax_checker = 1
+
+"bail if the user doesnt have ruby or cat installed
+if !executable("ruby") || !executable("cat")
+    finish
+endif
+
+function! SyntaxCheckers_eruby_GetLocList()
+    if has('win32') || has('win64')
+        let makeprg='sed "s/<\%=/<\%/g" '. shellescape(expand("%")) . ' \| ruby -e "require \"erb\"; puts ERB.new(ARGF.read, nil, \"-\").src" \| ruby -c'
+    else
+        let makeprg='sed "s/<\%=/<\%/g" '. shellescape(expand("%")) . ' \| RUBYOPT= ruby -e "require \"erb\"; puts ERB.new(ARGF.read, nil, \"-\").src" \| RUBYOPT= ruby -c'
+    endif
+
+    let errorformat='%-GSyntax OK,%E-:%l: syntax error\, %m,%Z%p^,%W-:%l: warning: %m,%Z%p^,%-C%.%#'
+    return SyntasticMake({ 'makeprg': makeprg,
+                         \ 'errorformat': errorformat,
+                         \ 'defaults': {'bufnr': bufnr("")} })
+
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/fortran.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,44 @@
+"============================================================================
+"File:        fortran.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Karl Yngve Lervåg <karl.yngve@lervag.net>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"Note:        This syntax checker uses gfortran with the option -fsyntax-only
+"             to check for errors and warnings. Additional flags may be
+"             supplied through both local and global variables,
+"               b:syntastic_fortran_flags,
+"               g:syntastic_fortran_flags.
+"             This is particularly useful when the source requires module files
+"             in order to compile (that is when it needs modules defined in
+"             separate files).
+"
+"============================================================================
+
+if exists("loaded_fortran_syntax_checker")
+    finish
+endif
+let loaded_fortran_syntax_checker = 1
+
+"bail if the user doesnt have fortran installed
+if !executable("gfortran")
+    finish
+endif
+
+if !exists('g:syntastic_fortran_flags')
+    let g:syntastic_fortran_flags = ''
+endif
+
+function! SyntaxCheckers_fortran_GetLocList()
+    let makeprg  = 'gfortran -fsyntax-only'
+    let makeprg .= g:syntastic_fortran_flags
+    if exists('b:syntastic_fortran_flags')
+        let makeprg .= b:syntastic_fortran_flags
+    endif
+    let makeprg .= ' ' . shellescape(expand('%'))
+    let errorformat = '%-C %#,%-C  %#%.%#,%A%f:%l.%c:,%Z%m,%G%.%#'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/gentoo_metadata.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,37 @@
+"============================================================================
+"File:        gentoo-metadata.vim
+"Description: Syntax checking plugin for Gentoo's metadata.xml files
+"Maintainer:  James Rowe <jnrowe at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+" The DTDs required to validate metadata.xml files are available in
+" $PORTDIR/metadata/dtd, and these local files can be used to significantly
+" speed up validation.  You can create a catalog file with:
+"
+"   xmlcatalog --create --add rewriteURI http://www.gentoo.org/dtd/ \
+"       ${PORTDIR:-/usr/portage}/metadata/dtd/ /etc/xml/gentoo
+"
+" See xmlcatalog(1) and http://www.xmlsoft.org/catalog.html for more
+" information.
+
+if exists("loaded_gentoo_metadata_syntax_checker")
+    finish
+endif
+let loaded_gentoo_metadata_syntax_checker = 1
+
+"bail if the user doesn't have xmllint installed
+if !executable("xmllint")
+    finish
+endif
+
+runtime syntax_checkers/xml.vim
+
+function! SyntaxCheckers_gentoo_metadata_GetLocList()
+    return SyntaxCheckers_xml_GetLocList()
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/go.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,22 @@
+"============================================================================
+"File:        go.vim
+"Description: Loads a go syntax checker from the go directory
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+" Use g:syntastic_go_checker option to specify which go executable
+" should be used (see below for a list of supported checkers).
+" If g:syntastic_go_checker is not set, just use the first syntax
+" checker that we find installed.
+"============================================================================
+if exists("loaded_go_syntax_checker")
+    finish
+endif
+let loaded_go_syntax_checker = 1
+
+let s:supported_checkers = ["6g", "gofmt"]
+call SyntasticLoadChecker(s:supported_checkers)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/go/6g.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,17 @@
+"============================================================================
+"File:        6g.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Sam Nguyen <samxnguyen@gmail.com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+function! SyntaxCheckers_go_GetLocList()
+    let makeprg = '6g -o /dev/null %'
+    let errorformat = '%E%f:%l: %m'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/go/gofmt.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,16 @@
+"============================================================================
+"File:        gofmt.vim
+"Description: Check go syntax using gofmt
+"Maintainer:  Brandon Thomson <bt@brandonthomson.com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+function! SyntaxCheckers_go_GetLocList()
+    let makeprg = 'gofmt %'
+    let errorformat = '%f:%l:%c: %m,%-G%.%#'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'type': 'e'} })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/haml.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,26 @@
+"============================================================================
+"File:        haml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_haml_syntax_checker")
+    finish
+endif
+let loaded_haml_syntax_checker = 1
+
+"bail if the user doesnt have the haml binary installed
+if !executable("haml")
+    finish
+endif
+
+function! SyntaxCheckers_haml_GetLocList()
+    let makeprg = "haml -c " . shellescape(expand("%"))
+    let errorformat = 'Haml error on line %l: %m,Syntax error on line %l: %m,%-G%.%#'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/haskell.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,37 @@
+"============================================================================
+"File:        haskell.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Anthony Carapetis <anthony.carapetis at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_haskell_syntax_checker")
+    finish
+endif
+let loaded_haskell_syntax_checker = 1
+
+"bail if the user doesnt have ghc-mod installed
+if !executable("ghc-mod")
+    finish
+endif
+
+function! SyntaxCheckers_haskell_GetLocList()
+    let makeprg =
+          \ "{ ".
+          \ "ghc-mod check ". shellescape(expand('%')) . "; " .
+          \ "ghc-mod lint " . shellescape(expand('%')) . ";" .
+          \ " }"
+    let errorformat = '%-G\\s%#,%f:%l:%c:%trror: %m,%f:%l:%c:%tarning: %m,'.
+                \ '%f:%l:%c: %trror: %m,%f:%l:%c: %tarning: %m,%f:%l:%c:%m,'.
+                \ '%E%f:%l:%c:,%Z%m,'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
+
+function! SyntaxCheckers_lhaskell_GetLocList()
+    return SyntaxCheckers_haskell_GetLocList()
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/haxe.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,55 @@
+"============================================================================
+"File:        haxe.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  David Bernard <david.bernard.31 at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_haxe_syntax_checker")
+    finish
+endif
+let loaded_haxe_syntax_checker = 1
+
+"bail if the user doesn't have haxe installed
+if !executable("haxe")
+    finish
+endif
+
+" s:FindInParent
+" find the file argument and returns the path to it.
+" Starting with the current working dir, it walks up the parent folders
+" until it finds the file, or it hits the stop dir.
+" If it doesn't find it, it returns "Nothing"
+function! s:FindInParent(fln,flsrt,flstp)
+    let here = a:flsrt
+    while ( strlen( here) > 0 )
+        let p = split(globpath(here, a:fln), '\n')
+        if len(p) > 0
+            return ['ok', here, fnamemodify(p[0], ':p:t')]
+        endif
+        let fr = match(here, '/[^/]*$')
+        if fr == -1
+            break
+        endif
+        let here = strpart(here, 0, fr)
+        if here == a:flstp
+            break
+        endif
+    endwhile
+    return ['fail', '', '']
+endfunction
+
+function! SyntaxCheckers_haxe_GetLocList()
+    let [success, hxmldir, hxmlname] = s:FindInParent('*.hxml', expand('%:p:h'), '/')
+    if success == 'ok'
+        let makeprg = 'cd ' . hxmldir . '; haxe ' . hxmlname
+        let errorformat = '%E%f:%l: characters %c-%*[0-9] : %m'
+        return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+    else
+        return SyntasticMake({})
+    endif
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/html.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,86 @@
+"============================================================================
+"File:        html.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_html_syntax_checker")
+    finish
+endif
+let loaded_html_syntax_checker = 1
+
+"bail if the user doesnt have tidy or grep installed
+if !executable("tidy") || !executable("grep")
+    finish
+endif
+
+" TODO: join this with xhtml.vim for DRY's sake?
+function! s:TidyEncOptByFenc()
+    let tidy_opts = {
+                \'utf-8'       : '-utf8',
+                \'ascii'       : '-ascii',
+                \'latin1'      : '-latin1',
+                \'iso-2022-jp' : '-iso-2022',
+                \'cp1252'      : '-win1252',
+                \'macroman'    : '-mac',
+                \'utf-16le'    : '-utf16le',
+                \'utf-16'      : '-utf16',
+                \'big5'        : '-big5',
+                \'sjis'        : '-shiftjis',
+                \'cp850'       : '-ibm858',
+                \}
+    return get(tidy_opts, &fileencoding, '-utf8')
+endfunction
+
+let s:ignore_html_errors = [
+                \ "<table> lacks \"summary\" attribute",
+                \ "not approved by W3C",
+                \ "attribute \"placeholder\"",
+                \ "<meta> proprietary attribute \"charset\"",
+                \ "<meta> lacks \"content\" attribute",
+                \ "inserting \"type\" attribute",
+                \ "proprietary attribute \"data-"
+                \]
+
+function! s:ValidateError(text)
+    let valid = 0
+    for i in s:ignore_html_errors
+        if stridx(a:text, i) != -1
+            let valid = 1
+            break
+        endif
+    endfor
+    return valid
+endfunction
+
+
+function! SyntaxCheckers_html_GetLocList()
+
+    let encopt = s:TidyEncOptByFenc()
+    let makeprg="tidy ".encopt." --new-blocklevel-tags ".shellescape('section, article, aside, hgroup, header, footer, nav, figure, figcaption')." --new-inline-tags ".shellescape('video, audio, embed, mark, progress, meter, time, ruby, rt, rp, canvas, command, details, datalist')." --new-empty-tags ".shellescape('wbr, keygen')." -e ".shellescape(expand('%'))." 2>&1"
+    let errorformat='%Wline %l column %c - Warning: %m,%Eline %l column %c - Error: %m,%-G%.%#,%-G%.%#'
+    let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+
+    " process loclist since we need to add some info and filter out valid HTML5
+    " from the errors
+    let n = len(loclist) - 1
+    let bufnum = bufnr("")
+    while n >= 0
+        let i = loclist[n]
+        " filter out valid HTML5
+        if s:ValidateError(i['text']) == 1
+            unlet loclist[n]
+        else
+            "the file name isnt in the output so stick in the buf num manually
+            let i['bufnr'] = bufnum
+        endif
+        let n -= 1
+    endwhile
+
+    return loclist
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/javascript.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,23 @@
+"============================================================================
+"File:        javascript.vim
+"Description: Figures out which javascript syntax checker (if any) to load
+"             from the javascript directory.
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+" Use g:syntastic_javascript_checker option to specify which jslint executable
+" should be used (see below for a list of supported checkers).
+" If g:syntastic_javascript_checker is not set, just use the first syntax
+" checker that we find installed.
+"============================================================================
+if exists("loaded_javascript_syntax_checker")
+    finish
+endif
+let loaded_javascript_syntax_checker = 1
+
+let s:supported_checkers = ["gjslint", "jslint", "jsl", "jshint"]
+call SyntasticLoadChecker(s:supported_checkers)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/javascript/gjslint.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,20 @@
+"============================================================================
+"File:        gjslint.vim
+"Description: Javascript syntax checker - using gjslint
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"============================================================================
+if !exists("g:syntastic_javascript_gjslint_conf")
+    let g:syntastic_javascript_gjslint_conf = ""
+endif
+
+function! SyntaxCheckers_javascript_GetLocList()
+    let makeprg = "gjslint " . g:syntastic_javascript_gjslint_conf . " --nosummary --unix_mode --nodebug_indentation --nobeep " . shellescape(expand('%'))
+    let errorformat="%f:%l:(New Error -%\\?\%n) %m,%f:%l:(-%\\?%n) %m,%-G1 files checked, no errors found.,%-G%.%#"
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/javascript/jshint.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,21 @@
+"============================================================================
+"File:        jshint.vim
+"Description: Javascript syntax checker - using jshint
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"============================================================================
+if !exists("g:syntastic_javascript_jshint_conf")
+    let g:syntastic_javascript_jshint_conf = ""
+endif
+
+function! SyntaxCheckers_javascript_GetLocList()
+    " node-jshint uses .jshintrc as config unless --config arg is present
+    let args = !empty(g:syntastic_javascript_jshint_conf) ? ' --config ' . g:syntastic_javascript_jshint_conf : ''
+    let makeprg = 'jshint ' . shellescape(expand("%")) . args
+    let errorformat = '%ELine %l:%c,%Z\\s%#Reason: %m,%C%.%#,%f: line %l\, col %c\, %m,%-G%.%#'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr('')} })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/javascript/jsl.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,20 @@
+"============================================================================
+"File:        jsl.vim
+"Description: Javascript syntax checker - using jsl
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"============================================================================
+if !exists("g:syntastic_javascript_jsl_conf")
+    let g:syntastic_javascript_jsl_conf = ""
+endif
+
+function! SyntaxCheckers_javascript_GetLocList()
+    let makeprg = "jsl " . g:syntastic_javascript_jsl_conf . " -nologo -nofilelisting -nosummary -nocontext -process ".shellescape(expand('%'))
+    let errorformat='%W%f(%l): lint warning: %m,%-Z%p^,%W%f(%l): warning: %m,%-Z%p^,%E%f(%l): SyntaxError: %m,%-Z%p^,%-G'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/javascript/jslint.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,31 @@
+"============================================================================
+"File:        jslint.vim
+"Description: Javascript syntax checker - using jslint
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"Tested with jslint 0.1.4.
+"============================================================================
+if !exists("g:syntastic_javascript_jslint_conf")
+    let g:syntastic_javascript_jslint_conf = "--white --undef --nomen --regexp --plusplus --bitwise --newcap --sloppy --vars"
+endif
+
+function! SyntaxCheckers_javascript_HighlightTerm(error)
+    let unexpected = matchstr(a:error['text'], 'Expected.*and instead saw \'\zs.*\ze\'')
+    if len(unexpected) < 1 | return '' | end
+    return '\V'.split(unexpected, "'")[1]
+endfunction
+
+function! SyntaxCheckers_javascript_GetLocList()
+    let makeprg = "jslint " . g:syntastic_javascript_jslint_conf . " " . shellescape(expand('%'))
+    let errorformat='%E %##%n %m,%-Z%.%#Line %l\, Pos %c,%-G%.%#'
+    let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr("")} })
+    call SyntasticHighlightErrors(errors, function('SyntaxCheckers_javascript_HighlightTerm'))
+
+    return errors
+endfunction
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/json.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,23 @@
+"============================================================================
+"File:        json.vim
+"Description: Figures out which json syntax checker (if any) to load
+"             from the json directory.
+"Maintainer:  Miller Medeiros <contact at millermedeiros dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+" Use g:syntastic_json_checker option to specify which jsonlint executable
+" should be used (see below for a list of supported checkers).
+" If g:syntastic_json_checker is not set, just use the first syntax
+" checker that we find installed.
+"============================================================================
+if exists("loaded_json_syntax_checker")
+    finish
+endif
+let loaded_json_syntax_checker = 1
+
+let s:supported_checkers = ["jsonlint", "jsonval"]
+call SyntasticLoadChecker(s:supported_checkers)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/json/jsonlint.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,16 @@
+"============================================================================
+"File:        jsonlint.vim
+"Description: JSON syntax checker - using jsonlint
+"Maintainer:  Miller Medeiros <contact at millermedeiros dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"============================================================================
+
+function! SyntaxCheckers_json_GetLocList()
+    let makeprg = 'jsonlint ' . shellescape(expand("%")) . ' --compact'
+    let errorformat = '%ELine %l:%c,%Z\\s%#Reason: %m,%C%.%#,%f: line %l\, col %c\, %m,%-G%.%#'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr('')} })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/json/jsonval.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,17 @@
+"============================================================================
+"File:        jsonval.vim
+"Description: JSON syntax checker - using jsonval
+"Maintainer:  Miller Medeiros <contact at millermedeiros dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"============================================================================
+
+function! SyntaxCheckers_json_GetLocList()
+    " based on https://gist.github.com/1196345
+    let makeprg = 'jsonval '. shellescape(expand('%'))
+    let errorformat = '%E%f:\ %m\ at\ line\ %l,%-G%.%#'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr('')} })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/less.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,38 @@
+"============================================================================
+"File:        less.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Julien Blanchard <julien at sideburns dot eu>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_less_syntax_checker")
+    finish
+endif
+let loaded_less_syntax_checker = 1
+
+"bail if the user doesnt have the lessc binary installed
+if !executable("lessc")
+    finish
+endif
+
+if !exists("g:syntastic_less_options")
+    let g:syntastic_less_options = "--no-color"
+endif
+
+function! SyntaxCheckers_less_GetLocList()
+    let makeprg = 'lessc '. g:syntastic_less_options .' '.  shellescape(expand('%')) . ' /dev/null'
+
+    "lessc >= 1.2
+    let errorformat = '%m in %f:%l:%c'
+    "lessc < 1.2
+    let errorformat .= ', Syntax %trror on line %l in %f,Syntax %trror on line %l,! Syntax %trror: on line %l: %m,%-G%.%#'
+
+    return SyntasticMake({ 'makeprg': makeprg,
+                         \ 'errorformat': errorformat,
+                         \ 'defaults': {'bufnr': bufnr(""), 'text': "Syntax error"} })
+endfunction
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/lua.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,58 @@
+"============================================================================
+"File:        lua.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Gregor Uhlenheuer <kongo2002 at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists('loaded_lua_syntax_checker')
+    finish
+endif
+let loaded_lua_syntax_checker = 1
+
+" check if the lua compiler is installed
+if !executable('luac')
+    finish
+endif
+
+function! SyntaxCheckers_lua_Term(pos)
+    let near = matchstr(a:pos['text'], "near '[^']\\+'")
+    let result = ''
+    if len(near) > 0
+        let near = split(near, "'")[1]
+        if near == '<eof>'
+            let p = getpos('$')
+            let a:pos['lnum'] = p[1]
+            let a:pos['col'] = p[2]
+            let result = '\%'.p[2].'c'
+        else
+            let result = '\V'.near
+        endif
+        let open = matchstr(a:pos['text'], "(to close '[^']\\+' at line [0-9]\\+)")
+        if len(open) > 0
+            let oline = split(open, "'")[1:2]
+            let line = 0+strpart(oline[1], 9)
+            call matchadd('SpellCap', '\%'.line.'l\V'.oline[0])
+        endif
+    endif
+    return result
+endfunction
+
+function! SyntaxCheckers_lua_GetLocList()
+    let makeprg = 'luac -p ' . shellescape(expand('%'))
+    let errorformat =  'luac: %#%f:%l: %m'
+
+    let loclist = SyntasticMake({ 'makeprg': makeprg,
+                                \ 'errorformat': errorformat,
+                                \ 'defaults': { 'bufnr': bufnr(''), 'type': 'E' } })
+
+    call SyntasticHighlightErrors(loclist, function("SyntaxCheckers_lua_Term"))
+
+    return loclist
+endfunction
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/matlab.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,28 @@
+"============================================================================
+"File:        matlab.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Jason Graham <jason at the-graham dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists("loaded_matlab_syntax_checker")
+    finish
+endif
+let loaded_matlab_syntax_checker = 1
+
+"bail if the user doesn't have mlint installed
+if !executable("mlint")
+    finish
+endif
+
+function! SyntaxCheckers_matlab_GetLocList()
+    let makeprg = 'mlint -id $* '.shellescape(expand('%'))
+    let errorformat = 'L %l (C %c): %*[a-zA-Z0-9]: %m,L %l (C %c-%*[0-9]): %*[a-zA-Z0-9]: %m'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr("")} })
+endfunction
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/ocaml.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,89 @@
+"============================================================================
+"File:        ocaml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Török Edwin <edwintorok at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+"
+" By default the camlp4o preprocessor is used to check the syntax of .ml, and .mli files,
+" ocamllex is used to check .mll files and menhir is used to check .mly files.
+" The output is all redirected to /dev/null, nothing is written to the disk.
+"
+" If your source code needs camlp4r then you can define this in your .vimrc:
+"
+"   let g:syntastic_ocaml_camlp4r = 1
+"
+" If you used some syntax extensions, or you want to also typecheck the source
+" code, then you can define this:
+"
+"   let g:syntastic_ocaml_use_ocamlbuild = 1
+"
+" This will run ocamlbuild <name>.inferred.mli, so it will write to your _build
+" directory (and possibly rebuild your myocamlbuild.ml plugin), only enable this
+" if you are ok with that.
+"
+" If you are using syntax extensions / external libraries and have a properly
+" set up _tags (and myocamlbuild.ml file) then it should just work
+" to enable this flag and get syntax / type checks through syntastic.
+"
+" For best results your current directory should be the project root
+" (same situation if you want useful output from :make).
+
+if exists("loaded_ocaml_syntax_checker")
+    finish
+endif
+let loaded_ocaml_syntax_checker = 1
+
+if exists('g:syntastic_ocaml_camlp4r') &&
+    \ g:syntastic_ocaml_camlp4r != 0
+    let s:ocamlpp="camlp4r"
+else
+    let s:ocamlpp="camlp4o"
+endif
+
+"bail if the user doesnt have the preprocessor
+if !executable(s:ocamlpp)
+    finish
+endif
+
+function! SyntaxCheckers_ocaml_GetLocList()
+    if exists('g:syntastic_ocaml_use_ocamlbuild') &&
+                \ g:syntastic_ocaml_use_ocamlbuild != 0 &&
+                \ executable("ocamlbuild") &&
+                \ isdirectory('_build')
+        let makeprg = "ocamlbuild -quiet -no-log -tag annot,". s:ocamlpp. " -no-links -no-hygiene -no-sanitize ".
+                    \ shellescape(expand('%:r')).".cmi"
+    else
+        let extension = expand('%:e')
+        if match(extension, 'mly') >= 0
+            " ocamlyacc output can't be redirected, so use menhir
+            if !executable("menhir")
+                return []
+            endif
+            let makeprg = "menhir --only-preprocess ".shellescape(expand('%')) . " >/dev/null"
+        elseif match(extension,'mll') >= 0
+            if !executable("ocamllex")
+                return []
+            endif
+            let makeprg = "ocamllex -q -o /dev/null ".shellescape(expand('%'))
+        else
+            let makeprg = "camlp4o -o /dev/null ".shellescape(expand('%'))
+        endif
+    endif
+    let errorformat = '%AFile "%f"\, line %l\, characters %c-%*\d:,'.
+                \ '%AFile "%f"\, line %l\, characters %c-%*\d (end at line %*\d\, character %*\d):,'.
+                \ '%AFile "%f"\, line %l\, character %c:,'.
+                \ '%AFile "%f"\, line %l\, character %c:%m,'.
+                \ '%-GPreprocessing error %.%#,'.
+                \ '%-GCommand exited %.%#,'.
+                \ '%C%tarning %n: %m,'.
+                \ '%C%m,'.
+                \ '%-G+%.%#'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/perl.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,29 @@
+"============================================================================
+"File:        perl.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Anthony Carapetis <anthony.carapetis at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_perl_syntax_checker")
+    finish
+endif
+let loaded_perl_syntax_checker = 1
+
+"bail if the user doesnt have perl installed
+if !executable("perl")
+    finish
+endif
+
+let s:checker = 'perl ' . shellescape(expand('<sfile>:p:h') . '/efm_perl.pl') . ' -c'
+
+function! SyntaxCheckers_perl_GetLocList()
+    let makeprg = s:checker . ' ' . shellescape(expand('%'))
+    let errorformat =  '%f:%l:%m'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/php.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,58 @@
+"============================================================================
+"File:        php.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_php_syntax_checker")
+    finish
+endif
+let loaded_php_syntax_checker = 1
+
+"bail if the user doesnt have php installed
+if !executable("php")
+    finish
+endif
+
+"Support passing configuration directives to phpcs
+if !exists("g:syntastic_phpcs_conf")
+    let g:syntastic_phpcs_conf = ""
+endif
+
+if !exists("g:syntastic_phpcs_disable")
+    let g:syntastic_phpcs_disable = 0
+endif
+
+function! SyntaxCheckers_php_Term(item)
+    let unexpected = matchstr(a:item['text'], "unexpected '[^']\\+'")
+    if len(unexpected) < 1 | return '' | end
+    return '\V'.split(unexpected, "'")[1]
+endfunction
+
+function! SyntaxCheckers_php_GetLocList()
+
+    let errors = []
+
+    let makeprg = "php -l ".shellescape(expand('%'))
+    let errorformat='%-GNo syntax errors detected in%.%#,PHP Parse error: %#syntax %trror\, %m in %f on line %l,PHP Fatal %trror: %m in %f on line %l,%-GErrors parsing %.%#,%-G\s%#,Parse error: %#syntax %trror\, %m in %f on line %l,Fatal %trror: %m in %f on line %l'
+    let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+
+    if empty(errors) && !g:syntastic_phpcs_disable && executable("phpcs")
+        let errors = errors + s:GetPHPCSErrors()
+    endif
+
+    call SyntasticHighlightErrors(errors, function('SyntaxCheckers_php_Term'))
+
+    return errors
+endfunction
+
+function! s:GetPHPCSErrors()
+    let makeprg = "phpcs " . g:syntastic_phpcs_conf . " --report=csv ".shellescape(expand('%'))
+    let errorformat = '%-GFile\,Line\,Column\,Type\,Message\,Source\,Severity,"%f"\,%l\,%c\,%t%*[a-zA-Z]\,"%m"\,%*[a-zA-Z0-9_.-]\,%*[0-9]'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'subtype': 'Style' })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/puppet.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,54 @@
+"============================================================================
+"File:        puppet.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Eivind Uggedal <eivind at uggedal dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_puppet_syntax_checker")
+    finish
+endif
+let loaded_puppet_syntax_checker = 1
+
+"bail if the user doesnt have puppet installed
+if !executable("puppet")
+    finish
+endif
+
+function! s:ExtractVersion()
+    let output = system("puppet --version")
+    let output = substitute(output, '\n$', '', '')
+    return split(output, '\.')
+endfunction
+
+let s:puppetVersion = s:ExtractVersion()
+
+function! SyntaxCheckers_puppet_GetLocList()
+    "If puppet is >= version 2.7 then use the new executable
+    if s:puppetVersion[0] >= '2' && s:puppetVersion[1] >= '7'
+        let makeprg = 'puppet parser validate ' .
+                    \ shellescape(expand('%')) .
+                    \ ' --color=false' .
+                    \ ' --storeconfigs'
+
+        "add --ignoreimport for versions < 2.7.10
+        if s:puppetVersion[2] < '10'
+            let makeprg .= ' --ignoreimport'
+        endif
+
+    else
+        let makeprg = 'puppet --color=false --parseonly --ignoreimport '.shellescape(expand('%'))
+    endif
+
+    "some versions of puppet (e.g. 2.7.10) output the message below if there
+    "are any syntax errors
+    let errorformat = '%-Gerr: Try ''puppet help parser validate'' for usage,'
+
+    let errorformat .= 'err: Could not parse for environment %*[a-z]: %m at %f:%l'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/python.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,80 @@
+"============================================================================
+"File:        python.vim
+"Description: Syntax checking plugin for syntastic.vim
+"
+"Authors:     Martin Grenfell <martin.grenfell@gmail.com>
+"             kstep <me@kstep.me>
+"             Parantapa Bhattacharya <parantapa@gmail.com>
+"
+"============================================================================
+"
+" For forcing the use of flake8, pyflakes, or pylint set
+"
+"   let g:syntastic_python_checker = 'pyflakes'
+"
+" in your .vimrc. Default is flake8.
+
+if exists("loaded_python_syntax_checker")
+    finish
+endif
+let loaded_python_syntax_checker = 1
+
+"bail if the user doesnt have his favorite checker or flake8 or pyflakes installed
+if !exists('g:syntastic_python_checker') || !executable(g:syntastic_python_checker)
+    if executable("flake8")
+        let g:syntastic_python_checker = 'flake8'
+    elseif executable("pyflakes")
+        let g:syntastic_python_checker = 'pyflakes'
+    elseif executable("pylint")
+        let g:syntastic_python_checker = 'pylint'
+    else
+        finish
+    endif
+endif
+if !exists('g:syntastic_python_checker_args')
+    let g:syntastic_python_checker_args = ''
+endif
+
+function! SyntaxCheckers_python_Term(i)
+    if a:i['type'] ==# 'E'
+        let a:i['text'] = "Syntax error"
+    endif
+    if match(a:i['text'], 'is assigned to but never used') > -1
+                \ || match(a:i['text'], 'imported but unused') > -1
+                \ || match(a:i['text'], 'undefined name') > -1
+                \ || match(a:i['text'], 'redefinition of') > -1
+                \ || match(a:i['text'], 'referenced before assignment') > -1
+                \ || match(a:i['text'], 'duplicate argument') > -1
+                \ || match(a:i['text'], 'after other statements') > -1
+                \ || match(a:i['text'], 'shadowed by loop variable') > -1
+
+        let term = split(a:i['text'], "'", 1)[1]
+        return '\V\<'.term.'\>'
+    endif
+    return ''
+endfunction
+
+if g:syntastic_python_checker == 'pylint'
+    function! SyntaxCheckers_python_GetLocList()
+        let makeprg = 'pylint -f parseable -r n -i y ' .
+            \ shellescape(expand('%')) .
+            \ ' \| sed ''s_: \[[RC]_: \[W_''' .
+            \ ' \| sed ''s_: \[[F]_:\ \[E_'''
+        let errorformat = '%f:%l: [%t%n] %m,%-GNo config%m'
+        let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+
+        return errors
+    endfunction
+else
+    function! SyntaxCheckers_python_GetLocList()
+        let makeprg = g:syntastic_python_checker.' '.g:syntastic_python_checker_args.' '.shellescape(expand('%'))
+        let errorformat =
+            \ '%E%f:%l: could not compile,%-Z%p^,%W%f:%l:%c: %m,%W%f:%l: %m,%-G%.%#'
+
+        let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+
+        call SyntasticHighlightErrors(errors, function('SyntaxCheckers_python_Term'))
+
+        return errors
+    endfunction
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/rst.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,37 @@
+"============================================================================
+"File:        rst.vim
+"Description: Syntax checking plugin for docutil's reStructuredText files
+"Maintainer:  James Rowe <jnrowe at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+" We use rst2pseudoxml.py, as it is ever so marginally faster than the other
+" rst2${x} tools in docutils.
+
+if exists("loaded_rst_syntax_checker")
+    finish
+endif
+let loaded_rst_syntax_checker = 1
+
+"bail if the user doesn't have rst2pseudoxml.py installed
+if !executable("rst2pseudoxml.py")
+    finish
+endif
+
+function! SyntaxCheckers_rst_GetLocList()
+    let makeprg = 'rst2pseudoxml.py --report=1 --exit-status=1 ' .
+      \ shellescape(expand('%')) . ' /dev/null'
+
+    let errorformat = '%f:%l:\ (%tNFO/1)\ %m,
+      \%f:%l:\ (%tARNING/2)\ %m,
+      \%f:%l:\ (%tRROR/3)\ %m,
+      \%f:%l:\ (%tEVERE/4)\ %m,
+      \%-G%.%#'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/ruby.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,32 @@
+"============================================================================
+"File:        ruby.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_ruby_syntax_checker")
+    finish
+endif
+let loaded_ruby_syntax_checker = 1
+
+"bail if the user doesnt have ruby installed
+if !executable("ruby")
+    finish
+endif
+
+function! SyntaxCheckers_ruby_GetLocList()
+    " we cannot set RUBYOPT on windows like that
+    if has('win32') || has('win64')
+        let makeprg = 'ruby -W1 -T1 -c '.shellescape(expand('%'))
+    else
+        let makeprg = 'RUBYOPT= ruby -W1 -c '.shellescape(expand('%'))
+    endif
+    let errorformat =  '%-GSyntax OK,%E%f:%l: syntax error\, %m,%Z%p^,%W%f:%l: warning: %m,%Z%p^,%W%f:%l: %m,%-C%.%#'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/rust.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,33 @@
+"============================================================================
+"File:        rust.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Chad Jablonski <chad.jablonski at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_rust_syntax_checker")
+    finish
+endif
+let loaded_rust_syntax_checker = 1
+
+"bail if the user doesnt have rustc installed
+if !executable("rustc")
+    finish
+endif
+
+function! SyntaxCheckers_rust_GetLocList()
+    let makeprg = 'rustc --parse-only '.shellescape(expand('%'))
+
+    let errorformat  = '%E%f:%l:%c: \\d%#:\\d%# %.%\{-}error:%.%\{-} %m,'   .
+                     \ '%W%f:%l:%c: \\d%#:\\d%# %.%\{-}warning:%.%\{-} %m,' .
+                     \ '%C%f:%l %m,' .
+                     \ '%-Z%.%#'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/sass.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,35 @@
+"============================================================================
+"File:        sass.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_sass_syntax_checker")
+    finish
+endif
+let loaded_sass_syntax_checker = 1
+
+"bail if the user doesnt have the sass binary installed
+if !executable("sass")
+    finish
+endif
+
+"use compass imports if available
+let s:imports = ""
+if executable("compass")
+    let s:imports = "--compass"
+endif
+
+function! SyntaxCheckers_sass_GetLocList()
+    let makeprg='sass '.s:imports.' --check '.shellescape(expand('%'))
+    let errorformat = '%ESyntax %trror:%m,%C        on line %l of %f,%Z%.%#'
+    let errorformat .= ',%Wwarning on line %l:,%Z%m,Syntax %trror on line %l: %m'
+    let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+
+    return loclist
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/scss.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,27 @@
+
+"============================================================================
+"File:        scss.vim
+"Description: scss syntax checking plugin for syntastic
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_scss_syntax_checker")
+    finish
+endif
+let loaded_scss_syntax_checker = 1
+
+"bail if the user doesnt have the sass binary installed
+if !executable("sass")
+    finish
+endif
+
+runtime syntax_checkers/sass.vim
+
+function! SyntaxCheckers_scss_GetLocList()
+    return SyntaxCheckers_sass_GetLocList()
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/sh.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,52 @@
+"============================================================================
+"File:        sh.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Gregor Uhlenheuer <kongo2002 at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists('loaded_sh_syntax_checker')
+    finish
+endif
+let loaded_sh_syntax_checker = 1
+
+function! s:GetShell()
+    if !exists('b:shell') || b:shell == ""
+        let b:shell = ''
+        let shebang = getbufline(bufnr('%'), 1)[0]
+        if len(shebang) > 0
+            if match(shebang, 'bash') >= 0
+                let b:shell = 'bash'
+            elseif match(shebang, 'zsh') >= 0
+                let b:shell = 'zsh'
+            elseif match(shebang, 'sh') >= 0
+                let b:shell = 'sh'
+            endif
+        endif
+    endif
+    return b:shell
+endfunction
+
+function! SyntaxCheckers_sh_GetLocList()
+    if len(s:GetShell()) == 0 || !executable(s:GetShell())
+        return []
+    endif
+    let output = split(system(s:GetShell().' -n '.shellescape(expand('%'))), '\n')
+    if v:shell_error != 0
+        let result = []
+        for err_line in output
+            let line = substitute(err_line, '^[^:]*:\D\{-}\(\d\+\):.*', '\1', '')
+            let msg = substitute(err_line, '^[^:]*:\D\{-}\d\+: \(.*\)', '\1', '')
+            call add(result, {'lnum' : line,
+                            \ 'text' : msg,
+                            \ 'bufnr': bufnr(''),
+                            \ 'type': 'E' })
+        endfor
+        return result
+    endif
+    return []
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/tcl.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,28 @@
+"============================================================================
+"File: tcl.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer: Eric Thomas <eric.l.m.thomas at gmail dot com>
+"License: This program is free software. It comes without any warranty,
+" to the extent permitted by applicable law. You can redistribute
+" it and/or modify it under the terms of the Do What The Fuck You
+" Want To Public License, Version 2, as published by Sam Hocevar.
+" See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists("loaded_tcl_syntax_checker")
+    finish
+endif
+let loaded_tcl_syntax_checker = 1
+
+"bail if the user doesnt have tclsh installed
+if !executable("tclsh")
+    finish
+endif
+
+function! SyntaxCheckers_tcl_GetLocList()
+    let makeprg = 'tclsh '.shellescape(expand('%'))
+    let errorformat = '%f:%l:%m'
+
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/tex.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,26 @@
+"============================================================================
+"File:        tex.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_tex_syntax_checker")
+    finish
+endif
+let loaded_tex_syntax_checker = 1
+
+"bail if the user doesnt have lacheck installed
+if !executable("lacheck")
+    finish
+endif
+
+function! SyntaxCheckers_tex_GetLocList()
+    let makeprg = 'lacheck '.shellescape(expand('%'))
+    let errorformat =  '%-G** %f:,%E"%f"\, line %l: %m'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/vala.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,56 @@
+"============================================================================
+"File:        vala.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Konstantin Stepanov (me@kstep.me)
+"Notes:       Add special comment line into your vala file starting with
+"             "// modules: " and containing space delimited list of vala
+"             modules, used by the file, so this script can build correct
+"             --pkg arguments.
+"             Valac compiler is not the fastest thing in the world, so you
+"             may want to disable this plugin with
+"             let g:syntastic_vala_check_disabled = 1 command in your .vimrc or
+"             command line. Unlet this variable to set it to 0 to reenable
+"             this checker.
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists('loaded_vala_syntax_checker')
+    finish
+endif
+let loaded_vala_syntax_checker = 1
+
+if !executable('valac')
+    finish
+endif
+
+if exists('g:syntastic_vala_check_disabled') && g:syntastic_vala_check_disabled
+    finish
+endif
+
+function! SyntaxCheckers_vala_Term(pos)
+    let strlength = strlen(matchstr(a:pos['text'], '\^\+$'))
+    return '\%>'.(a:pos.col-1).'c.*\%<'.(a:pos.col+strlength+1).'c'
+endfunction
+
+function! s:GetValaModules()
+    let modules_line = search('^// modules: ', 'n')
+    let modules_str = getline(modules_line)
+    let modules = split(strpart(modules_str, 12), '\s\+')
+    return modules
+endfunction
+
+function! SyntaxCheckers_vala_GetLocList()
+    let vala_pkg_args = join(map(s:GetValaModules(), '"--pkg ".v:val'), ' ')
+    let makeprg = 'valac -C ' . vala_pkg_args . ' ' .shellescape(expand('%'))
+    let errorformat = '%A%f:%l.%c-%\d%\+.%\d%\+: %t%[a-z]%\+: %m,%C%m,%Z%m'
+
+    let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+    call SyntasticHighlightErrors(loclist, function("SyntaxCheckers_vala_Term"), 1)
+    return loclist
+endfunction
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/xhtml.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,46 @@
+"============================================================================
+"File:        xhtml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_xhtml_syntax_checker")
+    finish
+endif
+let loaded_xhtml_syntax_checker = 1
+
+"bail if the user doesnt have tidy or grep installed
+if !executable("tidy")
+    finish
+endif
+
+" TODO: join this with html.vim DRY's sake?
+function! s:TidyEncOptByFenc()
+    let tidy_opts = {
+                \'utf-8'       : '-utf8',
+                \'ascii'       : '-ascii',
+                \'latin1'      : '-latin1',
+                \'iso-2022-jp' : '-iso-2022',
+                \'cp1252'      : '-win1252',
+                \'macroman'    : '-mac',
+                \'utf-16le'    : '-utf16le',
+                \'utf-16'      : '-utf16',
+                \'big5'        : '-big5',
+                \'sjis'        : '-shiftjis',
+                \'cp850'       : '-ibm858',
+                \}
+    return get(tidy_opts, &fileencoding, '-utf8')
+endfunction
+
+function! SyntaxCheckers_xhtml_GetLocList()
+
+    let encopt = s:TidyEncOptByFenc()
+    let makeprg="tidy ".encopt." -xml -e ".shellescape(expand('%'))
+    let errorformat='%Wline %l column %c - Warning: %m,%Eline %l column %c - Error: %m,%-G%.%#,%-G%.%#'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr("")} })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/xml.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,42 @@
+"============================================================================
+"File:        xml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Sebastian Kusnier <sebastian at kusnier dot net>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+" You can use a local installation of DTDs to significantly speed up validation
+" and allow you to validate XML data without network access, see xmlcatalog(1)
+" and http://www.xmlsoft.org/catalog.html for more information.
+
+if exists("loaded_xml_syntax_checker")
+    finish
+endif
+let loaded_xml_syntax_checker = 1
+
+"bail if the user doesnt have tidy or grep installed
+if !executable("xmllint")
+    finish
+endif
+
+function! SyntaxCheckers_xml_GetLocList()
+
+    let makeprg="xmllint --xinclude --noout --postvalid " . shellescape(expand("%:p"))
+    let errorformat='%E%f:%l:\ error\ :\ %m,
+        \%-G%f:%l:\ validity\ error\ :\ Validation\ failed:\ no\ DTD\ found\ %m,
+        \%W%f:%l:\ warning\ :\ %m,
+        \%W%f:%l:\ validity\ warning\ :\ %m,
+        \%E%f:%l:\ validity\ error\ :\ %m,
+        \%E%f:%l:\ parser\ error\ :\ %m,
+        \%E%f:%l:\ %m,
+        \%-Z%p^,
+        \%-G%.%#'
+    let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+
+    return loclist
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/xslt.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,38 @@
+"============================================================================
+"File:        xslt.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Sebastian Kusnier <sebastian at kusnier dot net>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+if exists("loaded_xslt_syntax_checker")
+    finish
+endif
+let loaded_xslt_syntax_checker = 1
+
+"bail if the user doesnt have tidy or grep installed
+if !executable("xmllint")
+    finish
+endif
+
+function! SyntaxCheckers_xslt_GetLocList()
+
+    let makeprg="xmllint --xinclude --noout --postvalid " . shellescape(expand("%:p"))
+    let errorformat='%E%f:%l:\ error\ :\ %m,
+        \%-G%f:%l:\ validity\ error\ :\ Validation\ failed:\ no\ DTD\ found\ %m,
+        \%W%f:%l:\ warning\ :\ %m,
+        \%W%f:%l:\ validity\ warning\ :\ %m,
+        \%E%f:%l:\ validity\ error\ :\ %m,
+        \%E%f:%l:\ parser\ error\ :\ %m,
+        \%E%f:%l:\ namespace\ error\ :\ %m,
+        \%E%f:%l:\ %m,
+        \%-Z%p^,
+        \%-G%.%#'
+    let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+
+    return loclist
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/yaml.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,30 @@
+"============================================================================
+"File:        yaml.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  Martin Grenfell <martin.grenfell at gmail dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"
+"Installation: $ npm install -g js-yaml.bin
+"
+"============================================================================
+if exists("loaded_yaml_syntax_checker")
+    finish
+endif
+let loaded_yaml_syntax_checker = 1
+
+if !executable("js-yaml")
+    finish
+endif
+
+function! SyntaxCheckers_yaml_GetLocList()
+    let makeprg='js-yaml --compact ' . shellescape(expand('%'))
+    let errorformat='Error on line %l\, col %c:%m,%-G%.%#'
+    return SyntasticMake({ 'makeprg': makeprg,
+                         \ 'errorformat': errorformat,
+                         \ 'defaults': {'bufnr': bufnr("")} })
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.vim/syntax_checkers/zpt.vim	Fri Mar 29 14:58:44 2013 +0100
@@ -0,0 +1,36 @@
+"============================================================================
+"File:        zpt.vim
+"Description: Syntax checking plugin for syntastic.vim
+"Maintainer:  claytron <robots at claytron dot com>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+" In order for this plugin to be useful, you will need to set up the
+" zpt filetype in your vimrc
+"
+"    " set up zope page templates as the zpt filetype
+"    au BufNewFile,BufRead *.pt,*.cpt,*.zpt set filetype=zpt syntax=xml
+"
+" Then install the zptlint program, found on pypi:
+" http://pypi.python.org/pypi/zptlint
+
+if exists("loaded_zpt_syntax_checker")
+    finish
+endif
+let loaded_zpt_syntax_checker = 1
+
+" Bail if the user doesn't have zptlint installed
+if !executable("zptlint")
+    finish
+endif
+
+function! SyntaxCheckers_zpt_GetLocList()
+    let makeprg="zptlint ".shellescape(expand('%'))
+    let errorformat='%-P*** Error in: %f,%Z%*\s\, at line %l\, column %c,%E%*\s%m,%-Q'
+    return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
+endfunction
--- a/config/.vimrc	Thu Jan 10 09:18:28 2013 +0100
+++ b/config/.vimrc	Fri Mar 29 14:58:44 2013 +0100
@@ -44,3 +44,16 @@
 let g:proj_flags="imstbvSc"
 nmap <silent> <Leader>p <Plug>ToggleProject
 
+
+set backupdir=~/tmp
+set directory=~/tmp
+
+" Coffee-script related
+vmap <leader>c <esc>:'<,'>:CoffeeCompile<CR>
+map <leader>c :CoffeeCompile<CR>
+command -nargs=1 C CoffeeCompile | :<args>
+au BufWritePost *.coffee silent CoffeeMake! -b | cwindow | redraw!
+"let coffee_compile_vert = 1
+au BufNewFile,BufReadPost *.coffee setl foldmethod=indent "nofoldenable
+au BufNewFile,BufReadPost *.coffee setl shiftwidth=2 expandtab
+