Commits

aef committed 8b741e7

Whole bunch of vim stuff

  • Participants
  • Parent commits 8b94518

Comments (0)

Files changed (69)

File vim/bundle/vim-coffee-script/.git/HEAD

+ref: refs/heads/master

File vim/bundle/vim-coffee-script/.git/config

+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	fetch = +refs/heads/*:refs/remotes/origin/*
+	url = https://github.com/kchmck/vim-coffee-script.git
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master

File vim/bundle/vim-coffee-script/.git/description

+Unnamed repository; edit this file 'description' to name the repository.

File vim/bundle/vim-coffee-script/.git/hooks/applypatch-msg.sample

+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:

File vim/bundle/vim-coffee-script/.git/hooks/commit-msg.sample

+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}

File vim/bundle/vim-coffee-script/.git/hooks/post-update.sample

+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info

File vim/bundle/vim-coffee-script/.git/hooks/pre-applypatch.sample

+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:

File vim/bundle/vim-coffee-script/.git/hooks/pre-commit.sample

+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --

File vim/bundle/vim-coffee-script/.git/hooks/pre-rebase.sample

+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+exit 0
+
+################################################################
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".

File vim/bundle/vim-coffee-script/.git/hooks/prepare-commit-msg.sample

+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"

File vim/bundle/vim-coffee-script/.git/hooks/update.sample

+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0

File vim/bundle/vim-coffee-script/.git/index

Binary file added.

File vim/bundle/vim-coffee-script/.git/info/exclude

+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~

File vim/bundle/vim-coffee-script/.git/logs/HEAD

+0000000000000000000000000000000000000000 d6dcb9b0fb5beac9e84cfb84c1917b7e0df5850f Adrian Fraiha <aef@catch-colt.com> 1341588691 -0400	clone: from https://github.com/kchmck/vim-coffee-script.git

File vim/bundle/vim-coffee-script/.git/logs/refs/heads/master

+0000000000000000000000000000000000000000 d6dcb9b0fb5beac9e84cfb84c1917b7e0df5850f Adrian Fraiha <aef@catch-colt.com> 1341588691 -0400	clone: from https://github.com/kchmck/vim-coffee-script.git

File vim/bundle/vim-coffee-script/.git/logs/refs/remotes/origin/HEAD

+0000000000000000000000000000000000000000 d6dcb9b0fb5beac9e84cfb84c1917b7e0df5850f Adrian Fraiha <aef@catch-colt.com> 1341588691 -0400	clone: from https://github.com/kchmck/vim-coffee-script.git

File vim/bundle/vim-coffee-script/.git/objects/pack/pack-ee93c4d1f50b8765d610cfb359355a7bec5246ac.idx

Binary file added.

File vim/bundle/vim-coffee-script/.git/objects/pack/pack-ee93c4d1f50b8765d610cfb359355a7bec5246ac.pack

Binary file added.

File vim/bundle/vim-coffee-script/.git/packed-refs

+# pack-refs with: peeled 
+d6dcb9b0fb5beac9e84cfb84c1917b7e0df5850f refs/remotes/origin/master
+c8ac018e07a84fd732213ed4166ff808092db531 refs/tags/v001
+^bd4a37b4b0bec2ae80f52ff20445eab5ab371a4d
+724b243d5e5b3fe747a7cadac69fab3534bf6ab1 refs/tags/v002
+^ae7ebc39cbf7f29a1034ba3dbe7e947d7dda3bf9

File vim/bundle/vim-coffee-script/.git/refs/heads/master

+d6dcb9b0fb5beac9e84cfb84c1917b7e0df5850f

File vim/bundle/vim-coffee-script/.git/refs/remotes/origin/HEAD

+ref: refs/remotes/origin/master

File vim/bundle/vim-coffee-script/.gitignore

+.*.sw[a-z]
+.*.un~
+doc/tags
+

File vim/bundle/vim-coffee-script/Copying.md

+                DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+                        Version 2, December 2004
+
+     Copyright (C) 2010 to 2012 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.
+
+

File vim/bundle/vim-coffee-script/Makefile

+REF = HEAD
+VERSION = $(shell git describe --always $(REF))
+
+ARCHIVE = vim-coffee-script-$(VERSION).zip
+ARCHIVE_DIRS = after compiler doc ftdetect ftplugin indent syntax
+
+# Don't do anything by default.
+all:
+
+# Make vim.org zipball.
+archive:
+	git archive $(REF) -o $(ARCHIVE) -- $(ARCHIVE_DIRS)
+
+# Remove zipball.
+clean:
+	-rm -f $(ARCHIVE)
+
+# Build the list of syntaxes for @coffeeAll.
+coffeeAll:
+	@grep -E 'syn (match|region)' syntax/coffee.vim |\
+	 grep -v 'contained' |\
+	 awk '{print $$3}' |\
+	 uniq
+
+.PHONY: all archive clean hash coffeeAll

File vim/bundle/vim-coffee-script/News.md

+### Version 002 (December 5, 2011)
+
+Added binary numbers (0b0101) and fixed some bugs (#9, #62, #63, #65).
+
+### Version 001 (October 18, 2011)
+
+Removed deprecated `coffee_folding` option, added `coffee_compile_vert` option,
+split out compiler, fixed indentation and syntax bugs, and added Haml support
+and omnicompletion.
+
+ - The coffee compiler is now a proper vim compiler that can be loaded with
+   `:compiler coffee`.
+ - The `coffee_compile_vert` option can now be set to split the CoffeeCompile
+   buffer vertically by default.
+ - CoffeeScript is now highlighted inside the `:coffeescript` filter in Haml.
+ - Omnicompletion (`:help compl-omni`) now uses JavaScript's dictionary to
+   complete words.
+ - We now have a fancy version number.

File vim/bundle/vim-coffee-script/Readme.md

+This project adds [CoffeeScript] support to the vim editor. It handles syntax,
+indenting, compiling, and more. Also included is an [eco] syntax and support for
+CoffeeScript in Haml and HTML.
+
+![Screenshot](http://i.imgur.com/eUBvm.png)
+
+[CoffeeScript]: http://jashkenas.github.com/coffee-script/
+[eco]: https://github.com/sstephenson/eco
+
+### Install from a Zipball
+
+This is the quickest way to get things running.
+
+1. Download the latest zipball from [vim.org][zipball-vim] or
+   [github][zipball-github]. The latest version on github is under Download
+   Packages (don't use the Download buttons.)
+
+2. Extract the archive into `~/.vim/`:
+
+        unzip -od ~/.vim vim-coffee-script-HASH.zip
+
+These steps are also used to update the plugin.
+
+[zipball-vim]: http://www.vim.org/scripts/script.php?script_id=3590
+[zipball-github]: https://github.com/kchmck/vim-coffee-script/downloads
+
+### Install with Pathogen
+
+Since this plugin has rolling versions based on git commits, using pathogen and
+git is the preferred way to install. The plugin ends up contained in its own
+directory and updates are just a `git pull` away.
+
+1. Install tpope's [pathogen] into `~/.vim/autoload/` and add this line to your
+   `vimrc`:
+
+        call pathogen#infect()
+
+    To get the all the features of this plugin, make sure you also have a
+    `filetype plugin indent on` line in there.
+
+[pathogen]: http://www.vim.org/scripts/script.php?script_id=2332
+
+2. Create and change into `~/.vim/bundle/`:
+
+        $ mkdir ~/.vim/bundle
+        $ cd ~/.vim/bundle
+
+3. Make a clone of the `vim-coffee-script` repository:
+
+        $ git clone https://github.com/kchmck/vim-coffee-script.git
+
+#### Updating
+
+1. Change into `~/.vim/bundle/vim-coffee-script/`:
+
+        $ cd ~/.vim/bundle/vim-coffee-script
+
+2. Pull in the latest changes:
+
+        $ git pull
+
+### CoffeeMake: Compile the Current File
+
+The `CoffeeMake` command compiles the current file and parses any errors:
+
+  ![CoffeeMake](http://i.imgur.com/cr9xI.png)
+
+The full signature of the command is:
+
+    :[silent] CoffeeMake[!] [COFFEE-OPTIONS]...
+
+By default, `CoffeeMake` shows all compiler output and jumps to the first line
+reported as an error by `coffee`:
+
+    :CoffeeMake
+
+Compiler output can be hidden with `silent`:
+
+    :silent CoffeeMake
+
+Line-jumping can be turned off by adding a bang:
+
+    :CoffeeMake!
+
+Options given to `CoffeeMake` are passed along to `coffee`:
+
+    :CoffeeMake --bare
+
+`CoffeeMake` can be manually loaded for a file with:
+
+    :compiler coffee
+
+#### Recompile on write
+
+To recompile a file when it's written, add an `autocmd` like this to your
+`vimrc`:
+
+    au BufWritePost *.coffee silent CoffeeMake!
+
+All of the customizations above can be used, too. This one compiles silently
+and with the `-b` option, but shows any errors:
+
+    au BufWritePost *.coffee silent CoffeeMake! -b | cwindow | redraw!
+
+The `redraw!` command is needed to fix a redrawing quirk in terminal vim, but
+can removed for gVim.
+
+#### Default compiler options
+
+The `CoffeeMake` command passes any options in the `coffee_make_options`
+variable along to the compiler. You can use this to set default options:
+
+    let coffee_make_options = '--bare'
+
+#### Path to compiler
+
+To change the compiler used by `CoffeeMake` and `CoffeeCompile`, set
+`coffee_compiler` to the full path of an executable or the filename of one
+in your `$PATH`:
+
+    let coffee_compiler = '/usr/bin/coffee'
+
+This option is set to `coffee` by default.
+
+### CoffeeCompile: Compile Snippets of CoffeeScript
+
+The `CoffeeCompile` command shows how the current file or a snippet of
+CoffeeScript is compiled to JavaScript. The full signature of the command is:
+
+    :[RANGE] CoffeeCompile [watch|unwatch] [vert[ical]] [WINDOW-SIZE]
+
+Calling `CoffeeCompile` without a range compiles the whole file:
+
+  ![CoffeeCompile](http://i.imgur.com/KJfSZ.png)
+
+Calling `CoffeeCompile` with a range, like in visual mode, compiles the selected
+snippet of CoffeeScript:
+
+  ![CoffeeCompile Snippet](http://i.imgur.com/mbaUA.png)
+
+  ![Compiled Snippet](http://i.imgur.com/Ocjuc.png)
+
+This scratch buffer can be quickly closed by hitting the `q` key.
+
+Using `vert` splits the CoffeeCompile buffer vertically instead of horizontally:
+
+    :CoffeeCompile vert
+
+Set the `coffee_compile_vert` variable to split the buffer vertically by
+default:
+
+    let coffee_compile_vert = 1
+
+The initial size of the CoffeeCompile buffer can be given as a number:
+
+    :CoffeeCompile 4
+
+#### Watch (live preview) mode
+
+Watch mode is like the Try CoffeeScript preview box on the CoffeeScript
+homepage:
+
+  ![Watch Mode](http://i.imgur.com/M6l1j.png)
+
+  ![Watch Mode](http://i.imgur.com/qtNmU.png)
+
+Writing some code and then exiting insert mode automatically updates the
+compiled JavaScript buffer.
+
+Use `watch` to start watching a buffer (`vert` is also recommended):
+
+    :CoffeeCompile watch vert
+
+After making some changes in insert mode, hit escape and the CoffeeScript will
+be recompiled. Changes made outside of insert mode don't trigger this recompile,
+but calling `CoffeeCompile` will compile these changes without any bad effects.
+
+To get synchronized scrolling of a CoffeeScript and CoffeeCompile buffer, set
+`scrollbind` on each:
+
+    :setl scrollbind
+
+Use `unwatch` to stop watching a buffer:
+
+    :CoffeeCompile unwatch
+
+### CoffeeLint: Lint your CoffeeScript
+
+The `CoffeeLint` command runs [coffeelint](http://www.coffeelint.org/) (version
+0.4.0 or later required) on the current file and parses any errors:
+
+    :[RANGE] CoffeeLint[!] [COFFEELINT-OPTIONS]
+
+Use it like `CoffeeMake`.
+
+  ![CoffeeLint](http://i.imgur.com/dlxF7.png)
+
+#### Default coffeelint options
+
+Options in `coffee_lint_options` are passed along to `coffeelint`:
+
+    let coffee_lint_options = '-f lint.json'
+
+#### Path to `coffeelint`
+
+Use the `coffee_linter` option to set a different path to the `coffeelint`
+executable:
+
+    let coffee_linter = '/usr/bin/coffeelint'
+
+This option is set to `coffeelint` by default.
+
+### CoffeeRun: Run some CoffeeScript
+
+The `CoffeeRun` command compiles the current file or selected snippet and runs
+the resulting JavaScript. Output is shown at the bottom of the screen:
+
+  ![CoffeeRun](http://i.imgur.com/7hwSy.png)
+
+  ![CoffeeRun Output](http://i.imgur.com/WNWvC.png)
+
+### Configure Syntax Highlighting
+
+Add these lines to your `vimrc` to disable the relevant syntax group.
+
+#### Disable trailing whitespace error
+
+Trailing whitespace is highlighted as an error by default. This can be disabled
+with:
+
+    hi link coffeeSpaceError NONE
+
+#### Disable trailing semicolon error
+
+Trailing semicolons are also considered an error (for help transitioning from
+JavaScript.) This can be disabled with:
+
+    hi link coffeeSemicolonError NONE
+
+#### Disable reserved words error
+
+Reserved words like `function` and `var` are highlighted as an error where
+they're not allowed in CoffeeScript. This can be disabled with:
+
+    hi link coffeeReservedError NONE
+
+### Tune Vim for CoffeeScript
+
+Changing these core settings can make vim more CoffeeScript friendly.
+
+#### Fold by indentation
+
+Folding by indentation works well for CoffeeScript functions and classes:
+
+  ![Folding](http://i.imgur.com/Y0rDC.png)
+
+To fold by indentation in CoffeeScript files, add this line to your `vimrc`:
+
+    au BufNewFile,BufReadPost *.coffee setl foldmethod=indent nofoldenable
+
+With this, folding is disabled by default but can be quickly toggled per-file
+by hitting `zi`. To enable folding by default, remove `nofoldenable`:
+
+    au BufNewFile,BufReadPost *.coffee setl foldmethod=indent
+
+#### Two-space indentation
+
+To get standard two-space indentation in CoffeeScript files, add this line to
+your `vimrc`:
+
+    au BufNewFile,BufReadPost *.coffee setl shiftwidth=2 expandtab

File vim/bundle/vim-coffee-script/Thanks.md

+Thanks to all bug reporters, and special thanks to those who have contributed
+code:
+
+    Brian Egan (brianegan):
+          Initial compiling support
+
+    Ches Martin (ches):
+          Initial vim docs
+
+    Chris Hoffman (cehoffman):
+          Add new keywoards from, to, and do
+          Highlight the - in negative integers
+          Add here regex highlighting, increase fold level for here docs
+
+    David Wilhelm (bigfish):
+          CoffeeRun command
+
+    Jay Adkisson (jayferd):
+          Support for eco templates
+
+    Karl Guertin (grayrest)
+          Cakefiles are coffeescript
+
+    Maciej Konieczny (narfdotpl):
+          Fix funny typo
+
+    Matt Sacks (mattsa):
+          Javascript omni-completion
+          coffee_compile_vert option
+
+    Nick Stenning (nickstenning):
+          Fold by indentation for coffeescript
+
+    Simon Lipp (sloonz):
+          Trailing spaces are not error on lines containing only spaces
+
+    Stéphan Kochen (stephank):
+          Initial HTML CoffeeScript highlighting
+
+    Sven Felix Oberquelle (Svelix):
+          Haml CoffeeScript highlighting
+
+    Wei Dai (clvv):
+          Fix the use of Vim built-in make command.

File vim/bundle/vim-coffee-script/Todo.md

+- Don't highlight bad operator combinations

File vim/bundle/vim-coffee-script/after/syntax/haml.vim

+" 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*\):coffee\z(script\)*\s*$" end="^\%(\z1 \| *$\)\@!" contains=@hamlCoffeeScript,hamlInterpolation keepend

File vim/bundle/vim-coffee-script/after/syntax/html.vim

+" 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

File vim/bundle/vim-coffee-script/compiler/coffee.vim

+" 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
+
+" Path to CoffeeScript compiler
+if !exists('coffee_compiler')
+  let coffee_compiler = 'coffee'
+endif
+
+if exists('coffee_make_compiler')
+  echohl WarningMsg
+    echom '`coffee_make_compiler` is deprecated: use `coffee_compiler` instead'
+  echohl None
+
+  let coffee_compiler = coffee_make_compiler
+endif
+
+" 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 g:coffee_compiler . ' -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

File vim/bundle/vim-coffee-script/doc/coffee-script.txt

+*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
+|compiler-coffee-script|			Compiler
+
+{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 [!] 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.
+
+						*:CoffeeLint*
+:[range]CoffeeLint[!] {opts}
+                        Run {coffeelint} on the current file and add any
+                        errors to the quickfix list. The first error is jumped
+                        to if [!] isn't given. Options in
+                        |g:coffee_lint_options| and {opts} are passed along to
+                        {coffeelint}. Although the whole file is linted, if a
+                        [range] is given, only errors within those lines will
+                        be considered.
+
+						*: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_compiler*
+Set the path to the compiler used by |CoffeeMake| and |CoffeeCompile| (it's
+{coffee} by default.)
+>
+	let coffee_compiler = '/usr/bin/coffee'
+<
+						*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
+<
+						*g:coffee_linter*
+Set the path to the {coffeelint} executable (it's {coffeelint} by default.)
+>
+	let coffee_linter = '/usr/bin/coffeelint'
+<
+						*g:coffee_lint_options*
+Set default options |CoffeeLint| should pass to {coffeelint}.
+>
+	let coffee_lint_options = '-f lint.json'
+<
+
+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 2012 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:

File vim/bundle/vim-coffee-script/doc/tags

+:CoffeeCompile	coffee-script.txt	/*:CoffeeCompile*
+:CoffeeLint	coffee-script.txt	/*:CoffeeLint*
+:CoffeeMake	coffee-script.txt	/*:CoffeeMake*
+:CoffeeRun	coffee-script.txt	/*:CoffeeRun*
+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*
+ft-coffee-script-syntax	coffee-script.txt	/*ft-coffee-script-syntax*
+g:coffee_compile_vert	coffee-script.txt	/*g:coffee_compile_vert*
+g:coffee_compiler	coffee-script.txt	/*g:coffee_compiler*
+g:coffee_lint_options	coffee-script.txt	/*g:coffee_lint_options*
+g:coffee_linter	coffee-script.txt	/*g:coffee_linter*
+g:coffee_make_options	coffee-script.txt	/*g:coffee_make_options*

File vim/bundle/vim-coffee-script/ftdetect/coffee.vim

+" 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,*.ck set filetype=coffee
+autocmd BufNewFile,BufRead *.ck set filetype=coffee
+
+function! s:DetectCoffee()
+    if getline(1) =~ '^#!.*\<coffee\>'
+        set filetype=coffee
+    endif
+endfunction
+
+autocmd BufNewFile,BufRead * call s:DetectCoffee()

File vim/bundle/vim-coffee-script/ftdetect/eco.vim

+autocmd BufNewFile,BufRead *.eco set filetype=eco

File vim/bundle/vim-coffee-script/ftplugin/coffee.vim

+" 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
+
+" Check here too in case the compiler above isn't loaded.
+if !exists('coffee_compiler')
+  let coffee_compiler = 'coffee'
+endif
+
+" Path to coffeelint executable
+if !exists('coffee_linter')
+  let coffee_linter = 'coffeelint'
+endif
+
+" Options passed to CoffeeLint
+if !exists('coffee_lint_options')
+  let coffee_lint_options = ''
+endif
+
+" Reset the CoffeeCompile variables for the current buffer.
+function! s:CoffeeCompileResetVars()
+  " Compiled output buffer
+  let b:coffee_compile_buf = -1
+  let b:coffee_compile_pos = []
+
+  " If CoffeeCompile is watching a buffer
+  let b:coffee_compile_watch = 0
+endfunction
+
+" Clean things up in the source buffer.
+function! s:CoffeeCompileClose()
+  exec bufwinnr(b:coffee_compile_src_buf) 'wincmd w'
+  silent! autocmd! CoffeeCompileAuWatch * <buffer>
+  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")
+
+  " Move to the CoffeeCompile buffer.
+  exec bufwinnr(b:coffee_compile_buf) 'wincmd w'
+
+  " Coffee doesn't like empty input.
+  if !len(input)
+    return
+  endif
+
+  " Compile input.
+  let output = system(g:coffee_compiler . ' -scb 2>&1', input)
+
+  " Be sure we're in the CoffeeCompile buffer before overwriting.
+  if exists('b:coffee_compile_buf')
+    echoerr 'CoffeeCompile buffers are messed up'
+    return
+  endif
+
+  " 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
+
+  call setpos('.', b:coffee_compile_pos)
+endfunction
+
+" Update the CoffeeCompile buffer with the whole source buffer.
+function! s:CoffeeCompileWatchUpdate()
+  call s:CoffeeCompileUpdate(1, '$')
+  exec bufwinnr(b:coffee_compile_src_buf) 'wincmd w'
+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)
+  if !executable(g:coffee_compiler)
+    echoerr "Can't find CoffeeScript compiler `" . g:coffee_compiler . "`"
+    return
+  endif
+
+  " If in the CoffeeCompile buffer, switch back to the source buffer and
+  " continue.
+  if !exists('b:coffee_compile_buf')
+    exec bufwinnr(b:coffee_compile_src_buf) 'wincmd w'
+  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 * <buffer>
+
+  " If just unwatching, don't compile.
+  if unwatch
+    let b:coffee_compile_watch = 0
+    return
+  endif
+
+  if watch
+    let b:coffee_compile_watch = 1
+  endif
+
+  " Build the CoffeeCompile buffer if it doesn't exist.
+  if bufwinnr(b:coffee_compile_buf) == -1
+    let src_buf = bufnr('%')
+    let src_win = bufwinnr(src_buf)
+
+    " Create the new window and resize it.
+    if vert
+      let width = size ? size : winwidth(src_win) / 2
+
+      belowright 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])
+
+      belowright new
+      exec 'resize' height
+    endif
+
+    " We're now in the scratch buffer, so set it up.
+    setlocal bufhidden=wipe buftype=nofile
+    setlocal nobuflisted nomodifiable noswapfile nowrap
+
+    autocmd BufWipeout <buffer> call s:CoffeeCompileClose()
+    " Save the cursor when leaving the CoffeeCompile buffer.
+    autocmd BufLeave <buffer> let b:coffee_compile_pos = getpos('.')
+
+    nnoremap <buffer> <silent> q :hide<CR>
+
+    let b:coffee_compile_src_buf = src_buf
+    let buf = bufnr('%')
+
+    " Go back to the source buffer and set it up.
+    exec bufwinnr(b:coffee_compile_src_buf) 'wincmd w'
+    let b:coffee_compile_buf = buf
+  endif
+
+  if b: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
+
+" Run coffeelint on a file, and add any errors between @startline and @endline
+" to the quickfix list.
+function! s:CoffeeLint(startline, endline, bang, args)
+  if !executable(g:coffee_linter)
+    echoerr "Can't find CoffeeScript linter `" . g:coffee_linter . "`"
+    return
+  endif
+
+  let filename = expand('%')
+
+  if !len(filename)
+    echoerr 'CoffeeLint must be ran on a saved file'
+    return
+  endif
+
+  let lines = split(system(g:coffee_linter . ' --csv ' . g:coffee_lint_options .
+  \                        ' ' . a:args . ' ' . filename . ' 2>&1'), '\n')
+  let qflist = []
+
+  for line in lines
+    let match = matchlist(line, '\f\+,\(\d\+\),error,\(.\+\)')
+
+    " Ignore invalid lines.
+    if !len(match)
+      continue
+    endif
+
+    let lnum = str2nr(match[1])
+
+    " Don't add the error if it's not in the range.
+    if lnum < a:startline || lnum > a:endline
+      continue
+    endif
+
+    let text = match[2]
+
+    call add(qflist, {'bufnr': bufnr('%'), 'lnum': lnum, 'text': text})
+  endfor
+
+  call setqflist(qflist, 'r')
+
+  " Don't jump if there's a bang.
+  if !len(a:bang)
+    silent! cc 1
+  endif
+endfunction
+
+" Don't overwrite the CoffeeCompile variables.
+if !exists('b: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
+" Run coffeelint on the file.
+command! -range=% -bang -bar -nargs=* CoffeeLint
+\        call s:CoffeeLint(<line1>, <line2>, '<bang>', <q-args>)

File vim/bundle/vim-coffee-script/indent/coffee.vim

+" 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
+
+" 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
+
+" Check if a match should be skipped.
+function! s:ShouldSkip(startlinenum, linenum, col)
+  " Skip if in a comment or string.
+  if s:IsCommentOrString(a:linenum, a:col)
+    return 1
+  endif
+
+  " Skip if a single line statement that isn't adjacent.
+  if s:SmartSearch(a:linenum, '\<then\>') && a:startlinenum - a:linenum > 1
+    return 1
+  endif
+
+  " Skip if a postfix condition.
+  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
+    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)
+  call cursor(a:linenum, 0)
+
+  " Current column
+  let cur = 0
+  " Last column in the line
+  let end = col('$') - 1
+
+  while cur != end
+    call cursor(0, cur + 1)
+    let [_, cur] = searchpos('#', 'cn', a:linenum)
+
+    if !cur
+      break
+    endif
+
+    if s:IsComment(a:linenum, cur)
+      return cur
+    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! GetCoffeeIndent(curlinenum)
+  " Don't do anything if on the first line.
+  if a:curlinenum == 1
+    return -1
+  endif
+
+  let prevlinenum = a:curlinenum - 1
+
+  " If continuing a comment, keep the indent level.
+  if s:IsCommentLine(prevlinenum)
+    return indent(prevlinenum)
+  endif
+
+  let prevlinenum = s:GetPrevNormalLine(a:curlinenum)
+
+  " Don't do anything if there's no code before.
+  if !prevlinenum
+    return -1
+  endif
+
+  " Indent based on the current line.
+  let curline = s:GetTrimmedLine(a:curlinenum)
+
+  " Try to find a 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
+      let linenum = s:GetPrevNormalLine(linenum)
+
+      if getline(linenum) =~ '^\s*when\>'
+        return indent(linenum)
+      endif
+    endwhile
+
+    return -1
+  endif
+
+  " Indent based on the previous line.
+  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, there can't be others before
+    " it.
+    if !prevprevlinenum
+      return previndent + &shiftwidth
+    endif
+
+    let prevprevline = s:GetTrimmedLine(prevprevlinenum)
+
+    " Only indent after the first continuation.