Split vim projects into separate repos. vim-stuff tip
authorMahlon E. Smith <mahlon@martini.nu>
Sat, 16 Jan 2016 11:31:53 -0800
branchvim-stuff
changeset 29 a0e6ddfadf82
parent 28 2b198f0a86fe
Split vim projects into separate repos.
Makefile
build.vim
colorschemes/deveiate.vim
doc/specky.txt
ftdetect/rspec.vim
ftplugin/rspec.vim
glimpse/Makefile
glimpse/build.vim
glimpse/doc/glimpse.txt
glimpse/plugin/glimpse.vim
hgrev/Makefile
hgrev/build.vim
hgrev/doc/hgrev.txt
hgrev/plugin/hgrev.vim
plugin/specky.vim
ruby/specky_formatter.rb
snippets/rspec.snippets
specky/Makefile
specky/build.vim
specky/doc/specky.txt
specky/ftdetect/rspec.vim
specky/ftplugin/rspec.vim
specky/plugin/specky.vim
specky/ruby/specky_formatter.rb
specky/snippets/rspec.snippets
specky/syntax/rdoc.vim
specky/syntax/rspec.vim
specky/syntax/specrun.vim
specky/syntax/specrun1.vim
syntax/bird.vim
syntax/rdoc.vim
syntax/rspec.vim
syntax/specrun.vim
syntax/specrun1.vim
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,23 @@
+PLUGIN = specky
+
+SOURCE =  syntax/rdoc.vim
+SOURCE += syntax/specrun.vim
+SOURCE += syntax/specrun1.vim
+SOURCE += syntax/rspec.vim
+SOURCE += ftdetect/rspec.vim
+SOURCE += ftplugin/rspec.vim
+SOURCE += doc/specky.txt
+SOURCE += plugin/specky.vim
+SOURCE += snippets/rspec.snippets
+SOURCE += ruby/specky_formatter.rb
+
+
+${PLUGIN}.vba: ${SOURCE}
+	- vim --cmd 'let g:plugin_name="${PLUGIN}"' -S build.vim -cq\!
+	gzip ${PLUGIN}.vba
+
+install:
+	rsync -Rv ${SOURCE} ${HOME}/.vim/
+
+clean:
+	rm ${PLUGIN}.vba.gz
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build.vim	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,5 @@
+let g:vimball_home="."
+e Makefile
+v/^SOURCE/d
+%s/^SOURCE\s\++\?=\s\+//
+execute '%MkVimball!' . g:plugin_name
--- a/colorschemes/deveiate.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-"
-" Vim color theme: DevEiate
-"
-" Gvim color definition file, based loosely on Michael Granger's
-" eye-pleasing theme for Textmate of the same name.
-"       Mahlon E. Smith <mahlon@martini.nu>
-"       Michael Granger <ged@faeriemud.org>
-"
-" Drop this into your ~/.vim/colors directory, then load it via
-"       :colorscheme deveiate
-"
-" $Id$
-
-
-" ----------------------------------------
-" Color definition reference
-" ----------------------------------------
-" :help group-name
-" :help highlight-groups
-" :help cterm-colors
-
-set background=dark
-highlight clear
-let g:colors_name="deveiate"
-
-" ----------------------------------------
-" highlight groups
-" ----------------------------------------
-highlight Normal guifg=#f6dfb2 guibg=#00000f
-highlight LineNr guifg=#333333
-highlight Cursor guibg=yellow guifg=NONE
-highlight CursorLine guibg=#171520
-highlight Search guibg=#001632 guifg=NONE
-highlight Visual guibg=#001632 guifg=NONE
-highlight VisualNOS guibg=#001632 guifg=NONE
-highlight Question guifg=yellow
-highlight StatusLine guibg=#d4d2cb guifg=#292087
-highlight StatusLineNC guibg=#8372be guifg=#22115c
-highlight TabLine guibg=black guifg=#333333
-highlight TabLineSel guibg=#333333 guifg=#f8f8f8
-highlight TabLineFill guifg=black
-highlight WildMenu guifg=yellow guibg=#22115c
-highlight Pmenu guibg=black guifg=#da8d53
-highlight PmenuSel guibg=black guifg=#76a3d7
-highlight PmenuSbar guibg=black
-highlight PmenuThumb guibg=black guifg=#333333
-highlight Folded guifg=#8b98ab guibg=black
-highlight FoldColumn guifg=#8b98ab guibg=black
-highlight VertSplit guifg=black guibg=#333333
-highlight DiffAdd guifg=#f8f8f8 guibg=#253b22
-highlight DiffChange guifg=#f8f8f8 guibg=#4a410d
-highlight DiffDelete guifg=#f8f8f8 guibg=#420e09
-highlight DiffText guifg=white guibg=#7d6f20
-highlight NonText guifg=#222222
-
-" ----------------------------------------
-" syntax highlighting groups
-" ----------------------------------------
-highlight Comment guifg=#a82419
-highlight Constant guifg=#76a3d7
-highlight Function guifg=#9b859d
-highlight String guifg=#da8d53
-highlight Special guifg=#da8d53
-highlight SpecialKey guifg=#222222
-highlight PreProc gui=bold guifg=#00cbcd
-highlight Identifier guifg=#9bda8b
-highlight Number guifg=#9bda8b
-highlight Float guifg=#9bda8b
-highlight Statement guifg=#00cbcd
-highlight todo guibg=NONE guifg=yellow
-highlight MatchParen guifg=yellow guibg=NONE
-
-
-" ----------------------------------------
-" ruby specific syntax highlighting
-" ----------------------------------------
-highlight rubyConstant guifg=#76a3d7
-highlight rubyInstanceVariable guifg=#c2eaf4
-highlight rubyClassVariable guifg=#c2eaf4
-highlight rubySymbol guifg=#9bda8b
-highlight rubyEscape guifg=#ddf2a4
-highlight rubyInterpolation guifg=#ddf2a4
-highlight rubyClass guifg=#c3adc5
-highlight rubyPseudoVariable guifg=#9bda8b
-highlight rubyOperator guifg=#00cbcd
-
-" ----------------------------------------
-" other misc colors
-" ----------------------------------------
-highlight MyTagListFileName guifg=yellow guibg=NONE
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/specky.txt	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,358 @@
+*specky.txt* Last change: $Id$
+
+                VIM REFERENCE MANUAL    by Mahlon E. Smith
+
+
+                                  specky!
+
+A Plugin for testing Ruby code with RSpec -- and more                 *specky*
+==============================================================================
+CONTENTS                                                      *SpeckyContents*
+
+    1) Intro........................................|SpeckyIntro|
+    2) Functionality................................|SpeckyFunctionality|
+    3) Enabling Specky..............................|SpeckyInstallation|
+    4) Configuration................................|SpeckyOptions|
+        4.1) Create text banners....................|g:speckyBannerKey|
+        4.2) Cycling quote styles...................|g:speckyQuoteSwitcherKey|
+        4.3) Display ruby documentation.............|g:speckyRunRdocKey|
+        4.4) Toggle editing between spec and code...|g:speckySpecSwitcherKey|
+        4.5) Run specs for the current buffer.......|g:speckyRunSpecKey|
+        4.6) Modify the default spec command........|g:speckyRunSpecCmd|
+        4.7) Modify the default rdoc command........|g:speckyRunRdocCmd|
+        4.8) Alter new window behavior..............|g:speckyWindowType|
+        4.9) Running older rspec (1.x) .............|g:speckySpecVersion|
+    5) Author.......................................|SpeckyAuthor|
+    6) License......................................|SpeckyLicense|
+
+
+
+==============================================================================
+1. INTRO                                                         *SpeckyIntro*
+
+Specky is primarily a small collection of functions to help make behavioral
+testing streamlined and easy when working with ruby and rspec.  Specky
+supports rspec 2.x by default, and is backwards compatible with rspec 1.x.
+
+Specky secondarily includes a couple of conveniences to make your everyday
+programming tasks smooooth and pleasurable.
+
+
+==============================================================================
+2. FUNCTIONALITY                                         *SpeckyFunctionality*
+
+Okay then, what does it do?
+
+By default?  Nothing but syntax highlighting unless you are comfortable using
+the menus.  I decided the easiest way to cherry pick the functionality that
+you'd like was to enable them via key bindings.  By doing this, Specky won't
+make assumptions about your current environment, and won't stomp on anything
+you don't want it to.
+
+    Specky won't do -anything- with your environment until you enable ~
+    the key bindings!! ~
+
+After you've configured your bindings, here are some of the things you can
+now do with a single key stroke:
+>
+    - Switch back and forth from code to testing spec 
+
+    - Run the spec, with results going to a new, syntax highlighted buffer 
+
+    - Jump quickly to spec failures and failure detail 
+        - 'e' and 'r' to move back and forth on each failed assertion, 
+        - 'E' to jump details for it. 
+        - '<C-e>' to "forget" the currently selected failed assertion
+        - 'q' to close the spec output buffer. 
+
+    - View rdoc of the word under the cursor
+
+    - Dynamically switch string types for the word under the cursor
+      (double quoted, quoted, symbol)
+
+    - Make lovely and quick comment banners for ruby code.
+
+Specky also includes a "snippets" file that can be used with the Snipmate
+plugin by Michael Sanders <msanders42+vim@gmail.com>. (Minimum version 0.74.)
+
+	http://www.vim.org/scripts/script.php?script_id=2540
+
+==============================================================================
+3. ENABLING-SPECKY                                        *SpeckyInstallation*
+
+Getting Specky to work should be a fairly trivial process.  Specky now
+uses a custom rspec formatter to function reliably, and it needs to know
+where that lives on your system.
+
+If you installed Specky from Vimball, it is likely found at:
+
+	~/.vim/ruby/specky_formatter.rb ~
+
+Otherwise, you'll need to locate it, and tell rspec to use it in one of two
+ways.
+
+	1) Set the 'g:speckyRunSpecCmd' variable explicitly:
+
+		let g:speckyRunSpecCmd = "rspec -r ~/.vim/ruby/specky_formatter.rb -f SpeckyFormatter" ~
+
+	2) or, leave 'g:speckyRunSpecCmd' at its default value, and instead use
+	   an '.rspec' settings file in the root directory of the the project
+	   you're working in.  I find this method much more flexible -- the
+	   '.rspec' file can be carried with your project, and customized to
+	   include additional bits like custom $LOAD_PATH injections, etc.
+	   Here's what mine usually looks like: >
+
+		-r loadpath
+		-r ~/.vim/bundle/specky/ruby/specky_formatter
+		-f SpeckyFormatter
+
+	You can also use both of these methods, and use the
+	'SpeckyConsoleFormatter' class from your .rspec file, if it suits
+	your fancy.
+
+
+After that is taken care of, then just set up your keybindings in your
+.vimrc.  Here's what my config looks like. >
+
+    let g:speckyBannerKey        = "<C-S>b"
+    let g:speckyQuoteSwitcherKey = "<C-S>'"
+    let g:speckyRunRdocKey       = "<C-S>r"
+    let g:speckySpecSwitcherKey  = "<C-S>x"
+    let g:speckyRunSpecKey       = "<C-S>s"
+    let g:speckyRunRdocCmd       = "fri -L -f plain"
+    let g:speckyWindowType       = 2
+
+With these bindings, all Specky commands start with <ctrl-s> ("s" for
+Specky!), followed by a mnemonic function to run:
+
+    b ----> Banner creation ~
+    ' ----> Quote cycling ~
+    r ----> run Rdoc ~
+    x ----> code and spec eXchange ~
+    s ----> run rSpec ~
+
+Of course, <ctrl-s> is a "suspend" signal for most terminals, so these
+bindings are meant for a |gui| environment, such as gvim.  Your mileage (and
+tastes) will doubtlessly vary.  Do what you will.  I won't judge you.
+
+
+==============================================================================
+4. CONFIGURATION-OPTIONS                                       *SpeckyOptions*
+
+Here are all of the available configuration options.
+
+Please note that you must set binding variables:
+
+    |g:speckyBannerKey|
+    |g:speckyQuoteSwitcherKey|
+    |g:speckyRunRdocKey|
+    |g:speckySpecSwitcherKey|
+    |g:speckyRunSpecKey|
+
+...in order to enable the respective Specky functionality.  See
+|SpeckyInstallation| for details. Any other options are entirely optional.
+Put these into your |vimrc|, or wherever else you enjoy storing this kind of
+stuff.
+
+
+------------------------------------------------------------------------------
+4.1                                                        *g:speckyBannerKey*
+
+Setting this binding enables comment banner creation.
+
+This is purely a convenience routine, and a stylistic one at that.  I prefer
+large advertising of what "area" of code you are in, along with other
+miscellaneous labels for humans to read.  If this isn't how you roll, then by
+all means, don't enable this binding!  :)
+
+As an example -- you can just type:
+
+	instance methods ~
+
+Then hit the keystroke.  It will magically turn into: >
+
+  ########################################################################
+  ### I N S T A N C E   M E T H O D S
+  ########################################################################
+
+With all those saved extra keystrokes this might provide you per banner over
+the years, your RSI-free hands will thank you.  And the total time savings!!
+Oh man, what are you going to DO with all of that extra free time?
+The possibilities are staggering.
+
+
+------------------------------------------------------------------------------
+4.2                                                 *g:speckyQuoteSwitcherKey*
+
+Setting this binding enables quote "style switching".
+
+If you aren't in ruby mode, this just changes the word under the cursor
+back and forth from double quoting to single quoting.
+
+    string -> "string" -> 'string' -> "string" ... ~
+
+In ruby mode, symbols are also put into the rotation.
+
+    "string" -> 'string' -> :string -> "string" ... ~
+
+Note that quote cycling only works with a |word|.
+
+
+------------------------------------------------------------------------------
+4.3                                                       *g:speckyRunRdocKey*
+
+Setting this enables the display of rdoc documentation for the current
+word under the cursor.  For lookups with multiple matches, you can continue
+using this binding to "drill down" to the desired documentation.
+         
+
+------------------------------------------------------------------------------
+4.4                                                  *g:speckySpecSwitcherKey*
+
+Setting this enables spec to code switching, and visa versa.
+
+Switching uses path searching instead of reliance on directory structure in
+your project.  The idea here is that you'd |:chdir| into your project
+directory.  Spec files just need to end in '_spec.rb', which is a common
+convention.
+
+    aRubyClass.rb ---> aRubyClass_spec.rb~
+ 
+Because it leaves respective buffers open, you can essentially think of this
+as a quick toggle between code and tests.
+
+
+------------------------------------------------------------------------------
+4.5                                                       *g:speckyRunSpecKey*
+
+Setting this variable runs "rspec" on the current buffer.
+
+All output is sent to a syntax highlighted scratch buffer. This new window is
+re-used for each spec run.  You can quickly "jump" to assertion failures and
+their associated details with the following keys:
+
+        e and r ~
+            Move forward and backward through the failed assertions.
+
+        E~
+            While on a failure line, jump to the details of the failure.
+
+        <C-e> ~
+            "Forget" the last found failed assertion, and start over at the
+            beginning of the list. (ie, the next 'e' keystroke will select
+            error #1.)
+
+        q ~
+            Closes the spec output buffer. 
+
+
+Normally, you'd only want to perform this keystroke while in a spec file
+buffer.  If Specky thinks you are in code, rather than a buffer (as indicated
+by the lack of a "_spec.rb" file naming convention) then it will attempt to
+switch to the spec before running the command.
+
+
+------------------------------------------------------------------------------
+4.6                                                       *g:speckyRunSpecCmd*
+
+This is the program, with flags, that the current file is sent to when
+executing the |g:speckyRunSpecKey| keybinding.
+
+A common addition is to include an "-r" flag for sucking in local libraries
+necessary for testing your project.  In fact, this is required to use the 
+rspec formatter supplied by Specky.  See |SpeckyInstallation| for more info.
+
+    Default: ~
+        rspec
+
+
+------------------------------------------------------------------------------
+4.7                                                       *g:speckyRunRdocCmd*
+
+If you prefer an rdoc display program other than "ri", you can set it
+with this variable.  "fri -L -f plain" is always a nice choice, for example.
+
+    Default: ~
+        ri
+
+
+------------------------------------------------------------------------------
+4.8                                                       *g:speckyWindowType*
+
+For both spec and rdoc commands, this variable controls the behavior of the
+newly generated window.
+
+	Default: ~
+		0
+		
+	0 ~
+		Create a new tabbed window
+	1 ~
+		Split the current window horizontally
+	2 ~
+		Split the current window vertically
+
+
+------------------------------------------------------------------------------
+4.9                                                      *g:speckySpecVersion*
+
+Specky should work out of the box with rspec 2.x.  If you'd like to use rspec
+1.x instead, you can do so with the following Vim settings: >
+
+    let g:speckySpecVersion = 1
+	let g:speckyRunRdocCmd  = "spec -fs" 
+
+If you have both rspec 1.x and 2.x installed at the same time, you need to 
+be explicit with what version you are executing: >
+
+	let g:speckyRunRdocCmd  = "spec _1.3.0_ -fs" 
+
+
+==============================================================================
+5. AUTHOR                                                       *SpeckyAuthor*
+
+
+Specky was written by Mahlon E. Smith.
+
+    mahlon@martini.nu ~
+    http://www.martini.nu/ 
+
+
+
+==============================================================================
+6. LICENSE                                                     *SpeckyLicense*
+
+
+Specky is distributed under the BSD license.
+    http://www.opensource.org/licenses/bsd-license.php
+>
+    Copyright (c) 2008-2010, Mahlon E. Smith <mahlon@martini.nu>
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are
+    met:
+
+        * Redistributions of source code must retain the above copyright
+          notice, this list of conditions and the following disclaimer.
+
+        * Redistributions in binary form must reproduce the above copyright
+          notice, this list of conditions and the following disclaimer in the
+          documentation and/or other materials provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+    TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+vim: set noet nosta sw=4 ts=4 ft=help :
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ftdetect/rspec.vim	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,1 @@
+au BufRead,BufNewFile *_spec.rb set filetype=rspec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ftplugin/rspec.vim	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,7 @@
+if exists("b:did_ftplugin")
+    finish
+endif
+
+" Behave just like Ruby
+runtime! ftplugin/ruby.vim
+
--- a/glimpse/Makefile	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-PLUGIN = glimpse
-
-SOURCE  = doc/glimpse.txt
-SOURCE += plugin/glimpse.vim
-
-${PLUGIN}.vba: ${SOURCE}
-	- vim --cmd 'let g:plugin_name="${PLUGIN}"' -S build.vim -cq\!
-	gzip ${PLUGIN}.vba
-
-install:
-	rsync -Rv ${SOURCE} ${HOME}/.vim/
-
-clean:
-	rm ${PLUGIN}.vba.gz
--- a/glimpse/build.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-let g:vimball_home="."
-e Makefile
-v/^SOURCE/d
-%s/^SOURCE\s\++\?=\s\+//
-execute '%MkVimball!' . g:plugin_name
--- a/glimpse/doc/glimpse.txt	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
-*glimpse.txt* Last change: $Id$
-
-                VIM REFERENCE MANUAL    by Mahlon E. Smith
-
-
-                                  VimGlimpse
-
-A basic Glimpse interface for Vim                                     *glimpse*
-==============================================================================
-CONTENTS                                                      *GlimpseContents*
-
-
-    1) Intro........................................|GlimpseIntro|
-    2) Functionality................................|GlimpseFunctionality|
-    3) Adjusting Behavior...........................|GlimpseVimrcExample|
-    4) Configuration................................|GlimpseOptions|
-        4.1) Glimpse keybinding.....................|g:glimpseKey|
-        4.2) GlimpseIndex keybinding................|g:glimpseindexKey|
-		4.3) Changing the results window size.......|g:glimpseWindowResultSize|
-		4.4) Altering default flags to glimpse......|g:glimpseFlags|
-		4.5) Altering flags to glimpseindex.........|g:glimpseindexFlags|
-    5) Author.......................................|GlimpseAuthor|
-    6) License......................................|GlimpseLicense|
-
-
-==============================================================================
-1. INTRO                                                         *GlimpseIntro*
-
-Glimpse is a powerful indexing and query system, free for personal use.
-	http://www.webglimpse.net
-
-VimGlimpse is a basic Glimpse interface within Vim, based on a Vim Tip from
-Jean-Rene David. 
-	http://vim.wikia.com/wiki/Use_glimpse_from_within_Vim
-
-VimGlimpse retains normal Vim |:grep| functionality, and provides
-additional Glimpse features outside of what |grepprg| can allow.  By
-default, VimGlimpse only searches within your current working directory,
-making it ideal for near instantaneous searches across a project.
-
-
-==============================================================================
-2. FUNCTIONALITY                                         *GlimpseFunctionality*
-
-Glimpse installs two new global commands, *Glimpse* and *GlimpseIndex* .
-
-
-SEARCHING ~
-------------------------------------------------------------------------------
-
-If you set the |g:glimpseKey|variable to something, you can search for
-the word under the cursor with a keystroke.  Otherwise, just execute the
-|:Glimpse| command.  Here are some examples (shamelessly stolen from the
-glimpse man page):
-
-    :Glimpse needle haystack.h$~
-
-		Finds all needles in all haystack.h's files.
-
-	:let g:glimpseFlags = "-iny -2"	~
-	:Glimpse Anestesiology html ~
-
-		Outputs all occurrences of  Anestesiology  with  two  errors  in
-		files with html somewhere in their full name.
-
-	:Glimpse windsurfing;Arizona mail;1993 ~
-
-		Finds  all lines containing windsurfing and Arizona in all files
-		having `mail' and '1993' somewhere in their full name.
-
-Results are placed into the |quickfix| window.  Additionally, the 'q' key is
-bound to the window so you can close it again quickly. 
-
-
-INDEXING ~
-------------------------------------------------------------------------------
-
-If you set the |g:glimpseindexKey|variable to something, you can reindex
-your current working directory with a keystroke.  Otherwise, just
-you can just manually execute the |:GlimpseIndex| command.
-
-Results from an index are placed into the location window.  You can view them
-via |:lopen|.
-
-If you are reindexing a large directory, this could take a few moments.
-The defaults are to produce an incremental merge -- so it should be
-fairly fast, but it's a good idea to ensure your indexes exist prior to
-running this command.
-
-If you've just installed glimpse, a great way to start playing with it
-immediately is to let it index your entire home directory (from the shell):
-
-	% glimpseindex -M 10 -B -o ~ ~
-
-If you've deleted a lot of files, re-running this command will free up space
-in your indexes.  I just run it nightly from cron.
-
-
-==============================================================================
-3. ADJUSTING-BEHAVIOR                                     *GlimpseVimrcExample*
-
-
-Here's what my config looks like. >
-
-	let g:glimpseFlags = "-winy1"
-	let g:glimpseKey = "<Leader>g"
-	let g:glimpseindexKey = "<Leader>G"
-
-
-With these settings, I can find the full word under the cursor with
-<Leader>g, in a case insensitive 1 character fuzzy match search.
-
-With <Leader>G, I can quickly re-index my current working directory, so
-changes to my files are reflected in search results.
-
-
-==============================================================================
-4. CONFIGURATION-OPTIONS                                       *GlimpseOptions*
-
-Here are all of the available configuration options.
-
-------------------------------------------------------------------------------
-4.1                                                              *g:glimpseKey*
-
-Setting this binding enables immediate searching for the |word| that is
-currently under the cursor.  There is no default. >
-
-	let g:glimpseKey = "<Leader>g"
-
-------------------------------------------------------------------------------
-4.2                                                         *g:glimpseindexKey*
-
-
-Setting this enables reindexing with a keystroke, rather than running the
-|GlimpseIndex| command manually.  There is no default. >
-
-	let g:glimpseindexKey = "<Leader>G"
-
-------------------------------------------------------------------------------
-4.3                                                 *g:glimpseWindowResultSize*
-
-Change the height of the results window.  The default is 15 lines. >
-
-	let g:glimpseWindowResultSize = 15
-
-------------------------------------------------------------------------------
-4.4                                                            *g:glimpseFlags*
-
-Alter the command line flags used when executing glimpse.  If you alter
-this, you should retain the '-n' flag, as the |quickfix| window relies
-on that for line positioning.  The default is: >
-
-	let g:glimpseFlags = "-iny"
-
-See the glimpse man page for all available options.  (I find -w, -i, and
--# to be the most immediately useful.)
-
-------------------------------------------------------------------------------
-4.5                                                       *g:glimpseindexFlags*
-
-Alter the command line flags used when executing glimpseindex.
-The default is: >
-
-	let g:glimpseindexFlags = '-M 10 -B -o'
-
-The '-f' flag with the current working directory is always appended to this
-flag list.
-
-==============================================================================
-5. AUTHOR                                                       *GlimpseAuthor*
-
-
-VimGlimpse was written by Mahlon E. Smith.
-
-    mahlon@martini.nu ~
-    http://www.martini.nu/ 
-
-
-
-==============================================================================
-6. LICENSE                                                     *GlimpseLicense*
-
-
-This Glimpse VIM plugin is distributed under the BSD license.
-    http://www.opensource.org/licenses/bsd-license.php
-
->
-    Copyright (c) 2009, Mahlon E. Smith <mahlon@martini.nu>
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are
-    met:
-
-        * Redistributions of source code must retain the above copyright
-          notice, this list of conditions and the following disclaimer.
-
-        * Redistributions in binary form must reproduce the above copyright
-          notice, this list of conditions and the following disclaimer in the
-          documentation and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-    TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-
-vim: set noet nosta sw=4 ts=4 ft=help :
-
--- a/glimpse/plugin/glimpse.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-" vim: set noet nosta sw=4 ts=4 fdm=marker :
-"
-" A basic Glimpse interface for Vim
-"
-" Based on a Vim Tip from Jean-Rene David.
-" http://vim.wikia.com/wiki/Use_glimpse_from_within_Vim
-"
-" Mahlon E. Smith <mahlon@martini.nu>
-" $Id$
-"
-" Here's a bash function that's nice too!
-" function g() { command glimpse -winO -F `pwd` $1 | sed 's|^`pwd`/||'; }
-"
-" And a tcsh alias, while we're at it!
-" alias g 'glimpse -winO -F `pwd` \!:1 | sed -e "s|^`pwd`/||"'
-"
-
-" Loaded check {{{
-if exists( 'g:glimpse_loaded' )
-    finish
-endif
-let g:glimpse_loaded = '$Rev$'
-
-" }}}
-" Hook up the functions to the user supplied key bindings. {{{
-"
-if exists( 'g:glimpseKey' )
-	execute 'map ' . g:glimpseKey . ' :call <SID>Glimpse()<CR>'
-endif
-
-if exists( 'g:glimpseindexKey' )
-	execute 'map ' . g:glimpseindexKey . ' :call <SID>GlimpseIndex()<CR>'
-endif
-
-" }}}
-" Defaults for misc settings {{{
-"
-if !exists( 'g:glimpseWindowResultSize' )
-	let g:glimpseWindowResultSize = 15
-endif
-
-if !exists( 'g:glimpseFlags' )
-	let g:glimpseFlags = "-iny"
-endif
-
-if !exists( 'g:glimpseindexFlags' )
-	let g:glimpseindexFlags = '-M 10 -B -o'
-endif
-
-if !exists( 'g:glimpseErrorFormat' )
-	let g:glimpseErrorFormat = '%f: %l: %m'
-endif
-
-
-"}}}
-" Commands {{{
-"
-command! -nargs=* Glimpse :call <SID>Glimpse( <f-args> )
-command! GlimpseIndex :call <SID>GlimpseIndex()
-
-
-"}}}
-" Glimpse( search_pattern, file_pattern ) {{{
-"
-" Run a glimpse search using a pattern from +search_pattern+ and an optional
-" +file_pattern+ to limit the breadth of the search.  Places results into the
-" quickfix window.
-"
-function! <SID>Glimpse( ... )
-
-	" parse command line opts
-	"
-	let l:search_pattern = expand("<cword>")
-	let l:file_pattern   = ''
-	if exists( 'a:1' )
-		let l:search_pattern = a:1
-	endif
-	if exists( 'a:2' )
-		let l:file_pattern = a:2
-	endif
-
-	" everything is based on the cwd so results are relevant to the
-	" current project.
-	"
-	let l:cwd = getcwd()
-
-	" save the original error format, we want to play nice with others.
-	"
-	let l:orig_errorformat = &errorformat
-	execute 'set errorformat=' . escape( g:glimpseErrorFormat, ' ' )
-
-	" execute the search.
-	"
-	let l:cmd = "glimpse " . g:glimpseFlags . " -F '" . l:cwd
-	if ( l:file_pattern != '' )
-		let l:cmd = l:cmd . ";" . l:file_pattern
-	endif
-	let l:cmd = l:cmd . "' '" . l:search_pattern . "'"
-
-	let l:result_list = split( system( l:cmd ), "\n" )
-
-	" no results, escape now
-	"
-	if ( empty(l:result_list) )
-		let l:no_match_msg = "No matches for '" . l:search_pattern . "'"
-		if ( l:file_pattern != '' )
-			let l:no_match_msg = l:no_match_msg . " in files matching '" . l:file_pattern . "'"
-		endif
-		call s:err( l:no_match_msg )
-		execute 'set errorformat=' . escape( l:orig_errorformat, ' ' )
-		return
-	endif
-
-	" populate the quickfix window.
-	"
-	let l:results = ''
-	for l:result in l:result_list
-		" 'pretty up' the glimpse output.
-		let l:result = substitute( l:result, ('^' . l:cwd . '/'), '', '' )
-		let l:result = substitute( l:result, '\(: \d\+:\)\s\+', '\=submatch(1) . " "', '' )
-
-		let l:results = l:results . l:result . "\n"
-	endfor
-	cgetexpr( l:results )
-	execute ':copen' . g:glimpseWindowResultSize
-
-	" quick close
-    nnoremap <silent> <buffer> q :ccl<CR>
-
-	" reset error format to the original
-	execute 'set errorformat=' . escape( l:orig_errorformat, ' ' )
-endfunction
-
-
-" }}}
-" GlimpseReindex() {{{
-"
-" Update local indexes for the current working directory.
-" Results of the index are placed into the location list. (:lopen to view.)
-"
-function! <SID>GlimpseIndex()
-	let l:cmd = 'glimpseindex ' . g:glimpseindexFlags . ' -f .'
-	let l:cwd = getcwd()
-	let $LC_ALL = 'C'
-	let l:index_output = system(l:cmd)
-	let l:index_exit = v:shell_error
-	call s:err( "Updated indexes for '" . l:cwd . "'" )
-	if l:index_exit != 0
-		call s:err( "Uh oh, " . l:cmd . " exited with " . l:index_exit. "!  Output follows:" )
-		call s:err( l:index_output )
-	endif
-endfunction
-
-
-" }}}
-" s:err( msg ) {{{
-"
-" Notify user in a consistent fashion.
-"
-function! s:err( msg )
-    echohl WarningMsg|echomsg 'glimpse: ' . a:msg|echohl None
-endfunction " }}}
-
--- a/hgrev/Makefile	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-PLUGIN = hgrev
-
-SOURCE =  plugin/hgrev.vim
-SOURCE += doc/hgrev.txt
-
-${PLUGIN}.vba: ${SOURCE}
-	- vim --cmd 'let g:plugin_name="${PLUGIN}"' -S build.vim -cq\!
-	gzip ${PLUGIN}.vba
-
-install:
-	rsync -Rv ${SOURCE} ${HOME}/.vim/
-
-clean:
-	rm ${PLUGIN}.vba.gz
--- a/hgrev/build.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-let g:vimball_home="."
-e Makefile
-%!grep ^SOURCE
-%s/^SOURCE\s\++\?=\s\+//
-execute '%MkVimball!' . g:plugin_name
--- a/hgrev/doc/hgrev.txt	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-*hgrev.txt* Last change: $Id$
-
-                VIM REFERENCE MANUAL    by Mahlon E. Smith
-
-
-                                   HGRev
-
-A simple plugin for showing the current buffer's HG revision           *HGRev*
-==============================================================================
-CONTENTS                                                       *HGRevContents*
-
-
-    1) Intro........................................|HGRevIntro|
-    2) Configuration................................|HGRevOptions|
-        2.1) Altering revision info shown...........|g:hgrevFlags|
-        2.2) Appending file status info.............|g:hgrevAddStatus|
-        2.3) Automatically updating status..........|g:hgrevAutoUpdate|
-        2.4) Changing non-repo buffer behavior......|g:hgrevNoRepoChar|
-    3) Author.......................................|HGRevAuthor|
-    4) License......................................|HGRevLicense|
-
-
-
-==============================================================================
-1. INTRO                                                          *HGRevIntro*
-
-HGRev is a small plugin that can find the current buffer's revision ID from a
-Mercurial repository.  For more information on Mercurial, see:
-
-	http://mercurial.selenic.com/
-
-It is intended for use in the |statusline|- here's an example to enable it:
-
-	set statusline=[r%{HGRev()}] ~
-
-HGRev exports the 'HGRev()' function (for use in the statusline), and a
-command called
->
-	:RefreshMercurialRev
-
-Which you can use to manually update the revision information for the current
-buffer.  If you've added HGRev() to your statusline, you'll see the file
-revision, branch, tags, and file status reflected -- if you used the
-statusline example above, you should see something like this:
-
-	[r192+ default tip M] ~
-
-The information displayed can be easily customized, and HGRev can also
-automatically update the status line on file changes.  (This behavior is
-disabled by default.)
-
-
-==============================================================================
-2. CONFIGURATION-OPTIONS                                        *HGRevOptions*
-
-Here are the available configuration options and their defaults:
->
-	let g:hgrevFlags = '-nbt'
-	let g:hgrevAddStatus = 1
-	let g:hgrevAutoUpdate = 0
-	let g:hgrevNoRepoChar = '-'
-
-
-------------------------------------------------------------------------------
-2.1                                                             *g:hgrevFlags*
-
-These are the flags passed directly to 'hg id'.  The flags "-nbt" are passed
-by default, which show a local rev id, branch, and tags.
-
-If you wanted to show the global rev hash (and nothing else) as an example,
-you can set this to:
->
-	let g:hgrevFlags = '-i'
-
-
-------------------------------------------------------------------------------
-2.2                                                         *g:hgrevAddStatus*
-
-This settings will append the current file status to the output, by running
-'hg stat'.  I find it useful, so it is enabled by default -- you can disable
-it like so:
->
-	let g:hgrevAddStatus = 0
->
-
-------------------------------------------------------------------------------
-2.3                                                        *g:hgrevAutoUpdate*
->
-When this option is enabled, some |autocmd-events| are added that
-automatically call :RefreshMercurialRev on file changes -- when a buffer is
-read, written to, or modified outside of Vim.  This is disabled by default, as
-the additional time needed (however small) to system() to hg for every
-read/write outweighs running :RefreshMercurialRev manually for my tastes.
-Yours tastes, of course, may vary, so you can enable it like so:
->
-	let g:hgrevAutoUpdate = 1
-
-Alternatively, you can leave it disabled, and add your own |autocmd| events
-for :RefreshMercurialRev to what works best for you.
-
-
-------------------------------------------------------------------------------
-2.4                                                        *g:hgrevNoRepoChar*
->
-If the current buffer doesn't seem to be a member of a Mercurial repository,
-HGRev() returns this character instead of a revision ID.
-
-Some examples:
->
-	let g:hgrevNoRepoChar = '-'    (default)
-	set statusline=[r%{HGRev()}]
-
-This will output something like '[r12+ default tip M]' for repo files,
-and '[r-]' for non-repo.
->
-	let g:hgrevNoRepoChar = ''
-	set statusline=%{HGRev()?'[r'.HGRev().']':''}
-
-This will output something like '[r512 default tip]' for repo files, and
-nothing at all for non-repo.
-
-
-==============================================================================
-3. AUTHOR                                                        *HGRevAuthor*
-
-HGRev was written by Mahlon E. Smith.
-
-    mahlon@martini.nu ~
-    http://www.martini.nu/ 
-
-
-
-==============================================================================
-4. LICENSE                                                      *HGRevLicense*
-
-HGRev is distributed under the BSD license.
-    http://www.opensource.org/licenses/bsd-license.php
->
-    Copyright (c) 2010-2012, Mahlon E. Smith <mahlon@martini.nu>
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are
-    met:
-
-        * Redistributions of source code must retain the above copyright
-          notice, this list of conditions and the following disclaimer.
-
-        * Redistributions in binary form must reproduce the above copyright
-          notice, this list of conditions and the following disclaimer in the
-          documentation and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-    TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-vim: set noet nosta sw=4 ts=4 ft=help :
--- a/hgrev/plugin/hgrev.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-" vim: set noet nosta sw=4 ts=4 fdm=marker :
-"
-" HGRev
-" Mahlon E. Smith <mahlon@martini.nu>
-" $Id$
-"
-" Simplistic file revision checker, meant for adding current revision
-" information to the statusbar, a la:
-"
-" 	set statusline=[r%{HGRev()}]
-"
-
-if exists( 'hgrev_loaded' )
-	finish
-endif
-let hgrev_loaded = '$Rev$'
-
-" }}}
-" Defaults for misc settings {{{
-"
-if !exists( 'g:hgrevFlags' )
-	let g:hgrevFlags = '-nbt'
-endif
-
-if !exists( 'g:hgrevAddStatus' )
-	let g:hgrevAddStatus = 1
-endif
-
-if !exists( 'g:hgrevAutoUpdate' )
-	let g:hgrevAutoUpdate = 0
-endif
-
-if !exists( 'g:hgrevNoRepoChar' )
-	let g:hgrevNoRepoChar = '-'
-endif
-
-
-
-"}}}
-" Commands {{{
-"
-command! RefreshMercurialRev :call <SID>RefreshMercurialRev()
-
-
-" HGRev() {{{
-" Return the current buffer rev id from the global dictionary.
-"
-function! HGRev()
-	if exists( 'g:hg_revs' )
-		let l:key = getcwd() . '/' . bufname('%')
-		return has_key(g:hg_revs, l:key) ? g:hg_revs[l:key] : g:hgrevNoRepoChar
-	else
-		call <SID>RefreshMercurialRev()
-		call HGRev()
-	endif
-endfunction
-
-
-" }}}
-" RefreshMercurialRev() {{{
-"
-" Locate the hgroot and fetch the current rev id, populating the global
-" dictionary.
-"
-function! <SID>RefreshMercurialRev()
-	if ! exists( 'g:hg_revs' )
-		let g:hg_revs = {}
-	endif
-
-	" Find the closest HG root for the buffer. 'hg root' won't do it, since
-	" it works off the cwd, and we need the nearest root from the filename.
-	"
-
-	" (we're unlikely to get lucky finding '.hg' in http:// or similar)
-	"
-	if matchstr(bufname('%'), "^[^:/]\\+://") != ''
-		return
-	endif
-
-	let l:searchpaths = split( expand('%:p:h'), '/' )
-	let l:dircount = len(l:searchpaths)
-	let l:root = ''
-	while l:dircount > 0
-		let l:root = '/' . join( l:searchpaths[0 : l:dircount], '/' )
-		if isdirectory( l:root . '/' . '.hg' )
-			break
-		endif
-		let l:dircount = l:dircount - 1
-	endwhile
-
-	if l:dircount == -1
-		return
-	endif
-
-	let l:key = getcwd() . '/' . bufname('%')
-
-	" Find the rev for the repo containing the current file buffer.
-	"
-	let l:cmd     = 'hg id ' . g:hgrevFlags . ' ' . l:root
-	let l:rev     = system( l:cmd )
-	let l:hg_exit = v:shell_error
-
-	if l:hg_exit == 0
-		let l:rev = substitute( l:rev, '\n', '', 'g' )
-		let g:hg_revs[ l:key ] = l:rev
-	endif
-
-	" Add file repo status.
-	"
-	if g:hgrevAddStatus == 1
-		let l:cmd     = 'hg stat ' . bufname('%')
-		let l:stat    = system( l:cmd )
-		let l:hg_exit = v:shell_error
-
-		if l:hg_exit == 0 && len(l:stat) > 0
-			let l:stat = split( l:stat, '\s\+' )[0]
-			let g:hg_revs[ l:key ] = g:hg_revs[ l:key ] . ' ' . l:stat
-		endif
-	endif
-
-	return
-endfunction
-"}}}
-
-
-" Refresh the rev for the current buffer on reads/writes.
-"
-if g:hgrevAutoUpdate == 1
-	autocmd BufReadPost          * call <SID>RefreshMercurialRev()
-	autocmd BufWritePost         * call <SID>RefreshMercurialRev()
-	autocmd FileChangedShellPost * call <SID>RefreshMercurialRev()
-endif
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugin/specky.vim	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,370 @@
+" vim: set noet nosta sw=4 ts=4 fdm=marker :
+"
+" Specky!
+" Mahlon E. Smith <mahlon@martini.nu>
+" $Id$
+"
+
+
+" Hook up the functions to the user supplied key bindings. {{{
+"
+if exists( 'g:speckySpecSwitcherKey' )
+	execute 'map ' . g:speckySpecSwitcherKey . ' :call <SID>SpecSwitcher()<CR>'
+"	map &g:speckySpecSwitcherKey <SID>SpecSwitcher()
+endif
+
+if exists( 'g:speckyQuoteSwitcherKey' )
+	execute 'map ' . g:speckyQuoteSwitcherKey . ' :call <SID>QuoteSwitcher()<CR>'
+endif
+
+if exists( 'g:speckyBannerKey' )
+	execute 'map ' . g:speckyBannerKey . ' :call <SID>MakeBanner()<CR>'
+endif
+
+if exists( 'g:speckyRunSpecKey' )
+	execute 'map ' . g:speckyRunSpecKey . ' :call <SID>RunSpec()<CR>'
+endif
+
+if exists( 'g:speckyRunRdocKey' )
+	execute 'map ' . g:speckyRunRdocKey . ' :call <SID>RunRdoc()<CR>'
+endif
+
+if exists( 'specky_loaded' )
+	finish
+endif
+let specky_loaded = '$Rev$'
+
+
+"}}}
+" Menu configuration {{{
+"
+let s:menuloc = '&Plugin.&specky'
+execute 'menu ' . s:menuloc . '.&Jump\ to\ code/spec :call <SID>SpecSwitcher()<CR>'
+execute 'menu ' . s:menuloc . '.Run\ &spec :call <SID>RunSpec()<CR>'
+execute 'menu ' . s:menuloc . '.&RDoc\ lookup :call <SID>RunRdoc()<CR>'
+execute 'menu ' . s:menuloc . '.Rotate\ &quote\ style :call <SID>QuoteSwitcher()<CR>'
+execute 'menu ' . s:menuloc . '.Make\ a\ &banner :call <SID>MakeBanner()<CR>'
+
+
+" }}}
+" SpecSwitcher() {{{
+"
+" When in ruby code or an rspec BDD file, try and search recursively through
+" the filesystem (within the current working directory) to find the
+" respectively matching file.  (code to spec, spec to code.)
+"
+" This operates under the assumption that you've used chdir() to put vim into
+" the top level directory of your project.
+"
+function! <SID>SpecSwitcher()
+
+	" If we aren't in a ruby or rspec file then we probably don't care
+	" too much about this function.
+	"
+	if &ft != 'ruby' && &ft != 'rspec'
+		call s:err( "Not currently in ruby or rspec mode." )
+		return
+	endif
+
+	" Ensure that we can always search recursively for files to open.
+	"
+	let l:orig_path = &path
+	set path=**
+
+	" Get the current buffer name, and determine if it is a spec file.
+	"
+	" /tmp/something/whatever/rubycode.rb ---> rubycode.rb
+	" A requisite of the specfiles is that they match to the class/code file,
+	" this emulates the eigenclass stuff, but doesn't require the same
+	" directory structures.
+	"
+	" rubycode.rb ---> rubycode_spec.rb
+	" 
+	let l:filename     = matchstr( bufname('%'), '[0-9A-Za-z_.-]*$' )
+	let l:is_spec_file = match( l:filename, '_spec.rb$' ) == -1 ? 0 : 1
+
+	if l:is_spec_file
+		let l:other_file = substitute( l:filename, '_spec\.rb$', '\.rb', '' )
+	else
+		let l:other_file = substitute( l:filename, '\.rb$', '_spec\.rb', '' )
+	endif
+
+	let l:bufnum = bufnr( l:other_file )
+	if l:bufnum == -1
+		" The file isn't currently open, so let's search for it.
+		execute 'find ' . l:other_file
+	else
+		" We've already got an open buffer with this file, just go to it.
+		execute 'buffer' . l:bufnum
+	endif
+
+	" Restore the original path.
+	execute 'set path=' . l:orig_path
+endfunction
+
+
+" }}}
+" QuoteSwitcher() {{{
+"
+" Wrap the word under the cursor in quotes.  If in ruby mode,
+" cycle between quoting styles and symbols.
+"
+" variable -> "variable" -> 'variable' -> :variable
+"
+function! <SID>QuoteSwitcher()
+	let l:type = strpart( expand("<cWORD>"), 0, 1 )
+	let l:word = expand("<cword>")
+
+	if l:type == '"'
+		" Double quote to single
+		execute ":normal viWc'" . l:word . "'"
+
+	elseif l:type == "'"
+		if &ft == 'ruby' || &ft == 'rspec'
+			" Single quote to symbol
+			execute ':normal viWc:' . l:word
+		else
+			" Single quote to double
+			execute ':normal viWc"' . l:word . '"'
+		end
+
+	else
+		" Whatever to double quote
+		execute ':normal viWc"' . l:word . '"'
+	endif
+
+	" Move the cursor back into the cl:word
+	call cursor( 0, getpos('.')[2] - 1 )
+endfunction
+
+
+" }}}
+" MakeBanner() {{{
+"
+" Create a quick banner from the current line's text.
+"
+function! <SID>MakeBanner()
+	let l:banner_text = toupper(join( split( getline('.'), '\zs' ), ' ' ))
+	let l:banner_text = substitute( l:banner_text, '^\s\+', '', '' )
+	let l:sep = repeat( '#', &textwidth == 0 ? 72 : &textwidth )
+	let l:line = line('.')
+
+	call setline( l:line, l:sep )
+ 	call append( l:line, [ '### ' . l:banner_text, l:sep ] )
+	execute 'normal 3=='
+	call cursor( l:line + 3, 0 )
+endfunction
+
+
+" }}}
+" RunSpec() {{{
+"
+" Run this function while in a spec file to run the specs within vim.
+"
+function! <SID>RunSpec()
+
+	" If we're in the code instead of the spec, try and switch
+	" before running tests.
+	"
+	let l:filename     = matchstr( bufname('%'), '[0-9A-Za-z_.-]*$' )
+	let l:is_spec_file = match( l:filename, '_spec.rb$' ) == -1 ? 0 : 1
+	if ( ! l:is_spec_file )
+		silent call <SID>SpecSwitcher()
+	endif
+
+	let l:spec    = bufname('%')
+	let l:buf     = 'specky:specrun'
+	let l:bufnum  = bufnr( l:buf )
+	let l:specver = (exists( 'g:speckySpecVersion') && g:speckySpecVersion == 1) ? 1 : 2
+
+	" Squash the old buffer, if it exists.
+	"
+	if buflisted( l:buf )
+		execute 'bd! ' . l:buf
+	endif
+
+	execute <SID>NewWindowCmd() . l:buf
+	setlocal buftype=nofile bufhidden=delete noswapfile
+	if ( l:specver == 1 )
+		setlocal filetype=specrun1
+		set foldtext='--'.getline(v:foldstart).v:folddashes
+	else
+		setlocal filetype=specrun
+		set foldtext=_formatFoldText()
+	endif
+
+	" Set up some convenient keybindings.
+	"
+	nnoremap <silent> <buffer> q :close<CR>
+	nnoremap <silent> <buffer> e :call <SID>FindSpecError(1)<CR>
+	nnoremap <silent> <buffer> r :call <SID>FindSpecError(-1)<CR>
+	nnoremap <silent> <buffer> E :call <SID>FindSpecError(0)<CR>
+	nnoremap <silent> <buffer> <C-e> :let b:err_line=1<CR>
+
+	" Default cmd for spec
+	"
+	if !exists( 'g:speckyRunSpecCmd' )
+		let g:speckyRunSpecCmd = l:specver == 1 ? 'spec -fs' : 'rspec'
+	endif
+
+	" Call spec and gather up the output
+	"
+	let l:cmd =  g:speckyRunSpecCmd . ' ' . l:spec
+	call append( line('$'), 'Output of: ' . l:cmd  )
+	call append( line('$'), '' )
+	let l:output = system( l:cmd )
+	call append( line('$'), split( l:output, "\n" ) )
+	normal gg
+
+	" Lockdown the buffer
+	setlocal nomodifiable
+endfunction
+
+
+" }}}
+" RunRdoc() {{{
+"
+" Get documentation for the word under the cursor.
+"
+function! <SID>RunRdoc()
+
+	" If we aren't in a ruby file (specs are ruby-mode too) then we probably
+	" don't care too much about this function.
+	"
+	if ( &ft != 'ruby' && &ft != 'rdoc' && &ft != 'rspec' )
+		call s:err( "Not currently in a rubyish-mode." )
+		return
+	endif
+
+	" Set defaults
+	"
+	if !exists( 'g:speckyRunRdocCmd' )
+		let g:speckyRunRdocCmd = 'ri'
+	endif
+
+	let l:buf     = 'specky:rdoc'
+	let l:bufname = bufname('%')
+
+	if ( match( l:bufname, l:buf ) != -1 )
+		" Already in the rdoc buffer.  This allows us to lookup
+		" something like Kernel#require.
+		"
+		let l:word = expand('<cWORD>')
+	else
+		" Not in the rdoc buffer.  This allows us to lookup
+		" something like 'each' in some_hash.each { ... }
+		"
+		let l:word = expand('<cword>')
+	endif
+
+	" Squash the old buffer, if it exists.
+	"
+	if buflisted( l:buf )
+		execute 'bd! ' . l:buf
+	endif
+
+	" With multiple matches, strip the commas from the cWORD.
+	let l:word = substitute( l:word, ',', '', 'eg' )
+
+	execute <SID>NewWindowCmd() . l:buf
+	setlocal buftype=nofile bufhidden=delete noswapfile filetype=rdoc
+	nnoremap <silent> <buffer> q :close<CR>
+
+	" Call the documentation and gather up the output
+	"
+	let l:cmd    = g:speckyRunRdocCmd . ' ' . l:word
+	let l:output = system( l:cmd )
+	call append( 0, split( l:output, "\n" ) )
+	execute 'normal gg'
+
+	" Lockdown the buffer
+	setlocal nomodifiable
+endfunction
+
+
+" }}}
+" FindSpecError( detail ) {{{
+"
+" detail:
+" 	1  -- find the next failure
+" 	-1 -- find the previous failure
+" 	0  -- expand the current failure's detail
+"
+" Convenience searches for jumping to spec failures.
+"
+function! <SID>FindSpecError( detail )
+
+	let l:specver = (exists( 'g:speckySpecVersion') && g:speckySpecVersion == 1) ? 1 : 2
+	let l:err_str = l:specver == 1 ? '(FAILED\|ERROR - \d\+)$' : 'FAILED - #\d\+)$'
+
+	if ( a:detail == 0 )
+		" Find the detailed failure text for the current failure line,
+		" and unfold it.
+		"
+		let l:orig_so = &so
+		set so=100
+		if l:specver == 1
+			call search('^' . matchstr(getline('.'),'\d\+)$') )
+		else
+			call search('^FAILURE - #' . matchstr(getline('.'),'\d\+)$') )
+		endif
+		if has('folding')
+			silent! normal za
+		endif
+		execute 'set so=' . l:orig_so
+
+	else
+		" Find the 'regular' failure line
+		"
+		if exists( 'b:err_line' )
+			call cursor( b:err_line, a:detail == -1 ? 1 : strlen(getline(b:err_line)) )
+		endif
+		call search( l:err_str, a:detail == -1 ? 'b' : '' )
+		let b:err_line = line('.')
+		nohl
+
+	endif
+endfunction
+
+
+" }}}
+" NewWindowCmd() {{{
+"
+" Return the stringified command for a new window, based on user preferences.
+"
+function! <SID>NewWindowCmd()
+	if ( ! exists('g:speckyWindowType' ) )
+		return 'tabnew '
+	endif
+
+	if ( g:speckyWindowType == 1 )
+		return 'new '
+	elseif ( g:speckyWindowType == 2 )
+		return 'vert new '
+	else
+		return 'tabnew '
+	endif
+endfunction
+
+
+" }}}
+" _formatFoldText() {{{
+"
+" Make folded failure detail visually appealing when folded.
+"
+function! _formatFoldText()
+	let l:fold = tolower( getline(v:foldstart) )
+	let l:fold = substitute( l:fold, '-', 'detail', 'e' )
+	let l:fold = '--[ ' . substitute( l:fold, ')', ' ]', 'e' )
+	return l:fold
+endfunction
+
+
+" }}}
+" s:err( msg ) "{{{
+" Notify of problems in a consistent fashion.
+"
+function! s:err( msg )
+	echohl WarningMsg|echomsg 'specky: ' . a:msg|echohl None
+endfunction " }}}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ruby/specky_formatter.rb	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,215 @@
+
+require 'rspec/core/formatters/base_text_formatter'
+
+### SpeckyFormatter: A basic RSpec 2.x text formatter, to be used
+### with the 'Specky' vim plugin (or from the command line, if you
+### dig it over the default 'documentation' format!)
+###
+### rspec -r /path/to/this/specky_formatter.rb -f SpeckyFormatter specs
+###
+class SpeckyFormatter < RSpec::Core::Formatters::BaseTextFormatter
+
+	def initialize( *args )
+		super
+		@indent_level  = 0
+		@failure_index = 0
+		@failures      = []
+		@txt           = ''
+		@summary       = ''
+	end
+
+
+	########################################################################
+	### R S P E C  H O O K S
+	########################################################################
+
+	### Example group hook -- increase indentation, emit description
+	###
+	def example_group_started( example_group )
+		self.out '+', '-' * (example_group.description.length + 2), '+'
+		self.out '| ', example_group.description, ' |'
+		self.out '+', '-' * (example_group.description.length + 2), '+'
+		@indent_level += 1
+	end
+
+
+	### Example group hook -- decrease indentation
+	###
+	def example_group_finished( example_group )
+		@indent_level -= 1
+	end
+
+
+	### Called on example success
+	###
+	def example_passed( example )
+		msg = self.format_example( example )
+		msg << ')'
+		self.out msg
+	end
+
+
+	### Called on a pending example
+	###
+	def example_pending( example )
+		msg = self.format_example( example )
+		pending_msg = example.metadata[ :execution_result ][ :pending_message ]
+		msg << ", PENDING%s)" % [ ": #{pending_msg}" || '' ]
+		self.out msg
+	end
+
+
+	### Called on example failure
+	###
+	def example_failed( example )
+		@failure_index += 1
+		msg = self.format_example( example )
+		msg << ", FAILED - #%d)" % [ @failure_index ]
+		self.out msg
+
+		@failures << example
+	end
+
+
+	### Called after all examples are run.  Emit details for each failed example,
+	### for Vim to fold.
+	###
+	def dump_failures
+		self.out "\n" unless @failures.empty?
+		cwd = Regexp.new( Dir.pwd )
+		bt_regexp = /(.+?):(\d+)(|:\d+)/
+
+		@failures.each_with_index do |example, index|
+			desc      = example.metadata[ :full_description ]
+			exception = example.execution_result[ :exception ]
+			file = line = nil
+
+			# remove files that are not in within the cwd.
+			#
+			# this isn't optimal, but it does stay within specky's notion of
+			# running it from within the project directory, and makes sure we don't
+			# inadvertently display code from rspec itself.
+			#
+			bt_file = exception.backtrace.find { |line| line =~ bt_regexp && line =~ cwd }
+			file, line = $1, $2.to_i if bt_file =~ bt_regexp
+			self.out "FAILURE - #%d)" % [ index + 1 ]
+			self.out "%s:%d" % [ file, line ] if bt_file
+
+			if exception.respond_to?( :pending_fixed? ) && exception.pending_fixed?
+				self.out "%s FIXED" % [ desc ]
+				self.out "Expected pending '%s' to fail.  No error was raised." % [
+					example.metadata[ :execution_result ][ :pending_message ]
+				]
+			else
+				self.out desc
+				self.out "Failure/Error: %s" %  [ read_failed_line( exception, example).strip ]
+				exception.message.split("\n").each {|l| self.out l}
+
+				# logic taken from the base class
+				if shared_group = find_shared_group(example)
+					self.out "Shared Example Group: \"#{shared_group.metadata[:shared_group_name]}\" called from " +
+						"#{backtrace_line(shared_group.metadata[:example_group][:location])}"
+				end
+			end
+
+			self.out exception_source( file, line-1 ) if file && line
+		end
+	end
+
+
+	### Emit the source of the exception, with context lines.
+	###
+	def exception_source( file, line )
+		context = ''
+		low, high = line - 3, line + 3
+
+		File.open( file ).each_with_index do |cline, i|
+			cline.chomp!.rstrip!
+			next unless i >= low && i <= high
+			context << "  %s%4d: %s\n" % [ ( i == line ? '>>' : ' |' ), i, cline ]
+		end
+
+		return context
+
+	rescue
+		'Unable to parse exception context lines.'
+	end
+
+
+	### Emit summary data for all examples.
+	###
+	def dump_summary( duration, example_count, failure_count, pending_count )
+		succeeded = example_count - failure_count - pending_count
+		@summary << "+%s+\n" % [ '-' * 49 ]
+		@summary << "|%s-- Summary --%s|\n" % [ ' ' * 18, ' ' * 18 ]
+		@summary << "+----------+-----------+--------+---------+-------+\n"
+		@summary << "| Duration | Succeeded | Failed | Pending | Total |\n"
+		@summary << "+----------+-----------+--------+---------+-------+\n"
+
+		@summary << "| %7ss | %9s | %6s | %7s | %5s |\n" % [
+			"%0.3f" % duration, succeeded, failure_count,
+			pending_count, example_count
+		]
+
+		@summary << "+----------+-----------+--------+---------+-------+\n\n"
+	end
+
+
+	### End of run.  Dump it all out!
+	###
+	def close
+		output.puts @summary
+		output.puts @txt
+	end
+
+
+	#########
+	protected
+	#########
+
+	### Send a string to the output IO object, after indentation.
+	###
+	def out( *msg )
+		msg = msg.join
+		@txt << "%s%s\n" % [ '  ' * @indent_level, msg ]
+	end
+
+	### Format the basic example information, along with the run duration.
+	###
+	def format_example( example )
+		metadata    = example.metadata
+		duration    = metadata[ :execution_result ][ :run_time ]
+		description = metadata[ :description ]
+		return "| %s (%0.3fs" % [ description, duration ]
+	end
+end # SpeckyFormatter
+
+
+### Identical to the regular SpeckyFormatter, but it puts summary
+### information at the bottom of the screen instead of the top, and just
+### spits out rudamentary failure info.  Mimics the progress
+### formatter for status feedback
+###
+class SpeckyFormatterConsole < SpeckyFormatter
+
+	def example_passed( ex );  print '.'; end
+	def example_failed( ex );  print 'F'; super; end
+	def example_pending( ex ); print '*'; end
+
+	def close
+		puts
+		puts "Failures:" unless @failures.empty?
+		@failures.each do |test|
+			metadata = test.metadata
+			msg = "- %s\n  %s\n  %s:%d\n\n" % [
+				metadata[:full_description],
+				test.exception.message,
+				metadata[:file_path],
+				metadata[:line_number]
+			]
+			puts msg
+		end
+		output.puts @summary
+	end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/snippets/rspec.snippets	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,173 @@
+#
+# specky: snippet file for rspec, to be used with the quite excellent
+# 'snipmate' Vim plugin by Michael Sanders <msanders42+vim@gmail.com>.
+# http://www.vim.org/scripts/script.php?script_id=2540
+#
+# $Id$
+#
+
+snippet .and and_raise()
+	.and_raise( ${1:exception}.new("${2:message}") )
+snippet .and and_return { }
+	.and_return { ${1} }
+snippet .and and_return()
+	.and_return( ${1:value} )
+snippet .and and_throw()
+	.and_throw( ${1:sym} )
+snippet .and and_yield()
+	.and_yield( ${1:values} )
+snippet .at at_least()
+	.at_least( ${1:n} ).times
+snippet .at at_most()
+	.at_most( ${1:n} ).times
+snippet .on
+	.once
+snippet .tw
+	.twice
+snippet .any
+	.any_number_of_times
+snippet des Describe subject
+	describe "${1:subject}" do
+		${2}
+	end
+snippet des Describe Type
+	describe ${1:Type} do
+		${2}
+	end
+snippet des Describe Type, description
+	describe ${1:Type}, "${2:description}" do
+		${3}
+	end
+snippet des Describe a shared group
+	describe "${1:A Shared Thing}", :shared => true do
+		${2}
+	end
+snippet it it block
+	it "${1:should do something}" do
+		${2}
+	end
+snippet it it (pending)
+	it "${1:does something}"${2}
+snippet .ex
+	.exactly( ${1:n} ).times
+snippet .w
+	.with( ${1:args} )${2}
+snippet con
+	context "${1:context}" do
+		${2}
+	end
+# this is the 'old' mock syntax (rspec 1.x)
+# use 'double' for rspec 2.x
+snippet mock
+	${1:var} = mock( "${2:mock_name}"${3:, :null_object => true} )
+	${4}
+snippet dou
+	${1:var} = double( "${2:double_name}" )${3:.as_null_object}
+	${4}
+snippet st
+	stub!( :${1:expectation} ).with( ${2:args} ).and_return( ${3} )
+snippet bef Before each test
+	before( :each ) do
+		${1}
+	end
+snippet bef Before all tests
+	before( :all ) do
+		${1}
+	end
+snippet aft After each test
+	after( :each ) do
+		${1}
+	end
+snippet aft After all tests
+	after( :all ) do
+		${1}
+	end
+snippet sh=
+	${1:target}.should == ${2:value}
+	${3}
+snippet shn=
+	${1:target}.should_not == ${2:value}
+	${3}
+snippet she
+	${1:target}.should equal( ${2:value} )
+	${3}
+snippet shne
+	${1:target}.should_not equal( ${2:value} )
+	${3}
+snippet shm Should contain
+	${1:target}.should =~ /${2:regexp}/
+	${3}
+snippet shnm 
+	${1:target}.should_not =~ /${2:regexp}/
+	${3}
+snippet shm Should match
+	${1:target}.should match( /${2:regexp}/ )${3}
+snippet shb
+	${1:target}.should be( ${2:result} )
+	${3}
+snippet shnb
+	${1:target}.should_not be( ${2:result} )
+	${3}
+snippet shbko
+	${1:target}.should be_a_kind_of( ${2:klass} )
+	${3}
+snippet shnbko
+	${1:target}.should_not be_a_kind_of( ${2:klass} )
+	${3}
+snippet shbio
+	${1:target}.should be_instance_of( ${2:klass} )
+	${3}
+snippet shnbio
+	${1:target}.should_not be_instance_of( ${2:klass} )
+	${3}
+snippet shbc
+	${1:target}.should be_close( ${2:result}, ${3:tolerance} )
+	${4}
+snippet shnbc
+	${1:target}.should_not be_close( ${2:result}, ${3:tolerance} )
+	${4}
+snippet shh
+	${1:target}.should have( ${2:num} ).${3:things}
+	${4}
+snippet shhal
+	${1:target}.should have_at_least( ${2:num} ).${3:things}
+	${4}
+snippet shham
+	${1:target}.should have_at_most( ${2:num} ).${3:things}
+	${4}
+snippet shbp
+	${1:target}.should ${2:be_${3:predicate}} ${4}
+snippet shnbp
+	${1:target}.should_not ${2:be_${3:predicate}} ${4}
+snippet exre
+	expect { ${1} }.to raise_exception( ${2:ErrorClass}, /${3:message match}/i )
+	${4}
+snippet exnre
+	expect { ${1} }.to_not raise_exception( ${2:ErrorClass} )
+	${3}
+snippet shre
+	lambda { ${1} }.should raise_exception( ${2:ErrorClass}, /${3:message match}/i )
+	${4}
+snippet shnre
+	lambda { ${1} }.should_not raise_exception( ${2:ErrorClass} )
+	${3}
+snippet shr
+	${1:mock}.should_receive( :${2:message} )${3}
+snippet shnr
+	${1:mock}.should_not_receive( :${2:message} )${3}
+snippet shrt
+	${1:target}.should respond_to( :${2:sym} )
+snippet shnrt
+	${1:target}.should_not respond_to( :${2:sym} )
+snippet shbl
+	it_should_behave_like "${1:shared behavior}"
+	${2}
+snippet sim
+	def ${1:matcher_method}( expected )
+		simple_matcher do |given, matcher|
+			matcher.description = "${2:verb} with #{expected.inspect}"
+			matcher.failure_message = "expected #{given.inspect} to $2 with #{expected.inspect}"
+			matcher.negative_failure_message = "expected #{given.inspect} not to $2 with #{expected.inspect}"
+			given.${3:...checks something and returns a boolean}
+		end
+	end
--- a/specky/Makefile	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-PLUGIN = specky
-
-SOURCE =  syntax/rdoc.vim
-SOURCE += syntax/specrun.vim
-SOURCE += syntax/specrun1.vim
-SOURCE += syntax/rspec.vim
-SOURCE += ftdetect/rspec.vim
-SOURCE += ftplugin/rspec.vim
-SOURCE += doc/specky.txt
-SOURCE += plugin/specky.vim
-SOURCE += snippets/rspec.snippets
-SOURCE += ruby/specky_formatter.rb
-
-
-${PLUGIN}.vba: ${SOURCE}
-	- vim --cmd 'let g:plugin_name="${PLUGIN}"' -S build.vim -cq\!
-	gzip ${PLUGIN}.vba
-
-install:
-	rsync -Rv ${SOURCE} ${HOME}/.vim/
-
-clean:
-	rm ${PLUGIN}.vba.gz
--- a/specky/build.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-let g:vimball_home="."
-e Makefile
-v/^SOURCE/d
-%s/^SOURCE\s\++\?=\s\+//
-execute '%MkVimball!' . g:plugin_name
--- a/specky/doc/specky.txt	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,358 +0,0 @@
-*specky.txt* Last change: $Id$
-
-                VIM REFERENCE MANUAL    by Mahlon E. Smith
-
-
-                                  specky!
-
-A Plugin for testing Ruby code with RSpec -- and more                 *specky*
-==============================================================================
-CONTENTS                                                      *SpeckyContents*
-
-    1) Intro........................................|SpeckyIntro|
-    2) Functionality................................|SpeckyFunctionality|
-    3) Enabling Specky..............................|SpeckyInstallation|
-    4) Configuration................................|SpeckyOptions|
-        4.1) Create text banners....................|g:speckyBannerKey|
-        4.2) Cycling quote styles...................|g:speckyQuoteSwitcherKey|
-        4.3) Display ruby documentation.............|g:speckyRunRdocKey|
-        4.4) Toggle editing between spec and code...|g:speckySpecSwitcherKey|
-        4.5) Run specs for the current buffer.......|g:speckyRunSpecKey|
-        4.6) Modify the default spec command........|g:speckyRunSpecCmd|
-        4.7) Modify the default rdoc command........|g:speckyRunRdocCmd|
-        4.8) Alter new window behavior..............|g:speckyWindowType|
-        4.9) Running older rspec (1.x) .............|g:speckySpecVersion|
-    5) Author.......................................|SpeckyAuthor|
-    6) License......................................|SpeckyLicense|
-
-
-
-==============================================================================
-1. INTRO                                                         *SpeckyIntro*
-
-Specky is primarily a small collection of functions to help make behavioral
-testing streamlined and easy when working with ruby and rspec.  Specky
-supports rspec 2.x by default, and is backwards compatible with rspec 1.x.
-
-Specky secondarily includes a couple of conveniences to make your everyday
-programming tasks smooooth and pleasurable.
-
-
-==============================================================================
-2. FUNCTIONALITY                                         *SpeckyFunctionality*
-
-Okay then, what does it do?
-
-By default?  Nothing but syntax highlighting unless you are comfortable using
-the menus.  I decided the easiest way to cherry pick the functionality that
-you'd like was to enable them via key bindings.  By doing this, Specky won't
-make assumptions about your current environment, and won't stomp on anything
-you don't want it to.
-
-    Specky won't do -anything- with your environment until you enable ~
-    the key bindings!! ~
-
-After you've configured your bindings, here are some of the things you can
-now do with a single key stroke:
->
-    - Switch back and forth from code to testing spec 
-
-    - Run the spec, with results going to a new, syntax highlighted buffer 
-
-    - Jump quickly to spec failures and failure detail 
-        - 'e' and 'r' to move back and forth on each failed assertion, 
-        - 'E' to jump details for it. 
-        - '<C-e>' to "forget" the currently selected failed assertion
-        - 'q' to close the spec output buffer. 
-
-    - View rdoc of the word under the cursor
-
-    - Dynamically switch string types for the word under the cursor
-      (double quoted, quoted, symbol)
-
-    - Make lovely and quick comment banners for ruby code.
-
-Specky also includes a "snippets" file that can be used with the Snipmate
-plugin by Michael Sanders <msanders42+vim@gmail.com>. (Minimum version 0.74.)
-
-	http://www.vim.org/scripts/script.php?script_id=2540
-
-==============================================================================
-3. ENABLING-SPECKY                                        *SpeckyInstallation*
-
-Getting Specky to work should be a fairly trivial process.  Specky now
-uses a custom rspec formatter to function reliably, and it needs to know
-where that lives on your system.
-
-If you installed Specky from Vimball, it is likely found at:
-
-	~/.vim/ruby/specky_formatter.rb ~
-
-Otherwise, you'll need to locate it, and tell rspec to use it in one of two
-ways.
-
-	1) Set the 'g:speckyRunSpecCmd' variable explicitly:
-
-		let g:speckyRunSpecCmd = "rspec -r ~/.vim/ruby/specky_formatter.rb -f SpeckyFormatter" ~
-
-	2) or, leave 'g:speckyRunSpecCmd' at its default value, and instead use
-	   an '.rspec' settings file in the root directory of the the project
-	   you're working in.  I find this method much more flexible -- the
-	   '.rspec' file can be carried with your project, and customized to
-	   include additional bits like custom $LOAD_PATH injections, etc.
-	   Here's what mine usually looks like: >
-
-		-r loadpath
-		-r ~/.vim/bundle/specky/ruby/specky_formatter
-		-f SpeckyFormatter
-
-	You can also use both of these methods, and use the
-	'SpeckyConsoleFormatter' class from your .rspec file, if it suits
-	your fancy.
-
-
-After that is taken care of, then just set up your keybindings in your
-.vimrc.  Here's what my config looks like. >
-
-    let g:speckyBannerKey        = "<C-S>b"
-    let g:speckyQuoteSwitcherKey = "<C-S>'"
-    let g:speckyRunRdocKey       = "<C-S>r"
-    let g:speckySpecSwitcherKey  = "<C-S>x"
-    let g:speckyRunSpecKey       = "<C-S>s"
-    let g:speckyRunRdocCmd       = "fri -L -f plain"
-    let g:speckyWindowType       = 2
-
-With these bindings, all Specky commands start with <ctrl-s> ("s" for
-Specky!), followed by a mnemonic function to run:
-
-    b ----> Banner creation ~
-    ' ----> Quote cycling ~
-    r ----> run Rdoc ~
-    x ----> code and spec eXchange ~
-    s ----> run rSpec ~
-
-Of course, <ctrl-s> is a "suspend" signal for most terminals, so these
-bindings are meant for a |gui| environment, such as gvim.  Your mileage (and
-tastes) will doubtlessly vary.  Do what you will.  I won't judge you.
-
-
-==============================================================================
-4. CONFIGURATION-OPTIONS                                       *SpeckyOptions*
-
-Here are all of the available configuration options.
-
-Please note that you must set binding variables:
-
-    |g:speckyBannerKey|
-    |g:speckyQuoteSwitcherKey|
-    |g:speckyRunRdocKey|
-    |g:speckySpecSwitcherKey|
-    |g:speckyRunSpecKey|
-
-...in order to enable the respective Specky functionality.  See
-|SpeckyInstallation| for details. Any other options are entirely optional.
-Put these into your |vimrc|, or wherever else you enjoy storing this kind of
-stuff.
-
-
-------------------------------------------------------------------------------
-4.1                                                        *g:speckyBannerKey*
-
-Setting this binding enables comment banner creation.
-
-This is purely a convenience routine, and a stylistic one at that.  I prefer
-large advertising of what "area" of code you are in, along with other
-miscellaneous labels for humans to read.  If this isn't how you roll, then by
-all means, don't enable this binding!  :)
-
-As an example -- you can just type:
-
-	instance methods ~
-
-Then hit the keystroke.  It will magically turn into: >
-
-  ########################################################################
-  ### I N S T A N C E   M E T H O D S
-  ########################################################################
-
-With all those saved extra keystrokes this might provide you per banner over
-the years, your RSI-free hands will thank you.  And the total time savings!!
-Oh man, what are you going to DO with all of that extra free time?
-The possibilities are staggering.
-
-
-------------------------------------------------------------------------------
-4.2                                                 *g:speckyQuoteSwitcherKey*
-
-Setting this binding enables quote "style switching".
-
-If you aren't in ruby mode, this just changes the word under the cursor
-back and forth from double quoting to single quoting.
-
-    string -> "string" -> 'string' -> "string" ... ~
-
-In ruby mode, symbols are also put into the rotation.
-
-    "string" -> 'string' -> :string -> "string" ... ~
-
-Note that quote cycling only works with a |word|.
-
-
-------------------------------------------------------------------------------
-4.3                                                       *g:speckyRunRdocKey*
-
-Setting this enables the display of rdoc documentation for the current
-word under the cursor.  For lookups with multiple matches, you can continue
-using this binding to "drill down" to the desired documentation.
-         
-
-------------------------------------------------------------------------------
-4.4                                                  *g:speckySpecSwitcherKey*
-
-Setting this enables spec to code switching, and visa versa.
-
-Switching uses path searching instead of reliance on directory structure in
-your project.  The idea here is that you'd |:chdir| into your project
-directory.  Spec files just need to end in '_spec.rb', which is a common
-convention.
-
-    aRubyClass.rb ---> aRubyClass_spec.rb~
- 
-Because it leaves respective buffers open, you can essentially think of this
-as a quick toggle between code and tests.
-
-
-------------------------------------------------------------------------------
-4.5                                                       *g:speckyRunSpecKey*
-
-Setting this variable runs "rspec" on the current buffer.
-
-All output is sent to a syntax highlighted scratch buffer. This new window is
-re-used for each spec run.  You can quickly "jump" to assertion failures and
-their associated details with the following keys:
-
-        e and r ~
-            Move forward and backward through the failed assertions.
-
-        E~
-            While on a failure line, jump to the details of the failure.
-
-        <C-e> ~
-            "Forget" the last found failed assertion, and start over at the
-            beginning of the list. (ie, the next 'e' keystroke will select
-            error #1.)
-
-        q ~
-            Closes the spec output buffer. 
-
-
-Normally, you'd only want to perform this keystroke while in a spec file
-buffer.  If Specky thinks you are in code, rather than a buffer (as indicated
-by the lack of a "_spec.rb" file naming convention) then it will attempt to
-switch to the spec before running the command.
-
-
-------------------------------------------------------------------------------
-4.6                                                       *g:speckyRunSpecCmd*
-
-This is the program, with flags, that the current file is sent to when
-executing the |g:speckyRunSpecKey| keybinding.
-
-A common addition is to include an "-r" flag for sucking in local libraries
-necessary for testing your project.  In fact, this is required to use the 
-rspec formatter supplied by Specky.  See |SpeckyInstallation| for more info.
-
-    Default: ~
-        rspec
-
-
-------------------------------------------------------------------------------
-4.7                                                       *g:speckyRunRdocCmd*
-
-If you prefer an rdoc display program other than "ri", you can set it
-with this variable.  "fri -L -f plain" is always a nice choice, for example.
-
-    Default: ~
-        ri
-
-
-------------------------------------------------------------------------------
-4.8                                                       *g:speckyWindowType*
-
-For both spec and rdoc commands, this variable controls the behavior of the
-newly generated window.
-
-	Default: ~
-		0
-		
-	0 ~
-		Create a new tabbed window
-	1 ~
-		Split the current window horizontally
-	2 ~
-		Split the current window vertically
-
-
-------------------------------------------------------------------------------
-4.9                                                      *g:speckySpecVersion*
-
-Specky should work out of the box with rspec 2.x.  If you'd like to use rspec
-1.x instead, you can do so with the following Vim settings: >
-
-    let g:speckySpecVersion = 1
-	let g:speckyRunRdocCmd  = "spec -fs" 
-
-If you have both rspec 1.x and 2.x installed at the same time, you need to 
-be explicit with what version you are executing: >
-
-	let g:speckyRunRdocCmd  = "spec _1.3.0_ -fs" 
-
-
-==============================================================================
-5. AUTHOR                                                       *SpeckyAuthor*
-
-
-Specky was written by Mahlon E. Smith.
-
-    mahlon@martini.nu ~
-    http://www.martini.nu/ 
-
-
-
-==============================================================================
-6. LICENSE                                                     *SpeckyLicense*
-
-
-Specky is distributed under the BSD license.
-    http://www.opensource.org/licenses/bsd-license.php
->
-    Copyright (c) 2008-2010, Mahlon E. Smith <mahlon@martini.nu>
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are
-    met:
-
-        * Redistributions of source code must retain the above copyright
-          notice, this list of conditions and the following disclaimer.
-
-        * Redistributions in binary form must reproduce the above copyright
-          notice, this list of conditions and the following disclaimer in the
-          documentation and/or other materials provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-    TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-
-vim: set noet nosta sw=4 ts=4 ft=help :
-
--- a/specky/ftdetect/rspec.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-au BufRead,BufNewFile *_spec.rb set filetype=rspec
--- a/specky/ftplugin/rspec.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-if exists("b:did_ftplugin")
-    finish
-endif
-
-" Behave just like Ruby
-runtime! ftplugin/ruby.vim
-
--- a/specky/plugin/specky.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,370 +0,0 @@
-" vim: set noet nosta sw=4 ts=4 fdm=marker :
-"
-" Specky!
-" Mahlon E. Smith <mahlon@martini.nu>
-" $Id$
-"
-
-
-" Hook up the functions to the user supplied key bindings. {{{
-"
-if exists( 'g:speckySpecSwitcherKey' )
-	execute 'map ' . g:speckySpecSwitcherKey . ' :call <SID>SpecSwitcher()<CR>'
-"	map &g:speckySpecSwitcherKey <SID>SpecSwitcher()
-endif
-
-if exists( 'g:speckyQuoteSwitcherKey' )
-	execute 'map ' . g:speckyQuoteSwitcherKey . ' :call <SID>QuoteSwitcher()<CR>'
-endif
-
-if exists( 'g:speckyBannerKey' )
-	execute 'map ' . g:speckyBannerKey . ' :call <SID>MakeBanner()<CR>'
-endif
-
-if exists( 'g:speckyRunSpecKey' )
-	execute 'map ' . g:speckyRunSpecKey . ' :call <SID>RunSpec()<CR>'
-endif
-
-if exists( 'g:speckyRunRdocKey' )
-	execute 'map ' . g:speckyRunRdocKey . ' :call <SID>RunRdoc()<CR>'
-endif
-
-if exists( 'specky_loaded' )
-	finish
-endif
-let specky_loaded = '$Rev$'
-
-
-"}}}
-" Menu configuration {{{
-"
-let s:menuloc = '&Plugin.&specky'
-execute 'menu ' . s:menuloc . '.&Jump\ to\ code/spec :call <SID>SpecSwitcher()<CR>'
-execute 'menu ' . s:menuloc . '.Run\ &spec :call <SID>RunSpec()<CR>'
-execute 'menu ' . s:menuloc . '.&RDoc\ lookup :call <SID>RunRdoc()<CR>'
-execute 'menu ' . s:menuloc . '.Rotate\ &quote\ style :call <SID>QuoteSwitcher()<CR>'
-execute 'menu ' . s:menuloc . '.Make\ a\ &banner :call <SID>MakeBanner()<CR>'
-
-
-" }}}
-" SpecSwitcher() {{{
-"
-" When in ruby code or an rspec BDD file, try and search recursively through
-" the filesystem (within the current working directory) to find the
-" respectively matching file.  (code to spec, spec to code.)
-"
-" This operates under the assumption that you've used chdir() to put vim into
-" the top level directory of your project.
-"
-function! <SID>SpecSwitcher()
-
-	" If we aren't in a ruby or rspec file then we probably don't care
-	" too much about this function.
-	"
-	if &ft != 'ruby' && &ft != 'rspec'
-		call s:err( "Not currently in ruby or rspec mode." )
-		return
-	endif
-
-	" Ensure that we can always search recursively for files to open.
-	"
-	let l:orig_path = &path
-	set path=**
-
-	" Get the current buffer name, and determine if it is a spec file.
-	"
-	" /tmp/something/whatever/rubycode.rb ---> rubycode.rb
-	" A requisite of the specfiles is that they match to the class/code file,
-	" this emulates the eigenclass stuff, but doesn't require the same
-	" directory structures.
-	"
-	" rubycode.rb ---> rubycode_spec.rb
-	" 
-	let l:filename     = matchstr( bufname('%'), '[0-9A-Za-z_.-]*$' )
-	let l:is_spec_file = match( l:filename, '_spec.rb$' ) == -1 ? 0 : 1
-
-	if l:is_spec_file
-		let l:other_file = substitute( l:filename, '_spec\.rb$', '\.rb', '' )
-	else
-		let l:other_file = substitute( l:filename, '\.rb$', '_spec\.rb', '' )
-	endif
-
-	let l:bufnum = bufnr( l:other_file )
-	if l:bufnum == -1
-		" The file isn't currently open, so let's search for it.
-		execute 'find ' . l:other_file
-	else
-		" We've already got an open buffer with this file, just go to it.
-		execute 'buffer' . l:bufnum
-	endif
-
-	" Restore the original path.
-	execute 'set path=' . l:orig_path
-endfunction
-
-
-" }}}
-" QuoteSwitcher() {{{
-"
-" Wrap the word under the cursor in quotes.  If in ruby mode,
-" cycle between quoting styles and symbols.
-"
-" variable -> "variable" -> 'variable' -> :variable
-"
-function! <SID>QuoteSwitcher()
-	let l:type = strpart( expand("<cWORD>"), 0, 1 )
-	let l:word = expand("<cword>")
-
-	if l:type == '"'
-		" Double quote to single
-		execute ":normal viWc'" . l:word . "'"
-
-	elseif l:type == "'"
-		if &ft == 'ruby' || &ft == 'rspec'
-			" Single quote to symbol
-			execute ':normal viWc:' . l:word
-		else
-			" Single quote to double
-			execute ':normal viWc"' . l:word . '"'
-		end
-
-	else
-		" Whatever to double quote
-		execute ':normal viWc"' . l:word . '"'
-	endif
-
-	" Move the cursor back into the cl:word
-	call cursor( 0, getpos('.')[2] - 1 )
-endfunction
-
-
-" }}}
-" MakeBanner() {{{
-"
-" Create a quick banner from the current line's text.
-"
-function! <SID>MakeBanner()
-	let l:banner_text = toupper(join( split( getline('.'), '\zs' ), ' ' ))
-	let l:banner_text = substitute( l:banner_text, '^\s\+', '', '' )
-	let l:sep = repeat( '#', &textwidth == 0 ? 72 : &textwidth )
-	let l:line = line('.')
-
-	call setline( l:line, l:sep )
- 	call append( l:line, [ '### ' . l:banner_text, l:sep ] )
-	execute 'normal 3=='
-	call cursor( l:line + 3, 0 )
-endfunction
-
-
-" }}}
-" RunSpec() {{{
-"
-" Run this function while in a spec file to run the specs within vim.
-"
-function! <SID>RunSpec()
-
-	" If we're in the code instead of the spec, try and switch
-	" before running tests.
-	"
-	let l:filename     = matchstr( bufname('%'), '[0-9A-Za-z_.-]*$' )
-	let l:is_spec_file = match( l:filename, '_spec.rb$' ) == -1 ? 0 : 1
-	if ( ! l:is_spec_file )
-		silent call <SID>SpecSwitcher()
-	endif
-
-	let l:spec    = bufname('%')
-	let l:buf     = 'specky:specrun'
-	let l:bufnum  = bufnr( l:buf )
-	let l:specver = (exists( 'g:speckySpecVersion') && g:speckySpecVersion == 1) ? 1 : 2
-
-	" Squash the old buffer, if it exists.
-	"
-	if buflisted( l:buf )
-		execute 'bd! ' . l:buf
-	endif
-
-	execute <SID>NewWindowCmd() . l:buf
-	setlocal buftype=nofile bufhidden=delete noswapfile
-	if ( l:specver == 1 )
-		setlocal filetype=specrun1
-		set foldtext='--'.getline(v:foldstart).v:folddashes
-	else
-		setlocal filetype=specrun
-		set foldtext=_formatFoldText()
-	endif
-
-	" Set up some convenient keybindings.
-	"
-	nnoremap <silent> <buffer> q :close<CR>
-	nnoremap <silent> <buffer> e :call <SID>FindSpecError(1)<CR>
-	nnoremap <silent> <buffer> r :call <SID>FindSpecError(-1)<CR>
-	nnoremap <silent> <buffer> E :call <SID>FindSpecError(0)<CR>
-	nnoremap <silent> <buffer> <C-e> :let b:err_line=1<CR>
-
-	" Default cmd for spec
-	"
-	if !exists( 'g:speckyRunSpecCmd' )
-		let g:speckyRunSpecCmd = l:specver == 1 ? 'spec -fs' : 'rspec'
-	endif
-
-	" Call spec and gather up the output
-	"
-	let l:cmd =  g:speckyRunSpecCmd . ' ' . l:spec
-	call append( line('$'), 'Output of: ' . l:cmd  )
-	call append( line('$'), '' )
-	let l:output = system( l:cmd )
-	call append( line('$'), split( l:output, "\n" ) )
-	normal gg
-
-	" Lockdown the buffer
-	setlocal nomodifiable
-endfunction
-
-
-" }}}
-" RunRdoc() {{{
-"
-" Get documentation for the word under the cursor.
-"
-function! <SID>RunRdoc()
-
-	" If we aren't in a ruby file (specs are ruby-mode too) then we probably
-	" don't care too much about this function.
-	"
-	if ( &ft != 'ruby' && &ft != 'rdoc' && &ft != 'rspec' )
-		call s:err( "Not currently in a rubyish-mode." )
-		return
-	endif
-
-	" Set defaults
-	"
-	if !exists( 'g:speckyRunRdocCmd' )
-		let g:speckyRunRdocCmd = 'ri'
-	endif
-
-	let l:buf     = 'specky:rdoc'
-	let l:bufname = bufname('%')
-
-	if ( match( l:bufname, l:buf ) != -1 )
-		" Already in the rdoc buffer.  This allows us to lookup
-		" something like Kernel#require.
-		"
-		let l:word = expand('<cWORD>')
-	else
-		" Not in the rdoc buffer.  This allows us to lookup
-		" something like 'each' in some_hash.each { ... }
-		"
-		let l:word = expand('<cword>')
-	endif
-
-	" Squash the old buffer, if it exists.
-	"
-	if buflisted( l:buf )
-		execute 'bd! ' . l:buf
-	endif
-
-	" With multiple matches, strip the commas from the cWORD.
-	let l:word = substitute( l:word, ',', '', 'eg' )
-
-	execute <SID>NewWindowCmd() . l:buf
-	setlocal buftype=nofile bufhidden=delete noswapfile filetype=rdoc
-	nnoremap <silent> <buffer> q :close<CR>
-
-	" Call the documentation and gather up the output
-	"
-	let l:cmd    = g:speckyRunRdocCmd . ' ' . l:word
-	let l:output = system( l:cmd )
-	call append( 0, split( l:output, "\n" ) )
-	execute 'normal gg'
-
-	" Lockdown the buffer
-	setlocal nomodifiable
-endfunction
-
-
-" }}}
-" FindSpecError( detail ) {{{
-"
-" detail:
-" 	1  -- find the next failure
-" 	-1 -- find the previous failure
-" 	0  -- expand the current failure's detail
-"
-" Convenience searches for jumping to spec failures.
-"
-function! <SID>FindSpecError( detail )
-
-	let l:specver = (exists( 'g:speckySpecVersion') && g:speckySpecVersion == 1) ? 1 : 2
-	let l:err_str = l:specver == 1 ? '(FAILED\|ERROR - \d\+)$' : 'FAILED - #\d\+)$'
-
-	if ( a:detail == 0 )
-		" Find the detailed failure text for the current failure line,
-		" and unfold it.
-		"
-		let l:orig_so = &so
-		set so=100
-		if l:specver == 1
-			call search('^' . matchstr(getline('.'),'\d\+)$') )
-		else
-			call search('^FAILURE - #' . matchstr(getline('.'),'\d\+)$') )
-		endif
-		if has('folding')
-			silent! normal za
-		endif
-		execute 'set so=' . l:orig_so
-
-	else
-		" Find the 'regular' failure line
-		"
-		if exists( 'b:err_line' )
-			call cursor( b:err_line, a:detail == -1 ? 1 : strlen(getline(b:err_line)) )
-		endif
-		call search( l:err_str, a:detail == -1 ? 'b' : '' )
-		let b:err_line = line('.')
-		nohl
-
-	endif
-endfunction
-
-
-" }}}
-" NewWindowCmd() {{{
-"
-" Return the stringified command for a new window, based on user preferences.
-"
-function! <SID>NewWindowCmd()
-	if ( ! exists('g:speckyWindowType' ) )
-		return 'tabnew '
-	endif
-
-	if ( g:speckyWindowType == 1 )
-		return 'new '
-	elseif ( g:speckyWindowType == 2 )
-		return 'vert new '
-	else
-		return 'tabnew '
-	endif
-endfunction
-
-
-" }}}
-" _formatFoldText() {{{
-"
-" Make folded failure detail visually appealing when folded.
-"
-function! _formatFoldText()
-	let l:fold = tolower( getline(v:foldstart) )
-	let l:fold = substitute( l:fold, '-', 'detail', 'e' )
-	let l:fold = '--[ ' . substitute( l:fold, ')', ' ]', 'e' )
-	return l:fold
-endfunction
-
-
-" }}}
-" s:err( msg ) "{{{
-" Notify of problems in a consistent fashion.
-"
-function! s:err( msg )
-	echohl WarningMsg|echomsg 'specky: ' . a:msg|echohl None
-endfunction " }}}
-
--- a/specky/ruby/specky_formatter.rb	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-
-require 'rspec/core/formatters/base_text_formatter'
-
-### SpeckyFormatter: A basic RSpec 2.x text formatter, to be used
-### with the 'Specky' vim plugin (or from the command line, if you
-### dig it over the default 'documentation' format!)
-###
-### rspec -r /path/to/this/specky_formatter.rb -f SpeckyFormatter specs
-###
-class SpeckyFormatter < RSpec::Core::Formatters::BaseTextFormatter
-
-	def initialize( *args )
-		super
-		@indent_level  = 0
-		@failure_index = 0
-		@failures      = []
-		@txt           = ''
-		@summary       = ''
-	end
-
-
-	########################################################################
-	### R S P E C  H O O K S
-	########################################################################
-
-	### Example group hook -- increase indentation, emit description
-	###
-	def example_group_started( example_group )
-		self.out '+', '-' * (example_group.description.length + 2), '+'
-		self.out '| ', example_group.description, ' |'
-		self.out '+', '-' * (example_group.description.length + 2), '+'
-		@indent_level += 1
-	end
-
-
-	### Example group hook -- decrease indentation
-	###
-	def example_group_finished( example_group )
-		@indent_level -= 1
-	end
-
-
-	### Called on example success
-	###
-	def example_passed( example )
-		msg = self.format_example( example )
-		msg << ')'
-		self.out msg
-	end
-
-
-	### Called on a pending example
-	###
-	def example_pending( example )
-		msg = self.format_example( example )
-		pending_msg = example.metadata[ :execution_result ][ :pending_message ]
-		msg << ", PENDING%s)" % [ ": #{pending_msg}" || '' ]
-		self.out msg
-	end
-
-
-	### Called on example failure
-	###
-	def example_failed( example )
-		@failure_index += 1
-		msg = self.format_example( example )
-		msg << ", FAILED - #%d)" % [ @failure_index ]
-		self.out msg
-
-		@failures << example
-	end
-
-
-	### Called after all examples are run.  Emit details for each failed example,
-	### for Vim to fold.
-	###
-	def dump_failures
-		self.out "\n" unless @failures.empty?
-		cwd = Regexp.new( Dir.pwd )
-		bt_regexp = /(.+?):(\d+)(|:\d+)/
-
-		@failures.each_with_index do |example, index|
-			desc      = example.metadata[ :full_description ]
-			exception = example.execution_result[ :exception ]
-			file = line = nil
-
-			# remove files that are not in within the cwd.
-			#
-			# this isn't optimal, but it does stay within specky's notion of
-			# running it from within the project directory, and makes sure we don't
-			# inadvertently display code from rspec itself.
-			#
-			bt_file = exception.backtrace.find { |line| line =~ bt_regexp && line =~ cwd }
-			file, line = $1, $2.to_i if bt_file =~ bt_regexp
-			self.out "FAILURE - #%d)" % [ index + 1 ]
-			self.out "%s:%d" % [ file, line ] if bt_file
-
-			if exception.respond_to?( :pending_fixed? ) && exception.pending_fixed?
-				self.out "%s FIXED" % [ desc ]
-				self.out "Expected pending '%s' to fail.  No error was raised." % [
-					example.metadata[ :execution_result ][ :pending_message ]
-				]
-			else
-				self.out desc
-				self.out "Failure/Error: %s" %  [ read_failed_line( exception, example).strip ]
-				exception.message.split("\n").each {|l| self.out l}
-
-				# logic taken from the base class
-				if shared_group = find_shared_group(example)
-					self.out "Shared Example Group: \"#{shared_group.metadata[:shared_group_name]}\" called from " +
-						"#{backtrace_line(shared_group.metadata[:example_group][:location])}"
-				end
-			end
-
-			self.out exception_source( file, line-1 ) if file && line
-		end
-	end
-
-
-	### Emit the source of the exception, with context lines.
-	###
-	def exception_source( file, line )
-		context = ''
-		low, high = line - 3, line + 3
-
-		File.open( file ).each_with_index do |cline, i|
-			cline.chomp!.rstrip!
-			next unless i >= low && i <= high
-			context << "  %s%4d: %s\n" % [ ( i == line ? '>>' : ' |' ), i, cline ]
-		end
-
-		return context
-
-	rescue
-		'Unable to parse exception context lines.'
-	end
-
-
-	### Emit summary data for all examples.
-	###
-	def dump_summary( duration, example_count, failure_count, pending_count )
-		succeeded = example_count - failure_count - pending_count
-		@summary << "+%s+\n" % [ '-' * 49 ]
-		@summary << "|%s-- Summary --%s|\n" % [ ' ' * 18, ' ' * 18 ]
-		@summary << "+----------+-----------+--------+---------+-------+\n"
-		@summary << "| Duration | Succeeded | Failed | Pending | Total |\n"
-		@summary << "+----------+-----------+--------+---------+-------+\n"
-
-		@summary << "| %7ss | %9s | %6s | %7s | %5s |\n" % [
-			"%0.3f" % duration, succeeded, failure_count,
-			pending_count, example_count
-		]
-
-		@summary << "+----------+-----------+--------+---------+-------+\n\n"
-	end
-
-
-	### End of run.  Dump it all out!
-	###
-	def close
-		output.puts @summary
-		output.puts @txt
-	end
-
-
-	#########
-	protected
-	#########
-
-	### Send a string to the output IO object, after indentation.
-	###
-	def out( *msg )
-		msg = msg.join
-		@txt << "%s%s\n" % [ '  ' * @indent_level, msg ]
-	end
-
-	### Format the basic example information, along with the run duration.
-	###
-	def format_example( example )
-		metadata    = example.metadata
-		duration    = metadata[ :execution_result ][ :run_time ]
-		description = metadata[ :description ]
-		return "| %s (%0.3fs" % [ description, duration ]
-	end
-end # SpeckyFormatter
-
-
-### Identical to the regular SpeckyFormatter, but it puts summary
-### information at the bottom of the screen instead of the top, and just
-### spits out rudamentary failure info.  Mimics the progress
-### formatter for status feedback
-###
-class SpeckyFormatterConsole < SpeckyFormatter
-
-	def example_passed( ex );  print '.'; end
-	def example_failed( ex );  print 'F'; super; end
-	def example_pending( ex ); print '*'; end
-
-	def close
-		puts
-		puts "Failures:" unless @failures.empty?
-		@failures.each do |test|
-			metadata = test.metadata
-			msg = "- %s\n  %s\n  %s:%d\n\n" % [
-				metadata[:full_description],
-				test.exception.message,
-				metadata[:file_path],
-				metadata[:line_number]
-			]
-			puts msg
-		end
-		output.puts @summary
-	end
-end
-
--- a/specky/snippets/rspec.snippets	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-#
-# specky: snippet file for rspec, to be used with the quite excellent
-# 'snipmate' Vim plugin by Michael Sanders <msanders42+vim@gmail.com>.
-# http://www.vim.org/scripts/script.php?script_id=2540
-#
-# $Id$
-#
-
-snippet .and and_raise()
-	.and_raise( ${1:exception}.new("${2:message}") )
-snippet .and and_return { }
-	.and_return { ${1} }
-snippet .and and_return()
-	.and_return( ${1:value} )
-snippet .and and_throw()
-	.and_throw( ${1:sym} )
-snippet .and and_yield()
-	.and_yield( ${1:values} )
-snippet .at at_least()
-	.at_least( ${1:n} ).times
-snippet .at at_most()
-	.at_most( ${1:n} ).times
-snippet .on
-	.once
-snippet .tw
-	.twice
-snippet .any
-	.any_number_of_times
-snippet des Describe subject
-	describe "${1:subject}" do
-		${2}
-	end
-snippet des Describe Type
-	describe ${1:Type} do
-		${2}
-	end
-snippet des Describe Type, description
-	describe ${1:Type}, "${2:description}" do
-		${3}
-	end
-snippet des Describe a shared group
-	describe "${1:A Shared Thing}", :shared => true do
-		${2}
-	end
-snippet it it block
-	it "${1:should do something}" do
-		${2}
-	end
-snippet it it (pending)
-	it "${1:does something}"${2}
-snippet .ex
-	.exactly( ${1:n} ).times
-snippet .w
-	.with( ${1:args} )${2}
-snippet con
-	context "${1:context}" do
-		${2}
-	end
-# this is the 'old' mock syntax (rspec 1.x)
-# use 'double' for rspec 2.x
-snippet mock
-	${1:var} = mock( "${2:mock_name}"${3:, :null_object => true} )
-	${4}
-snippet dou
-	${1:var} = double( "${2:double_name}" )${3:.as_null_object}
-	${4}
-snippet st
-	stub!( :${1:expectation} ).with( ${2:args} ).and_return( ${3} )
-snippet bef Before each test
-	before( :each ) do
-		${1}
-	end
-snippet bef Before all tests
-	before( :all ) do
-		${1}
-	end
-snippet aft After each test
-	after( :each ) do
-		${1}
-	end
-snippet aft After all tests
-	after( :all ) do
-		${1}
-	end
-snippet sh=
-	${1:target}.should == ${2:value}
-	${3}
-snippet shn=
-	${1:target}.should_not == ${2:value}
-	${3}
-snippet she
-	${1:target}.should equal( ${2:value} )
-	${3}
-snippet shne
-	${1:target}.should_not equal( ${2:value} )
-	${3}
-snippet shm Should contain
-	${1:target}.should =~ /${2:regexp}/
-	${3}
-snippet shnm 
-	${1:target}.should_not =~ /${2:regexp}/
-	${3}
-snippet shm Should match
-	${1:target}.should match( /${2:regexp}/ )${3}
-snippet shb
-	${1:target}.should be( ${2:result} )
-	${3}
-snippet shnb
-	${1:target}.should_not be( ${2:result} )
-	${3}
-snippet shbko
-	${1:target}.should be_a_kind_of( ${2:klass} )
-	${3}
-snippet shnbko
-	${1:target}.should_not be_a_kind_of( ${2:klass} )
-	${3}
-snippet shbio
-	${1:target}.should be_instance_of( ${2:klass} )
-	${3}
-snippet shnbio
-	${1:target}.should_not be_instance_of( ${2:klass} )
-	${3}
-snippet shbc
-	${1:target}.should be_close( ${2:result}, ${3:tolerance} )
-	${4}
-snippet shnbc
-	${1:target}.should_not be_close( ${2:result}, ${3:tolerance} )
-	${4}
-snippet shh
-	${1:target}.should have( ${2:num} ).${3:things}
-	${4}
-snippet shhal
-	${1:target}.should have_at_least( ${2:num} ).${3:things}
-	${4}
-snippet shham
-	${1:target}.should have_at_most( ${2:num} ).${3:things}
-	${4}
-snippet shbp
-	${1:target}.should ${2:be_${3:predicate}} ${4}
-snippet shnbp
-	${1:target}.should_not ${2:be_${3:predicate}} ${4}
-snippet exre
-	expect { ${1} }.to raise_exception( ${2:ErrorClass}, /${3:message match}/i )
-	${4}
-snippet exnre
-	expect { ${1} }.to_not raise_exception( ${2:ErrorClass} )
-	${3}
-snippet shre
-	lambda { ${1} }.should raise_exception( ${2:ErrorClass}, /${3:message match}/i )
-	${4}
-snippet shnre
-	lambda { ${1} }.should_not raise_exception( ${2:ErrorClass} )
-	${3}
-snippet shr
-	${1:mock}.should_receive( :${2:message} )${3}
-snippet shnr
-	${1:mock}.should_not_receive( :${2:message} )${3}
-snippet shrt
-	${1:target}.should respond_to( :${2:sym} )
-snippet shnrt
-	${1:target}.should_not respond_to( :${2:sym} )
-snippet shbl
-	it_should_behave_like "${1:shared behavior}"
-	${2}
-snippet sim
-	def ${1:matcher_method}( expected )
-		simple_matcher do |given, matcher|
-			matcher.description = "${2:verb} with #{expected.inspect}"
-			matcher.failure_message = "expected #{given.inspect} to $2 with #{expected.inspect}"
-			matcher.negative_failure_message = "expected #{given.inspect} not to $2 with #{expected.inspect}"
-			given.${3:...checks something and returns a boolean}
-		end
-	end
--- a/specky/syntax/rdoc.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-"
-" specky: syntax highlighting for 'rdoc' output
-" $Id$
-
-
-" Separator lines
-"
-syntax match rdocSpeckyLines /^------\+\s\?/ contains=rdocSpeckyTarget,rdocSpeckyMultiples
-highlight link rdocSpeckyLines Comment
-
-" The class/method that we're reading
-"
-syntax match rdocSpeckyTarget / .\+/hs=s+1 contained
-highlight link rdocSpeckyTarget Underlined
-
-" When there are multiple matches to choose from.
-" This is only output by fri.
-"
-syntax match rdocSpeckyMultiples / Multiple choices/hs=s+1 contained
-highlight link rdocSpeckyMultiples WarningMsg
-
-" Secondary headers
-"
-syntax region rdocSpeckyHeader start="^\S\+.\+:$\n-\+" end="-$" keepend contains=rdocSpeckyHeaderLine
-highlight link rdocSpeckyHeader Question
-
-" Secondary header lines
-"
-syntax match rdocSpeckyHeaderLine /^-\+$/ contained 
-highlight link rdocSpeckyHeaderLine NonText
-
-" Remove the formatting characters from the display
-"
-highlight link rdocSpeckySpecials NonText
-
-" _word_ --> italic
-"
-syntax region rdocSpeckyItalic matchgroup=rdocSpeckySpecials start=" _" end="_"
-highlight link rdocSpeckyItalic Special
-
-" *word* --> bold
-"
-syntax region rdocSpeckBold matchgroup=rdocSpeckySpecials start=" \*" end="\*"
-highlight link rdocSpeckyBold Constant
-
-" +word+ --> typewriter
-"
-syntax region rdocSpeckyType matchgroup=rdocSpeckySpecials start=" +" end="+"
-highlight link rdocSpeckyType Identifier
-
-let b:current_syntax = "rdoc"
-
--- a/specky/syntax/rspec.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-"
-" specky: syntax highlighting for rspec files.
-" This includes keywords for both rspec 1.x and rspec 2.x.
-" $Id$
-"
-
-runtime! syntax/ruby.vim
-unlet b:current_syntax
-
-syntax keyword rspecGroupMethods context describe example it its let it_should_behave_like shared_examples_for subject it_behaves_like pending specify
-highlight link rspecGroupMethods Type
-
-syntax keyword rspecBeforeAndAfter after after_suite_parts append_after append_before before before_suite_parts prepend_after prepend_before around
-highlight link rspecBeforeAndAfter Statement
-
-syntax keyword rspecMocks double mock stub stub_chain
-highlight link rspecMocks Constant
-
-syntax keyword rspecMockMethods and_raise and_return and_throw and_yield build_child called_max_times expected_args invoke matches
-highlight link rspecMockMethods Function
-
-syntax keyword rspecKeywords should should_not should_not_receive should_receive
-highlight link rspecKeywords Constant
-
-syntax keyword rspecMatchers be change eql equal exist expect have have_at_least have_at_most have_exactly include match matcher raise_error raise_exception respond_to satisfy throw_symbol to to_not when wrap_expectation
-syntax match rspecMatchers /\<\(be\|have\)_\w\+\>/
-highlight link rspecMatchers Function
-
-syntax keyword rspecMessageExpectation advise any_args any_number_of_times anything at_least at_most exactly expected_messages_received generate_error hash_including hash_not_including ignoring_args instance_of matches_at_least_count matches_at_most_count matches_exact_count matches_name_but_not_args negative_expectation_for never no_args once ordered similar_messages times twice verify_messages_received with 
-highlight link rspecMessageExpectation Function
-
-let b:current_syntax = "rspec"
-
--- a/specky/syntax/specrun.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-"
-" specky: syntax highlighting for rspec test output, using the
-" custom specky formatter. (rspec 2.x)
-" $Id$
-"
-
-if has("folding")
-  setlocal foldmethod=syntax
-endif
-
-" Command line as it was called, inserted by Specky
-syntax match specSpeckyCmd /^Output of: .*/
-
-" Pending specs that somehow pass
-syntax keyword specCallout FIXED
-
-" Passed specs
-syntax match specPassed /.*(\d\+.\d\+s)/ contains=specDuration,specBoxLine
-syntax keyword specPassedKeyword Succeeded
-
-" Pending specs
-syntax match specPending /.*PENDING: .*)$/ contains=specDuration,specBoxLine
-syntax keyword specPendingKeyword Pending
-
-" Failed specs
-syntax match specFailed /.*FAILED - #\d\+)/ contains=specDuration,specBoxLine
-syntax keyword specFailedKeyword Failed
-
-" Failure details
-syntax region specFailedDetails start="^FAILURE - #\d\+)" end="^$" fold contains=specCallout,specErrorLine
-syntax match specErrorLine /^  >>/
-
-
-" Boxes
-syntax match specBox /^\(\s\+\)\?\(+[+-]\+\||.*|\)$/ contains=specFailedKeyword,specDurationKeyword,specPendingKeyword,specPassedKeyword,specBoxContent
-syntax match specBoxContent /[a-zA-Z0-9]\+/ contained
-syntax match specBoxLine /^\(\s\+\)\?|/ contained
-
-" Spec timing
-" syntax match specDuration /\d\+\.\d\+s/ contained
-" syntax keyword specDurationKeyword Duration
-
-highlight def link specSpeckyCmd Question
-highlight def link specCallout Todo
-highlight def link specPassed MoreMsg
-highlight def link specPassedKeyword specPassed
-highlight def link specPending Function
-highlight def link specPendingKeyword specPending
-highlight def link specFailed WarningMsg
-highlight def link specFailedKeyword specFailed
-highlight def link specFailedDetails specFailed
-highlight def link specDuration Normal
-highlight def link specBox LineNr
-highlight def link specBoxContent Constant
-highlight def link specBoxLine LineNr
-highlight def link specErrorLine ErrorMsg
-
-let b:current_syntax = "specrun"
-
--- a/specky/syntax/specrun1.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-"
-" specky: syntax highlighting for the 'spec' script output (rspec 1.x)
-" $Id$
-"
-
-if has("folding")
-  setlocal foldmethod=syntax
-endif
-
-" Command line as it was called, inserted by Specky
-"
-syntax match specSpeckyCmd /^Output of: .*/
-highlight link specSpeckyCmd Question
-"syntax match WarningMsg /\.\./
-
-" Plain output block (...P..F...)
-"
-syntax region specPlain start="^[\.PF]\+" end="^$" contains=specFailedPlain,specPendingPlain
-highlight link specPlain MoreMsg
-
-" Passed specs (specdoc output)
-"
-syntax match specPassed /^- .*/ contains=specFailed,specPending
-highlight link specPassed MoreMsg
-
-" Pending specs (specdoc output)
-"
-syntax match specPending /.*PENDING: .*)$/ contained
-highlight link specPending Function
-"
-" (Plain output)
-syntax match specPendingPlain /P/ contained
-highlight link specPendingPlain Function
-
-" Failed specs (specdoc output)
-"
-syntax match specFailed /.*\(FAILED\|ERROR\) - \d\+)/ contained
-highlight link specFailed WarningMsg
-"
-" (Plain output)
-syntax match specFailedPlain /F/ contained
-highlight link specFailedPlain WarningMsg
-
-" Warning details
-"
-syntax region specFailedDetails start="^\d\+)" end="^$" fold
-highlight link specFailedDetails WarningMsg
-
-" Pending specs
-"
-syntax region specPendingDetails start="^Pending:" end="^$" fold
-highlight link specPendingDetails Function
-
-" Timing information
-"
-syntax match specTimedRun /^Finished in.*/
-highlight link specTimedRun Question
-
-" Status summary
-"
-syntax match specExamplesTotal /^\d\+ examples, .\+/ contains=specTotalFailed,specNoFailures,specTotalPending
-highlight link specExamplesTotal Special
-"
-syntax match specTotalFailed /\d\+ failure\%[s]/ contained
-highlight link specTotalFailed WarningMsg
-"
-syntax match specTotalPending /\d pending/ contained
-highlight link specTotalPending Function
-"
-syntax match specNoFailures /0 failures/ contained
-highlight link specNoFailures MoreMsg
-
-
-let b:current_syntax = "specrun"
-
--- a/syntax/bird.vim	Wed Jan 02 09:14:17 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-"----------------------------------------------------------------------
-" Vim syntax file
-" Language:     Configuration for the Bird Internet Routing Daemon
-" Bird Site:    http://bird.network.cz/
-" Maintainer:   Mahlon E. Smith <mahlon@martini.nu>
-" Version:      $Id$
-"----------------------------------------------------------------------
-
-if has( "folding" )
-	setlocal foldmethod=syntax
-endif
-
-setlocal iskeyword+=;
-
-syntax region  birdInlineComment start=/#/ end=/$/
-syntax region  birdBlockComment  start=/^#/ end=/^\([^#]\|$\)/me=e-1 fold
-highlight link birdInlineComment Comment
-highlight link birdBlockComment  Comment
-
-syntax region  birdString start=/"/ skip=/\\"/ end=/"/
-highlight link birdString String
-
-syntax match   birdNetworkAddressIP4 /\d\+\.\d\+\.\d\+\.\d\+\(\/\d\+\)\?/
-highlight link birdNetworkAddressIP4 Character
-
-syntax match   birdNumber / \d\+\(;\|\s\|$\)/
-highlight link birdNumber Number
-
-syntax match   birdOperator /\(+\|-\|*\|\/\|(\|)\|=\|<\|>\|!\|&&\|||\|\~\)/
-highlight link birdOperator Operator
-
-syntax region  birdFunctionArguments start=/(/ end=/)/ oneline
-syntax region  birdFunction matchgroup=birdFunctionArguments start=/\S\+(/ end=/)/ oneline transparent
-highlight link birdFunctionArguments Function
-
-syntax cluster birdCommon contains=birdInlineComment,birdString,birdNetworkAddressIP4,birdNumber,birdOperator,birdFunction
-
-syntax keyword birdGlobals define table eval
-syntax match   birdGlobals /\(router id\|listen bgp\) /
-highlight link birdGlobals PreProc
-
-syntax region  birdLog start=/^log / end=/$/ keepend contains=@birdCommon,birdLogOptions,birdLogDirective,birdLogLevels
-syntax keyword birdLogOptions syslog stderr contained
-syntax keyword birdLogLevels all all; info warning error fatal trace remote auth bug contained
-syntax keyword birdLogDirective log contained
-highlight link birdLogOptions   Identifier
-highlight link birdLogDirective PreProc
-highlight link birdLogLevels    Special
-highlight link birdLog          Normal
-
-syntax region  birdDebug start=/debug / end=/$/ keepend contains=@birdCommon,birdDebugOptions,birdDebugDirective,birdDebugTypes
-syntax keyword birdDebugOptions protocols commands contained
-syntax keyword birdDebugTypes all all; off off; states routes filters interfaces events packets messages contained
-syntax keyword birdDebugDirective debug contained
-highlight link birdDebugOptions   Identifier
-highlight link birdDebugDirective PreProc
-highlight link birdDebugTypes     Special
-highlight link birdDebug          Normal
-
-syntax region  birdMrt start=/mrtdump / end=/$/ keepend contains=@birdCommon,birdMrtOptions,birdMrtDirective,birdMrtTypes
-syntax keyword birdMrtOptions protocols contained
-syntax keyword birdMrtTypes all all; off off; states messages contained
-syntax keyword birdMrtDirective mrtdump contained
-highlight link birdMrtOptions   Identifier
-highlight link birdMrtDirective PreProc
-highlight link birdMrtTypes     Special
-highlight link birdMrt          Normal
-
-syntax cluster birdProtoShared contains=birdGlobals,birdDebug,birdMrt
-
-syntax region  birdTimeFormat start=/^timeformat / end=/$/ keepend contains=@birdCommon,birdTimeFormatDirective,birdTimeFormatTypes
-syntax keyword birdTimeFormatTypes route protocol base log contained
-syntax keyword birdTimeFormatDirective timeformat contained
-highlight link birdTimeFormatDirective PreProc
-highlight link birdTimeFormatTypes     Identifier
-highlight link birdTimeFormat          Normal
-
-syntax region  birdImportExport start=/\(import\|export\) / end=/$/  contains=@birdCommon,birdImportExportDirective,birdImportExportTypes,birdFilter,birdFilterProtoConstants,birdFilterAttributes
-syntax keyword birdImportExportDirective import export contained
-syntax keyword birdImportExportTypes all all; none none; where contained
-highlight link birdImportExportDirective Type
-highlight link birdImportExportTypes     Special
-highlight link birdImportExport          Normal
-
-syntax region  birdProtocol start=/^protocol / end=/^}/ contains=@birdCommon,@birdProtoShared,birdProtocolDirective,birdProtocolTypes,birdProtocolMisc,birdProtocolGlobals,birdImportExport,birdProtocolDisabled,birdProtocolBools,birdProtocolDate,birdFilter,birdProtocolAttributes fold
-syntax keyword birdProtocolDirective protocol area interface networks stubnet neighbors contained
-syntax match   birdProtocolDirective /virtual link / contained
-syntax keyword birdProtocolTypes bgp device direct kernel ospf pipe rip static contained
-syntax keyword birdProtocolMisc as via self self; drop drop; ignore ignore; normal; large; broadcast; nonbroadcast nonbroadcast; pointopoint; none; simple; plain; md5; cryptographic; eligible; opaque; transparent; always; never; neighbor; multicast; reject; prohibit; contained
-syntax keyword birdProtocolGlobals preference description id password type local neighbor multihop passive passive; persist persist; learn learn; primary rfc1583compat rfc1583compat; tick hidden hidden; summary summary; cost stub stub; hello poll retransmit priority wait authentication strict honor port infinity period mode route contained
-syntax match   birdProtocolGlobals /generate from\|generate to\|accept from\|accept to\|next hop\|missing lladdr\|source address\|rr client\|rr cluster id\|rs client\|enable route refresh\|interpret communities\|enable as4\|capabilities\|advertise ipv4\|route limit\|disable after error\|\(startup \)\?hold time\|\(scan\|keepalive\|timeout\|garbage\|connect retry\|start delay\|error \(wait\|forget\)\) time\|path metric\|prefer older\|default bgp_med\|default bgp_local_pref\|device routes\|\(kernel\|peer\) table\|stub cost\|dead\( count\)\?\|rx buffer/ contained
-syntax match   birdProtocolDate /\d\{2\}-\d\{2\}-\d\{4\} \d\{2\}:\d\{2\}:\d\{2\}/ contained
-syntax keyword birdProtocolDisabled disabled disabled; contained
-syntax keyword birdProtocolBools yes yes; no no; contained
-syntax match   birdProtocolAttributes /bgp_path\|bgp_local_pref\|bgp_med\|bgp_origin\|bgp_next_hop\|bgp_atomic_aggr\|bgp_community\|bgp_originator_id\|bgp_cluster_list\|ospf_metric1\|ospf_metric2\|ospf_tag\|rip_metric\|rip_tag/ contained
-highlight link birdProtocolDirective  PreProc
-highlight link birdProtocolTypes      Function
-highlight link birdProtocolMisc       String
-highlight link birdProtocolGlobals    Constant
-highlight link birdProtocolDisabled   Error
-highlight link birdProtocolBools      Boolean
-highlight link birdProtocolDate		  Number
-highlight link birdProtocolAttributes Identifier
-highlight link birdProtocol           Normal
-
-syntax keyword birdInternalFunctions accept accept; reject reject; print printn return quitbird defined contained
-syntax keyword birdInternalControls if then else case contained
-syntax keyword birdInternalTypes bool int pair quad string ip prefix enum bgppath bgpmask clist contained
-highlight link birdInternalFunctions Keyword
-highlight link birdInternalControls  Conditional
-highlight link birdInternalTypes     Type
-
-" inline, named filters
-syntax match   birdFilter /filter.\+$/ contains=@birdCommon,birdFilterDirective
-" filter definitions
-syntax region  birdFilter start=/^filter\(\s\+\S\+\)\?\s\+/ end=/^}$/ fold contains=@birdCommon,birdFilterDirective,birdFilterProtoConstants,birdInternalFunctions,birdFilterAttributes,birdInternalControls,birdInternalTypes,birdProtocolAttributes
-" inline complex filters
-syntax region  birdFilter start=/filter\s\+{/ end=/};/ fold contains=@birdCommon,birdFilterDirective,birdFilterProtoConstants,birdInternalFunctions,birdFilterAttributes,birdInternalControls,birdInternalTypes,birdProtocolAttributes
-syntax match   birdFilterDirective /filter/ nextgroup=birdFilterName skipwhite contained
-syntax match   birdFilterName /[^{;]\+/ skipwhite contained
-syntax match   birdFilterProtoConstants /\(RTS_DUMMY\|RTS_STATIC\|RTS_INHERIT\|RTS_DEVICE\|RTS_STATIC_DEVICE\|RTS_REDIRECT\|RTS_RIP\|RTS_OSPF\|RTS_OSPF_IA\|RTS_OSPF_EXT1\|RTS_OSPF_EXT2\|RTS_BGP\|RTS_PIPE\)/ contained
-syntax keyword birdFilterAttributes net scope preference from gw proto source cast dest contained
-highlight link birdFilterDirective      PreProc
-highlight link birdFilterName           Function
-highlight link birdFilterProtoConstants Underlined
-highlight link birdFilterAttributes     Identifier
-highlight link birdFilter               Normal
-
-syntax region  birdFunctionDef start=/^function\(\s\+\S\+\)\?\s\+/ end=/^}$/ fold contains=@birdCommon,birdFunctionDirective,birdInternalFunctions,birdInternalControls,birdInternalTypes
-syntax match   birdFunctionDirective /function / nextgroup=birdFunctionName skipwhite contained
-syntax match   birdFunctionName /[^(]\+/ skipwhite contained
-highlight link birdFunctionDirective PreProc
-highlight link birdFunctionName      Function
-highlight link birdFunctionDef       Normal
-
-let b:current_syntax = "bird"
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syntax/rdoc.vim	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,52 @@
+"
+" specky: syntax highlighting for 'rdoc' output
+" $Id$
+
+
+" Separator lines
+"
+syntax match rdocSpeckyLines /^------\+\s\?/ contains=rdocSpeckyTarget,rdocSpeckyMultiples
+highlight link rdocSpeckyLines Comment
+
+" The class/method that we're reading
+"
+syntax match rdocSpeckyTarget / .\+/hs=s+1 contained
+highlight link rdocSpeckyTarget Underlined
+
+" When there are multiple matches to choose from.
+" This is only output by fri.
+"
+syntax match rdocSpeckyMultiples / Multiple choices/hs=s+1 contained
+highlight link rdocSpeckyMultiples WarningMsg
+
+" Secondary headers
+"
+syntax region rdocSpeckyHeader start="^\S\+.\+:$\n-\+" end="-$" keepend contains=rdocSpeckyHeaderLine
+highlight link rdocSpeckyHeader Question
+
+" Secondary header lines
+"
+syntax match rdocSpeckyHeaderLine /^-\+$/ contained 
+highlight link rdocSpeckyHeaderLine NonText
+
+" Remove the formatting characters from the display
+"
+highlight link rdocSpeckySpecials NonText
+
+" _word_ --> italic
+"
+syntax region rdocSpeckyItalic matchgroup=rdocSpeckySpecials start=" _" end="_"
+highlight link rdocSpeckyItalic Special
+
+" *word* --> bold
+"
+syntax region rdocSpeckBold matchgroup=rdocSpeckySpecials start=" \*" end="\*"
+highlight link rdocSpeckyBold Constant
+
+" +word+ --> typewriter
+"
+syntax region rdocSpeckyType matchgroup=rdocSpeckySpecials start=" +" end="+"
+highlight link rdocSpeckyType Identifier
+
+let b:current_syntax = "rdoc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syntax/rspec.vim	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,33 @@
+"
+" specky: syntax highlighting for rspec files.
+" This includes keywords for both rspec 1.x and rspec 2.x.
+" $Id$
+"
+
+runtime! syntax/ruby.vim
+unlet b:current_syntax
+
+syntax keyword rspecGroupMethods context describe example it its let it_should_behave_like shared_examples_for subject it_behaves_like pending specify
+highlight link rspecGroupMethods Type
+
+syntax keyword rspecBeforeAndAfter after after_suite_parts append_after append_before before before_suite_parts prepend_after prepend_before around
+highlight link rspecBeforeAndAfter Statement
+
+syntax keyword rspecMocks double mock stub stub_chain
+highlight link rspecMocks Constant
+
+syntax keyword rspecMockMethods and_raise and_return and_throw and_yield build_child called_max_times expected_args invoke matches
+highlight link rspecMockMethods Function
+
+syntax keyword rspecKeywords should should_not should_not_receive should_receive
+highlight link rspecKeywords Constant
+
+syntax keyword rspecMatchers be change eql equal exist expect have have_at_least have_at_most have_exactly include match matcher raise_error raise_exception respond_to satisfy throw_symbol to to_not when wrap_expectation
+syntax match rspecMatchers /\<\(be\|have\)_\w\+\>/
+highlight link rspecMatchers Function
+
+syntax keyword rspecMessageExpectation advise any_args any_number_of_times anything at_least at_most exactly expected_messages_received generate_error hash_including hash_not_including ignoring_args instance_of matches_at_least_count matches_at_most_count matches_exact_count matches_name_but_not_args negative_expectation_for never no_args once ordered similar_messages times twice verify_messages_received with 
+highlight link rspecMessageExpectation Function
+
+let b:current_syntax = "rspec"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syntax/specrun.vim	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,59 @@
+"
+" specky: syntax highlighting for rspec test output, using the
+" custom specky formatter. (rspec 2.x)
+" $Id$
+"
+
+if has("folding")
+  setlocal foldmethod=syntax
+endif
+
+" Command line as it was called, inserted by Specky
+syntax match specSpeckyCmd /^Output of: .*/
+
+" Pending specs that somehow pass
+syntax keyword specCallout FIXED
+
+" Passed specs
+syntax match specPassed /.*(\d\+.\d\+s)/ contains=specDuration,specBoxLine
+syntax keyword specPassedKeyword Succeeded
+
+" Pending specs
+syntax match specPending /.*PENDING: .*)$/ contains=specDuration,specBoxLine
+syntax keyword specPendingKeyword Pending
+
+" Failed specs
+syntax match specFailed /.*FAILED - #\d\+)/ contains=specDuration,specBoxLine
+syntax keyword specFailedKeyword Failed
+
+" Failure details
+syntax region specFailedDetails start="^FAILURE - #\d\+)" end="^$" fold contains=specCallout,specErrorLine
+syntax match specErrorLine /^  >>/
+
+
+" Boxes
+syntax match specBox /^\(\s\+\)\?\(+[+-]\+\||.*|\)$/ contains=specFailedKeyword,specDurationKeyword,specPendingKeyword,specPassedKeyword,specBoxContent
+syntax match specBoxContent /[a-zA-Z0-9]\+/ contained
+syntax match specBoxLine /^\(\s\+\)\?|/ contained
+
+" Spec timing
+" syntax match specDuration /\d\+\.\d\+s/ contained
+" syntax keyword specDurationKeyword Duration
+
+highlight def link specSpeckyCmd Question
+highlight def link specCallout Todo
+highlight def link specPassed MoreMsg
+highlight def link specPassedKeyword specPassed
+highlight def link specPending Function
+highlight def link specPendingKeyword specPending
+highlight def link specFailed WarningMsg
+highlight def link specFailedKeyword specFailed
+highlight def link specFailedDetails specFailed
+highlight def link specDuration Normal
+highlight def link specBox LineNr
+highlight def link specBoxContent Constant
+highlight def link specBoxLine LineNr
+highlight def link specErrorLine ErrorMsg
+
+let b:current_syntax = "specrun"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syntax/specrun1.vim	Sat Jan 16 11:31:53 2016 -0800
@@ -0,0 +1,75 @@
+"
+" specky: syntax highlighting for the 'spec' script output (rspec 1.x)
+" $Id$
+"
+
+if has("folding")
+  setlocal foldmethod=syntax
+endif
+
+" Command line as it was called, inserted by Specky
+"
+syntax match specSpeckyCmd /^Output of: .*/
+highlight link specSpeckyCmd Question
+"syntax match WarningMsg /\.\./
+
+" Plain output block (...P..F...)
+"
+syntax region specPlain start="^[\.PF]\+" end="^$" contains=specFailedPlain,specPendingPlain
+highlight link specPlain MoreMsg
+
+" Passed specs (specdoc output)
+"
+syntax match specPassed /^- .*/ contains=specFailed,specPending
+highlight link specPassed MoreMsg
+
+" Pending specs (specdoc output)
+"
+syntax match specPending /.*PENDING: .*)$/ contained
+highlight link specPending Function
+"
+" (Plain output)
+syntax match specPendingPlain /P/ contained
+highlight link specPendingPlain Function
+
+" Failed specs (specdoc output)
+"
+syntax match specFailed /.*\(FAILED\|ERROR\) - \d\+)/ contained
+highlight link specFailed WarningMsg
+"
+" (Plain output)
+syntax match specFailedPlain /F/ contained
+highlight link specFailedPlain WarningMsg
+
+" Warning details
+"
+syntax region specFailedDetails start="^\d\+)" end="^$" fold
+highlight link specFailedDetails WarningMsg
+
+" Pending specs
+"
+syntax region specPendingDetails start="^Pending:" end="^$" fold
+highlight link specPendingDetails Function
+
+" Timing information
+"
+syntax match specTimedRun /^Finished in.*/
+highlight link specTimedRun Question
+
+" Status summary
+"
+syntax match specExamplesTotal /^\d\+ examples, .\+/ contains=specTotalFailed,specNoFailures,specTotalPending
+highlight link specExamplesTotal Special
+"
+syntax match specTotalFailed /\d\+ failure\%[s]/ contained
+highlight link specTotalFailed WarningMsg
+"
+syntax match specTotalPending /\d pending/ contained
+highlight link specTotalPending Function
+"
+syntax match specNoFailures /0 failures/ contained
+highlight link specNoFailures MoreMsg
+
+
+let b:current_syntax = "specrun"
+