Repository: Integralist/ProVim Branch: master Commit: 2eb07bb58720 Files: 759 Total size: 5.3 MB Directory structure: gitextract_v4dsqjfv/ ├── .tmux.conf ├── .vim/ │ ├── autoload/ │ │ └── pathogen.vim │ ├── bundle/ │ │ ├── CSApprox/ │ │ │ ├── README │ │ │ ├── after/ │ │ │ │ └── plugin/ │ │ │ │ └── CSApprox.vim │ │ │ ├── autoload/ │ │ │ │ ├── csapprox/ │ │ │ │ │ ├── common.vim │ │ │ │ │ └── per_component.vim │ │ │ │ └── csapprox.vim │ │ │ ├── doc/ │ │ │ │ └── CSApprox.txt │ │ │ └── plugin/ │ │ │ └── CSApprox.vim │ │ ├── Gist.vim/ │ │ │ ├── README │ │ │ ├── README.mkd │ │ │ ├── autoload/ │ │ │ │ └── gist.vim │ │ │ ├── doc/ │ │ │ │ └── gist-vim.txt │ │ │ └── plugin/ │ │ │ └── gist.vim │ │ ├── Tabmerge/ │ │ │ ├── README │ │ │ └── plugin/ │ │ │ └── Tabmerge.vim │ │ ├── ZoomWin/ │ │ │ ├── autoload/ │ │ │ │ └── ZoomWin.vim │ │ │ ├── doc/ │ │ │ │ └── ZoomWin.txt │ │ │ └── plugin/ │ │ │ └── ZoomWinPlugin.vim │ │ ├── ack.vim/ │ │ │ ├── README.md │ │ │ ├── Rakefile │ │ │ ├── doc/ │ │ │ │ └── ack.txt │ │ │ └── plugin/ │ │ │ └── ack.vim │ │ ├── camelcasemotion/ │ │ │ ├── README │ │ │ ├── autoload/ │ │ │ │ └── camelcasemotion.vim │ │ │ ├── doc/ │ │ │ │ └── camelcasemotion.txt │ │ │ └── plugin/ │ │ │ └── camelcasemotion.vim │ │ ├── ctrlp.vim/ │ │ │ ├── autoload/ │ │ │ │ ├── ctrlp/ │ │ │ │ │ ├── bookmarkdir.vim │ │ │ │ │ ├── buffertag.vim │ │ │ │ │ ├── changes.vim │ │ │ │ │ ├── dir.vim │ │ │ │ │ ├── line.vim │ │ │ │ │ ├── mixed.vim │ │ │ │ │ ├── mrufiles.vim │ │ │ │ │ ├── quickfix.vim │ │ │ │ │ ├── rtscript.vim │ │ │ │ │ ├── tag.vim │ │ │ │ │ ├── undo.vim │ │ │ │ │ └── utils.vim │ │ │ │ └── ctrlp.vim │ │ │ ├── doc/ │ │ │ │ └── ctrlp.txt │ │ │ ├── plugin/ │ │ │ │ └── ctrlp.vim │ │ │ └── readme.md │ │ ├── emmet-vim/ │ │ │ ├── Makefile │ │ │ ├── README.mkd │ │ │ ├── TODO │ │ │ ├── TUTORIAL │ │ │ ├── autoload/ │ │ │ │ ├── emmet/ │ │ │ │ │ ├── lang/ │ │ │ │ │ │ ├── css.vim │ │ │ │ │ │ ├── haml.vim │ │ │ │ │ │ ├── html.vim │ │ │ │ │ │ ├── less.vim │ │ │ │ │ │ ├── sass.vim │ │ │ │ │ │ ├── scss.vim │ │ │ │ │ │ └── slim.vim │ │ │ │ │ ├── lang.vim │ │ │ │ │ ├── lorem/ │ │ │ │ │ │ ├── en.vim │ │ │ │ │ │ └── ja.vim │ │ │ │ │ └── util.vim │ │ │ │ └── emmet.vim │ │ │ ├── doc/ │ │ │ │ └── emmet.txt │ │ │ ├── emmet.vim.vimup │ │ │ ├── plugin/ │ │ │ │ └── emmet.vim │ │ │ └── unittest.vim │ │ ├── gruvbox/ │ │ │ ├── README.md │ │ │ ├── autoload/ │ │ │ │ └── gruvbox.vim │ │ │ ├── colors/ │ │ │ │ └── gruvbox.vim │ │ │ ├── gruvbox_256palette.sh │ │ │ └── gruvbox_256palette_osx.sh │ │ ├── html5.vim/ │ │ │ ├── CHANGES.markdown │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── autoload/ │ │ │ │ ├── htmlcomplete.vim │ │ │ │ └── xml/ │ │ │ │ ├── aria.vim │ │ │ │ └── html5.vim │ │ │ ├── config.mk │ │ │ ├── indent/ │ │ │ │ └── html.vim │ │ │ └── syntax/ │ │ │ ├── html/ │ │ │ │ ├── aria.vim │ │ │ │ └── rdfa.vim │ │ │ ├── html.vim │ │ │ └── javascript/ │ │ │ └── html5.vim │ │ ├── nerdtree/ │ │ │ ├── README.markdown │ │ │ ├── autoload/ │ │ │ │ └── nerdtree.vim │ │ │ ├── doc/ │ │ │ │ └── NERD_tree.txt │ │ │ ├── lib/ │ │ │ │ └── nerdtree/ │ │ │ │ ├── bookmark.vim │ │ │ │ ├── creator.vim │ │ │ │ ├── key_map.vim │ │ │ │ ├── menu_controller.vim │ │ │ │ ├── menu_item.vim │ │ │ │ ├── opener.vim │ │ │ │ ├── path.vim │ │ │ │ ├── tree_dir_node.vim │ │ │ │ └── tree_file_node.vim │ │ │ ├── nerdtree_plugin/ │ │ │ │ ├── exec_menuitem.vim │ │ │ │ └── fs_menu.vim │ │ │ ├── plugin/ │ │ │ │ └── NERD_tree.vim │ │ │ └── syntax/ │ │ │ └── nerdtree.vim │ │ ├── paredit.vim/ │ │ │ ├── README │ │ │ ├── doc/ │ │ │ │ └── paredit.txt │ │ │ └── plugin/ │ │ │ └── paredit.vim │ │ ├── rainbow_parentheses.vim/ │ │ │ ├── autoload/ │ │ │ │ └── rainbow_parentheses.vim │ │ │ ├── plugin/ │ │ │ │ └── rainbow_parentheses.vim │ │ │ └── readme.md │ │ ├── supertab/ │ │ │ ├── Makefile │ │ │ ├── README.rst │ │ │ ├── doc/ │ │ │ │ └── supertab.txt │ │ │ └── plugin/ │ │ │ └── supertab.vim │ │ ├── syntastic/ │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENCE │ │ │ ├── README.markdown │ │ │ ├── autoload/ │ │ │ │ └── syntastic/ │ │ │ │ ├── c.vim │ │ │ │ ├── log.vim │ │ │ │ ├── postprocess.vim │ │ │ │ ├── preprocess.vim │ │ │ │ └── util.vim │ │ │ ├── doc/ │ │ │ │ └── syntastic.txt │ │ │ ├── plugin/ │ │ │ │ ├── syntastic/ │ │ │ │ │ ├── autoloclist.vim │ │ │ │ │ ├── balloons.vim │ │ │ │ │ ├── checker.vim │ │ │ │ │ ├── cursor.vim │ │ │ │ │ ├── highlighting.vim │ │ │ │ │ ├── loclist.vim │ │ │ │ │ ├── modemap.vim │ │ │ │ │ ├── notifiers.vim │ │ │ │ │ ├── registry.vim │ │ │ │ │ └── signs.vim │ │ │ │ └── syntastic.vim │ │ │ └── syntax_checkers/ │ │ │ ├── actionscript/ │ │ │ │ └── mxmlc.vim │ │ │ ├── ada/ │ │ │ │ └── gcc.vim │ │ │ ├── applescript/ │ │ │ │ └── osacompile.vim │ │ │ ├── asciidoc/ │ │ │ │ └── asciidoc.vim │ │ │ ├── asm/ │ │ │ │ └── gcc.vim │ │ │ ├── bemhtml/ │ │ │ │ └── bemhtmllint.vim │ │ │ ├── c/ │ │ │ │ ├── avrgcc.vim │ │ │ │ ├── checkpatch.vim │ │ │ │ ├── cppcheck.vim │ │ │ │ ├── gcc.vim │ │ │ │ ├── make.vim │ │ │ │ ├── oclint.vim │ │ │ │ ├── sparse.vim │ │ │ │ └── splint.vim │ │ │ ├── chef/ │ │ │ │ └── foodcritic.vim │ │ │ ├── co/ │ │ │ │ └── coco.vim │ │ │ ├── cobol/ │ │ │ │ └── cobc.vim │ │ │ ├── coffee/ │ │ │ │ ├── coffee.vim │ │ │ │ └── coffeelint.vim │ │ │ ├── coq/ │ │ │ │ └── coqtop.vim │ │ │ ├── cpp/ │ │ │ │ ├── cppcheck.vim │ │ │ │ ├── cpplint.vim │ │ │ │ ├── gcc.vim │ │ │ │ └── oclint.vim │ │ │ ├── cs/ │ │ │ │ └── mcs.vim │ │ │ ├── css/ │ │ │ │ ├── csslint.vim │ │ │ │ ├── phpcs.vim │ │ │ │ └── prettycss.vim │ │ │ ├── cucumber/ │ │ │ │ └── cucumber.vim │ │ │ ├── cuda/ │ │ │ │ └── nvcc.vim │ │ │ ├── d/ │ │ │ │ └── dmd.vim │ │ │ ├── dart/ │ │ │ │ └── dartanalyzer.vim │ │ │ ├── docbk/ │ │ │ │ └── xmllint.vim │ │ │ ├── dustjs/ │ │ │ │ └── swiffer.vim │ │ │ ├── elixir/ │ │ │ │ └── elixir.vim │ │ │ ├── erlang/ │ │ │ │ ├── erlang_check_file.erl │ │ │ │ ├── escript.vim │ │ │ │ └── syntaxerl.vim │ │ │ ├── eruby/ │ │ │ │ └── ruby.vim │ │ │ ├── fortran/ │ │ │ │ └── gfortran.vim │ │ │ ├── glsl/ │ │ │ │ └── cgc.vim │ │ │ ├── go/ │ │ │ │ ├── go.vim │ │ │ │ ├── gofmt.vim │ │ │ │ ├── golint.vim │ │ │ │ ├── gotype.vim │ │ │ │ └── govet.vim │ │ │ ├── haml/ │ │ │ │ ├── haml.vim │ │ │ │ └── haml_lint.vim │ │ │ ├── handlebars/ │ │ │ │ └── handlebars.vim │ │ │ ├── haskell/ │ │ │ │ ├── ghc-mod.vim │ │ │ │ ├── hdevtools.vim │ │ │ │ └── hlint.vim │ │ │ ├── haxe/ │ │ │ │ └── haxe.vim │ │ │ ├── hss/ │ │ │ │ └── hss.vim │ │ │ ├── html/ │ │ │ │ ├── jshint.vim │ │ │ │ ├── tidy.vim │ │ │ │ ├── validator.vim │ │ │ │ └── w3.vim │ │ │ ├── java/ │ │ │ │ ├── checkstyle.vim │ │ │ │ └── javac.vim │ │ │ ├── javascript/ │ │ │ │ ├── closurecompiler.vim │ │ │ │ ├── eslint.vim │ │ │ │ ├── gjslint.vim │ │ │ │ ├── jscs.vim │ │ │ │ ├── jshint.vim │ │ │ │ ├── jsl.vim │ │ │ │ ├── jslint.vim │ │ │ │ └── jsxhint.vim │ │ │ ├── json/ │ │ │ │ ├── jsonlint.vim │ │ │ │ └── jsonval.vim │ │ │ ├── less/ │ │ │ │ ├── less-lint.coffee │ │ │ │ ├── less-lint.js │ │ │ │ └── lessc.vim │ │ │ ├── lex/ │ │ │ │ └── flex.vim │ │ │ ├── limbo/ │ │ │ │ └── limbo.vim │ │ │ ├── lisp/ │ │ │ │ └── clisp.vim │ │ │ ├── llvm/ │ │ │ │ └── llvm.vim │ │ │ ├── lua/ │ │ │ │ └── luac.vim │ │ │ ├── matlab/ │ │ │ │ └── mlint.vim │ │ │ ├── nasm/ │ │ │ │ └── nasm.vim │ │ │ ├── nroff/ │ │ │ │ └── mandoc.vim │ │ │ ├── objc/ │ │ │ │ ├── gcc.vim │ │ │ │ └── oclint.vim │ │ │ ├── objcpp/ │ │ │ │ ├── gcc.vim │ │ │ │ └── oclint.vim │ │ │ ├── ocaml/ │ │ │ │ └── camlp4o.vim │ │ │ ├── perl/ │ │ │ │ ├── perl.vim │ │ │ │ ├── perlcritic.vim │ │ │ │ └── podchecker.vim │ │ │ ├── php/ │ │ │ │ ├── php.vim │ │ │ │ ├── phpcs.vim │ │ │ │ └── phpmd.vim │ │ │ ├── po/ │ │ │ │ └── msgfmt.vim │ │ │ ├── pod/ │ │ │ │ └── podchecker.vim │ │ │ ├── puppet/ │ │ │ │ ├── puppet.vim │ │ │ │ └── puppetlint.vim │ │ │ ├── python/ │ │ │ │ ├── compile.py │ │ │ │ ├── flake8.vim │ │ │ │ ├── frosted.vim │ │ │ │ ├── pep257.vim │ │ │ │ ├── pep8.vim │ │ │ │ ├── py3kwarn.vim │ │ │ │ ├── pyflakes.vim │ │ │ │ ├── pylama.vim │ │ │ │ ├── pylint.vim │ │ │ │ └── python.vim │ │ │ ├── racket/ │ │ │ │ ├── code-ayatollah.vim │ │ │ │ └── racket.vim │ │ │ ├── rst/ │ │ │ │ ├── rst2pseudoxml.vim │ │ │ │ └── rstcheck.vim │ │ │ ├── ruby/ │ │ │ │ ├── jruby.vim │ │ │ │ ├── macruby.vim │ │ │ │ ├── mri.vim │ │ │ │ ├── rubocop.vim │ │ │ │ └── rubylint.vim │ │ │ ├── rust/ │ │ │ │ └── rustc.vim │ │ │ ├── sass/ │ │ │ │ └── sass.vim │ │ │ ├── scala/ │ │ │ │ ├── fsc.vim │ │ │ │ └── scalac.vim │ │ │ ├── scss/ │ │ │ │ ├── sass.vim │ │ │ │ └── scss_lint.vim │ │ │ ├── sh/ │ │ │ │ ├── checkbashisms.vim │ │ │ │ ├── sh.vim │ │ │ │ └── shellcheck.vim │ │ │ ├── slim/ │ │ │ │ └── slimrb.vim │ │ │ ├── tcl/ │ │ │ │ └── nagelfar.vim │ │ │ ├── tex/ │ │ │ │ ├── chktex.vim │ │ │ │ └── lacheck.vim │ │ │ ├── texinfo/ │ │ │ │ └── makeinfo.vim │ │ │ ├── text/ │ │ │ │ ├── atdtool.vim │ │ │ │ └── language_check.vim │ │ │ ├── twig/ │ │ │ │ └── twiglint.vim │ │ │ ├── typescript/ │ │ │ │ └── tsc.vim │ │ │ ├── vala/ │ │ │ │ └── valac.vim │ │ │ ├── verilog/ │ │ │ │ └── verilator.vim │ │ │ ├── vhdl/ │ │ │ │ └── ghdl.vim │ │ │ ├── vim/ │ │ │ │ └── vimlint.vim │ │ │ ├── xhtml/ │ │ │ │ ├── jshint.vim │ │ │ │ └── tidy.vim │ │ │ ├── xml/ │ │ │ │ └── xmllint.vim │ │ │ ├── xslt/ │ │ │ │ └── xmllint.vim │ │ │ ├── yacc/ │ │ │ │ └── bison.vim │ │ │ ├── yaml/ │ │ │ │ ├── jsyaml.vim │ │ │ │ └── yamlxs.vim │ │ │ ├── z80/ │ │ │ │ └── z80syntaxchecker.vim │ │ │ ├── zpt/ │ │ │ │ └── zptlint.vim │ │ │ └── zsh/ │ │ │ ├── shellcheck.vim │ │ │ └── zsh.vim │ │ ├── tabular/ │ │ │ ├── README.md │ │ │ ├── after/ │ │ │ │ └── plugin/ │ │ │ │ └── TabularMaps.vim │ │ │ ├── autoload/ │ │ │ │ └── tabular.vim │ │ │ ├── doc/ │ │ │ │ └── Tabular.txt │ │ │ └── plugin/ │ │ │ └── Tabular.vim │ │ ├── targets.vim/ │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── autoload/ │ │ │ │ └── targets.vim │ │ │ ├── cheatsheet.md │ │ │ ├── doc/ │ │ │ │ └── targets.txt │ │ │ ├── plugin/ │ │ │ │ └── targets.vim │ │ │ └── test/ │ │ │ ├── Makefile │ │ │ ├── test.vim │ │ │ ├── test1.in │ │ │ ├── test1.ok │ │ │ ├── test1.out │ │ │ ├── test2.in │ │ │ ├── test2.ok │ │ │ ├── test2.out │ │ │ ├── test3.in │ │ │ ├── test3.ok │ │ │ ├── test3.out │ │ │ ├── test4.in │ │ │ ├── test4.ok │ │ │ └── test4.out │ │ ├── textutil.vim/ │ │ │ ├── README │ │ │ └── plugin/ │ │ │ └── textutil.vim │ │ ├── tomorrow-night-vim/ │ │ │ └── colors/ │ │ │ ├── Tomorrow-Night-Blue.vim │ │ │ ├── Tomorrow-Night-Bright.vim │ │ │ ├── Tomorrow-Night-Eighties.vim │ │ │ ├── Tomorrow-Night.vim │ │ │ └── Tomorrow.vim │ │ ├── vim-airline/ │ │ │ ├── .travis.yml │ │ │ ├── Gemfile │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── Rakefile │ │ │ ├── autoload/ │ │ │ │ ├── airline/ │ │ │ │ │ ├── builder.vim │ │ │ │ │ ├── debug.vim │ │ │ │ │ ├── deprecation.vim │ │ │ │ │ ├── extensions/ │ │ │ │ │ │ ├── branch.vim │ │ │ │ │ │ ├── bufferline.vim │ │ │ │ │ │ ├── commandt.vim │ │ │ │ │ │ ├── csv.vim │ │ │ │ │ │ ├── ctrlp.vim │ │ │ │ │ │ ├── default.vim │ │ │ │ │ │ ├── eclim.vim │ │ │ │ │ │ ├── example.vim │ │ │ │ │ │ ├── hunks.vim │ │ │ │ │ │ ├── netrw.vim │ │ │ │ │ │ ├── promptline.vim │ │ │ │ │ │ ├── quickfix.vim │ │ │ │ │ │ ├── syntastic.vim │ │ │ │ │ │ ├── tabline/ │ │ │ │ │ │ │ ├── default.vim │ │ │ │ │ │ │ ├── unique_tail.vim │ │ │ │ │ │ │ └── unique_tail_improved.vim │ │ │ │ │ │ ├── tabline.vim │ │ │ │ │ │ ├── tagbar.vim │ │ │ │ │ │ ├── tmuxline.vim │ │ │ │ │ │ ├── undotree.vim │ │ │ │ │ │ ├── unite.vim │ │ │ │ │ │ ├── virtualenv.vim │ │ │ │ │ │ └── whitespace.vim │ │ │ │ │ ├── extensions.vim │ │ │ │ │ ├── highlighter.vim │ │ │ │ │ ├── init.vim │ │ │ │ │ ├── parts.vim │ │ │ │ │ ├── section.vim │ │ │ │ │ ├── themes/ │ │ │ │ │ │ ├── badwolf.vim │ │ │ │ │ │ ├── base16.vim │ │ │ │ │ │ ├── bubblegum.vim │ │ │ │ │ │ ├── dark.vim │ │ │ │ │ │ ├── hybrid.vim │ │ │ │ │ │ ├── jellybeans.vim │ │ │ │ │ │ ├── kalisi.vim │ │ │ │ │ │ ├── kolor.vim │ │ │ │ │ │ ├── laederon.vim │ │ │ │ │ │ ├── light.vim │ │ │ │ │ │ ├── lucius.vim │ │ │ │ │ │ ├── luna.vim │ │ │ │ │ │ ├── molokai.vim │ │ │ │ │ │ ├── monochrome.vim │ │ │ │ │ │ ├── murmur.vim │ │ │ │ │ │ ├── powerlineish.vim │ │ │ │ │ │ ├── serene.vim │ │ │ │ │ │ ├── simple.vim │ │ │ │ │ │ ├── sol.vim │ │ │ │ │ │ ├── solarized.vim │ │ │ │ │ │ ├── tomorrow.vim │ │ │ │ │ │ ├── ubaryd.vim │ │ │ │ │ │ ├── understated.vim │ │ │ │ │ │ ├── wombat.vim │ │ │ │ │ │ └── zenburn.vim │ │ │ │ │ ├── themes.vim │ │ │ │ │ └── util.vim │ │ │ │ └── airline.vim │ │ │ ├── doc/ │ │ │ │ └── airline.txt │ │ │ ├── plugin/ │ │ │ │ └── airline.vim │ │ │ └── t/ │ │ │ ├── airline.vim │ │ │ ├── builder.vim │ │ │ ├── commands.vim │ │ │ ├── extensions_default.vim │ │ │ ├── highlighter.vim │ │ │ ├── init.vim │ │ │ ├── parts.vim │ │ │ ├── section.vim │ │ │ ├── themes.vim │ │ │ └── util.vim │ │ ├── vim-bookmarks/ │ │ │ ├── .travis.yml │ │ │ ├── CONTRIBUTING.md │ │ │ ├── Gemfile │ │ │ ├── Guardfile │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── Rakefile │ │ │ ├── autoload/ │ │ │ │ ├── bm.vim │ │ │ │ ├── bm_sign.vim │ │ │ │ └── util.vim │ │ │ ├── doc/ │ │ │ │ └── bookmarks.txt │ │ │ ├── plugin/ │ │ │ │ └── bookmark.vim │ │ │ └── t/ │ │ │ ├── bm_sign_spec.vim │ │ │ ├── bm_spec.vim │ │ │ └── util_spec.vim │ │ ├── vim-choosewin/ │ │ │ ├── README-JP.md │ │ │ ├── README.md │ │ │ ├── Rakefile │ │ │ ├── VERSION │ │ │ ├── autoload/ │ │ │ │ ├── choosewin/ │ │ │ │ │ ├── data/ │ │ │ │ │ │ ├── _sample │ │ │ │ │ │ ├── large │ │ │ │ │ │ ├── small │ │ │ │ │ │ └── small_horizontal │ │ │ │ │ ├── font.vim │ │ │ │ │ ├── highlighter.vim │ │ │ │ │ ├── hlmanager.vim │ │ │ │ │ └── overlay.vim │ │ │ │ └── choosewin.vim │ │ │ ├── doc/ │ │ │ │ └── choosewin.txt │ │ │ ├── misc/ │ │ │ │ └── work.vim │ │ │ ├── plugin/ │ │ │ │ └── choosewin.vim │ │ │ └── test/ │ │ │ └── font.vim │ │ ├── vim-classpath/ │ │ │ ├── README.markdown │ │ │ ├── autoload/ │ │ │ │ └── classpath.vim │ │ │ ├── doc/ │ │ │ │ └── classpath.txt │ │ │ └── plugin/ │ │ │ └── classpath.vim │ │ ├── vim-clojure-static/ │ │ │ ├── LICENSE.txt │ │ │ ├── README.markdown │ │ │ ├── autoload/ │ │ │ │ └── clojurecomplete.vim │ │ │ ├── clj/ │ │ │ │ ├── project.clj │ │ │ │ ├── src/ │ │ │ │ │ └── vim_clojure_static/ │ │ │ │ │ ├── generate.clj │ │ │ │ │ ├── test.clj │ │ │ │ │ └── update.clj │ │ │ │ ├── test/ │ │ │ │ │ └── vim_clojure_static/ │ │ │ │ │ └── syntax_test.clj │ │ │ │ └── vim/ │ │ │ │ └── test-runtime.vim │ │ │ ├── doc/ │ │ │ │ └── clojure.txt │ │ │ ├── ftdetect/ │ │ │ │ └── clojure.vim │ │ │ ├── ftplugin/ │ │ │ │ └── clojure.vim │ │ │ ├── indent/ │ │ │ │ └── clojure.vim │ │ │ └── syntax/ │ │ │ └── clojure.vim │ │ ├── vim-colors-solarized/ │ │ │ ├── README.mkd │ │ │ ├── autoload/ │ │ │ │ └── togglebg.vim │ │ │ ├── colors/ │ │ │ │ └── solarized.vim │ │ │ └── doc/ │ │ │ └── solarized.txt │ │ ├── vim-commentary/ │ │ │ ├── README.markdown │ │ │ ├── doc/ │ │ │ │ └── commentary.txt │ │ │ └── plugin/ │ │ │ └── commentary.vim │ │ ├── vim-css-color/ │ │ │ ├── README.md │ │ │ ├── after/ │ │ │ │ └── syntax/ │ │ │ │ ├── css.vim │ │ │ │ ├── html.vim │ │ │ │ ├── less.vim │ │ │ │ ├── sass.vim │ │ │ │ ├── stylus.vim │ │ │ │ └── vim.vim │ │ │ ├── autoload/ │ │ │ │ └── css_color.vim │ │ │ └── tests/ │ │ │ ├── bench │ │ │ ├── example.less │ │ │ ├── example.sass │ │ │ ├── example.stylus │ │ │ └── torture.css │ │ ├── vim-cucumber/ │ │ │ ├── compiler/ │ │ │ │ └── cucumber.vim │ │ │ ├── ftdetect/ │ │ │ │ └── cucumber.vim │ │ │ ├── ftplugin/ │ │ │ │ └── cucumber.vim │ │ │ ├── indent/ │ │ │ │ └── cucumber.vim │ │ │ └── syntax/ │ │ │ └── cucumber.vim │ │ ├── vim-dispatch/ │ │ │ ├── CONTRIBUTING.markdown │ │ │ ├── README.markdown │ │ │ ├── autoload/ │ │ │ │ ├── dispatch/ │ │ │ │ │ ├── headless.vim │ │ │ │ │ ├── iterm.vim │ │ │ │ │ ├── screen.vim │ │ │ │ │ ├── tmux.vim │ │ │ │ │ ├── windows.vim │ │ │ │ │ └── x11.vim │ │ │ │ └── dispatch.vim │ │ │ ├── doc/ │ │ │ │ └── dispatch.txt │ │ │ └── plugin/ │ │ │ └── dispatch.vim │ │ ├── vim-endwise/ │ │ │ ├── README.markdown │ │ │ └── plugin/ │ │ │ └── endwise.vim │ │ ├── vim-fireplace/ │ │ │ ├── CONTRIBUTING.markdown │ │ │ ├── README.markdown │ │ │ ├── autoload/ │ │ │ │ ├── fireplace/ │ │ │ │ │ └── nrepl.vim │ │ │ │ └── nrepl/ │ │ │ │ └── fireplace_connection.vim │ │ │ ├── compiler/ │ │ │ │ └── lein.vim │ │ │ ├── doc/ │ │ │ │ └── fireplace.txt │ │ │ ├── plugin/ │ │ │ │ ├── fireplace/ │ │ │ │ │ └── zip.vim │ │ │ │ └── fireplace.vim │ │ │ └── python/ │ │ │ └── nrepl_fireplace.py │ │ ├── vim-fugitive/ │ │ │ ├── CONTRIBUTING.markdown │ │ │ ├── README.markdown │ │ │ ├── doc/ │ │ │ │ └── fugitive.txt │ │ │ └── plugin/ │ │ │ └── fugitive.vim │ │ ├── vim-gitgutter/ │ │ │ ├── README.mkd │ │ │ ├── autoload/ │ │ │ │ ├── debug.vim │ │ │ │ ├── diff.vim │ │ │ │ ├── highlight.vim │ │ │ │ ├── hunk.vim │ │ │ │ ├── sign.vim │ │ │ │ └── utility.vim │ │ │ ├── doc/ │ │ │ │ └── gitgutter.txt │ │ │ └── plugin/ │ │ │ └── gitgutter.vim │ │ ├── vim-haml/ │ │ │ ├── compiler/ │ │ │ │ ├── haml.vim │ │ │ │ └── sass.vim │ │ │ ├── ftdetect/ │ │ │ │ └── haml.vim │ │ │ ├── ftplugin/ │ │ │ │ ├── haml.vim │ │ │ │ ├── sass.vim │ │ │ │ └── scss.vim │ │ │ ├── indent/ │ │ │ │ ├── haml.vim │ │ │ │ ├── sass.vim │ │ │ │ └── scss.vim │ │ │ └── syntax/ │ │ │ ├── haml.vim │ │ │ ├── sass.vim │ │ │ └── scss.vim │ │ ├── vim-localrc/ │ │ │ ├── autoload/ │ │ │ │ └── localrc.vim │ │ │ ├── doc/ │ │ │ │ └── localrc.txt │ │ │ └── plugin/ │ │ │ └── localrc.vim │ │ ├── vim-markdown/ │ │ │ ├── ftdetect/ │ │ │ │ └── markdown.vim │ │ │ ├── ftplugin/ │ │ │ │ └── markdown.vim │ │ │ └── syntax/ │ │ │ └── markdown.vim │ │ ├── vim-polyglot/ │ │ │ ├── .travis.yml │ │ │ ├── Gemfile │ │ │ ├── README.md │ │ │ ├── after/ │ │ │ │ ├── ftdetect/ │ │ │ │ │ └── rspec.vim │ │ │ │ ├── ftplugin/ │ │ │ │ │ └── haskell.vim │ │ │ │ ├── indent/ │ │ │ │ │ └── html.vim │ │ │ │ └── syntax/ │ │ │ │ ├── coffee.vim │ │ │ │ ├── cpp.vim │ │ │ │ ├── css/ │ │ │ │ │ └── vim-coloresque.vim │ │ │ │ ├── haml.vim │ │ │ │ ├── help.vim │ │ │ │ ├── html.vim │ │ │ │ ├── less.vim │ │ │ │ ├── rspec.vim │ │ │ │ ├── ruby.vim │ │ │ │ ├── rust.vim │ │ │ │ ├── sass.vim │ │ │ │ ├── scss.vim │ │ │ │ ├── stylus.vim │ │ │ │ ├── tex.vim │ │ │ │ └── vim.vim │ │ │ ├── autoload/ │ │ │ │ ├── clojurecomplete.vim │ │ │ │ ├── coffee.vim │ │ │ │ ├── erlangcomplete.vim │ │ │ │ ├── go/ │ │ │ │ │ └── complete.vim │ │ │ │ ├── htmlcomplete.vim │ │ │ │ ├── rubycomplete.vim │ │ │ │ └── xml/ │ │ │ │ ├── aria.vim │ │ │ │ └── html5.vim │ │ │ ├── build │ │ │ ├── compiler/ │ │ │ │ ├── cake.vim │ │ │ │ ├── coffee.vim │ │ │ │ ├── cucumber.vim │ │ │ │ ├── erlang.vim │ │ │ │ ├── eruby.vim │ │ │ │ ├── exunit.vim │ │ │ │ ├── go.vim │ │ │ │ ├── haml.vim │ │ │ │ ├── rake.vim │ │ │ │ ├── rspec.vim │ │ │ │ ├── ruby.vim │ │ │ │ ├── rubyunit.vim │ │ │ │ ├── rustc.vim │ │ │ │ ├── sass.vim │ │ │ │ └── typescript.vim │ │ │ ├── ftdetect/ │ │ │ │ └── polyglot.vim │ │ │ ├── ftplugin/ │ │ │ │ ├── clojure.vim │ │ │ │ ├── coffee.vim │ │ │ │ ├── csv.vim │ │ │ │ ├── cucumber.vim │ │ │ │ ├── elixir.vim │ │ │ │ ├── erlang.vim │ │ │ │ ├── erlang_refactor.vim │ │ │ │ ├── eruby.vim │ │ │ │ ├── git.vim │ │ │ │ ├── gitcommit.vim │ │ │ │ ├── gitconfig.vim │ │ │ │ ├── gitrebase.vim │ │ │ │ ├── gitsendemail.vim │ │ │ │ ├── go/ │ │ │ │ │ ├── fmt.vim │ │ │ │ │ └── import.vim │ │ │ │ ├── go.vim │ │ │ │ ├── haml.vim │ │ │ │ ├── jade.vim │ │ │ │ ├── latex-box/ │ │ │ │ │ ├── common.vim │ │ │ │ │ ├── complete.vim │ │ │ │ │ ├── findmain.vim │ │ │ │ │ ├── folding.vim │ │ │ │ │ ├── latexmk.vim │ │ │ │ │ ├── mappings.vim │ │ │ │ │ └── motion.vim │ │ │ │ ├── latextoc.vim │ │ │ │ ├── less.vim │ │ │ │ ├── markdown.vim │ │ │ │ ├── mustache.vim │ │ │ │ ├── ocaml.vim │ │ │ │ ├── opencl.vim │ │ │ │ ├── perl.vim │ │ │ │ ├── perl6.vim │ │ │ │ ├── puppet.vim │ │ │ │ ├── r.vim │ │ │ │ ├── rhelp.vim │ │ │ │ ├── rnoweb.vim │ │ │ │ ├── ruby.vim │ │ │ │ ├── rust.vim │ │ │ │ ├── sass.vim │ │ │ │ ├── scala.vim │ │ │ │ ├── scala.xpt.vim │ │ │ │ ├── scss.vim │ │ │ │ ├── stylus.vim │ │ │ │ ├── tex_LatexBox.vim │ │ │ │ ├── textile.vim │ │ │ │ ├── tt2html.vim │ │ │ │ ├── twig.vim │ │ │ │ ├── typescript.vim │ │ │ │ └── xs.vim │ │ │ ├── indent/ │ │ │ │ ├── arduino.vim │ │ │ │ ├── clojure.vim │ │ │ │ ├── coffee.vim │ │ │ │ ├── cucumber.vim │ │ │ │ ├── elixir.vim │ │ │ │ ├── erlang.vim │ │ │ │ ├── eruby.vim │ │ │ │ ├── gitconfig.vim │ │ │ │ ├── go.vim │ │ │ │ ├── haml.vim │ │ │ │ ├── haskell.vim │ │ │ │ ├── html.vim │ │ │ │ ├── jade.vim │ │ │ │ ├── javascript.vim │ │ │ │ ├── jst.vim │ │ │ │ ├── less.vim │ │ │ │ ├── ocaml.vim │ │ │ │ ├── opencl.vim │ │ │ │ ├── perl.vim │ │ │ │ ├── perl6.vim │ │ │ │ ├── puppet.vim │ │ │ │ ├── ruby.vim │ │ │ │ ├── rust.vim │ │ │ │ ├── sass.vim │ │ │ │ ├── scala.vim │ │ │ │ ├── scss.vim │ │ │ │ ├── slim.vim │ │ │ │ ├── stylus.vim │ │ │ │ └── tex.vim │ │ │ ├── spec/ │ │ │ │ ├── build_spec.rb │ │ │ │ ├── loading_spec.rb │ │ │ │ └── spec_helper.rb │ │ │ └── syntax/ │ │ │ ├── arduino.vim │ │ │ ├── c.vim │ │ │ ├── cabal.vim │ │ │ ├── clojure.vim │ │ │ ├── coffee.vim │ │ │ ├── cpp.vim │ │ │ ├── csv.vim │ │ │ ├── cucumber.vim │ │ │ ├── dockerfile.vim │ │ │ ├── elixir.vim │ │ │ ├── erlang.vim │ │ │ ├── eruby.vim │ │ │ ├── git.vim │ │ │ ├── gitcommit.vim │ │ │ ├── gitconfig.vim │ │ │ ├── gitrebase.vim │ │ │ ├── gitsendemail.vim │ │ │ ├── go.vim │ │ │ ├── godoc.vim │ │ │ ├── haml.vim │ │ │ ├── haskell.vim │ │ │ ├── html/ │ │ │ │ ├── aria.vim │ │ │ │ └── rdfa.vim │ │ │ ├── html.vim │ │ │ ├── jade.vim │ │ │ ├── javascript/ │ │ │ │ └── html5.vim │ │ │ ├── javascript.vim │ │ │ ├── json.vim │ │ │ ├── jst.vim │ │ │ ├── latextoc.vim │ │ │ ├── less.vim │ │ │ ├── markdown.vim │ │ │ ├── mason.vim │ │ │ ├── mustache.vim │ │ │ ├── nginx.vim │ │ │ ├── ocaml.vim │ │ │ ├── octave.vim │ │ │ ├── opencl.vim │ │ │ ├── perl.vim │ │ │ ├── perl6.vim │ │ │ ├── php.vim │ │ │ ├── pod.vim │ │ │ ├── proto.vim │ │ │ ├── puppet.vim │ │ │ ├── python.vim │ │ │ ├── rhelp.vim │ │ │ ├── rnoweb.vim │ │ │ ├── ruby.vim │ │ │ ├── rust.vim │ │ │ ├── sass.vim │ │ │ ├── sbt.vim │ │ │ ├── scala.vim │ │ │ ├── scss.vim │ │ │ ├── slim.vim │ │ │ ├── stylus.vim │ │ │ ├── textile.vim │ │ │ ├── tmux.vim │ │ │ ├── tt2.vim │ │ │ ├── tt2html.vim │ │ │ ├── tt2js.vim │ │ │ ├── twig.vim │ │ │ ├── typescript.vim │ │ │ ├── vbnet.vim │ │ │ ├── xs.vim │ │ │ └── xsl.vim │ │ ├── vim-repeat/ │ │ │ ├── README.markdown │ │ │ └── autoload/ │ │ │ └── repeat.vim │ │ ├── vim-surround/ │ │ │ ├── README.markdown │ │ │ ├── doc/ │ │ │ │ └── surround.txt │ │ │ └── plugin/ │ │ │ └── surround.vim │ │ ├── vim-tbone/ │ │ │ ├── CONTRIBUTING.markdown │ │ │ ├── README.markdown │ │ │ ├── autoload/ │ │ │ │ └── tbone.vim │ │ │ ├── doc/ │ │ │ │ └── tbone.txt │ │ │ └── plugin/ │ │ │ └── tbone.vim │ │ ├── webapi-vim/ │ │ │ ├── Makefile │ │ │ ├── README │ │ │ ├── autoload/ │ │ │ │ └── webapi/ │ │ │ │ ├── atom.vim │ │ │ │ ├── base64.vim │ │ │ │ ├── bit.vim │ │ │ │ ├── feed.vim │ │ │ │ ├── hmac.vim │ │ │ │ ├── html.vim │ │ │ │ ├── http.vim │ │ │ │ ├── json.vim │ │ │ │ ├── jsonrpc.vim │ │ │ │ ├── metaWeblog.vim │ │ │ │ ├── oauth.vim │ │ │ │ ├── sha1.vim │ │ │ │ ├── soap.vim │ │ │ │ ├── ucs.vim │ │ │ │ ├── xml.vim │ │ │ │ └── xmlrpc.vim │ │ │ ├── doc/ │ │ │ │ ├── webapi-html.txt │ │ │ │ ├── webapi-http.txt │ │ │ │ ├── webapi-json.txt │ │ │ │ └── webapi-xml.txt │ │ │ ├── example/ │ │ │ │ ├── gistview.vim │ │ │ │ ├── google-buzz.vim │ │ │ │ ├── hatenadiary.vim │ │ │ │ ├── jugem.vim │ │ │ │ ├── livedoor.vim │ │ │ │ ├── rss.vim │ │ │ │ ├── twitter.vim │ │ │ │ └── weather.vim │ │ │ └── webapi.vim.vimup │ │ └── wildfire.vim/ │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── autoload/ │ │ │ └── wildfire.vim │ │ ├── doc/ │ │ │ └── wildfire.txt │ │ └── plugin/ │ │ └── wildfire.vim │ └── plugin/ │ ├── BufOnly.vim │ └── scratch.vim ├── .vimrc ├── .zshrc ├── README.md ├── fonts/ │ └── Droid+Sans+Mono+for+Powerline.otf └── themes/ ├── Smyck.terminal ├── Solarized Dark.terminal ├── Solarized Light.terminal └── Tomorrow Night Bright.terminal ================================================ FILE CONTENTS ================================================ ================================================ FILE: .tmux.conf ================================================ # Bindings {{{ # Remap prefix unbind C-b set -g prefix C-Space # Quick key for moving back to the previous window bind-key L last-window # Vim style bindings for pane movement bind-key -r h select-pane -L bind-key -r j select-pane -D bind-key -r k select-pane -U bind-key -r l select-pane -R # Fix issue with tmux repeating -r the arrow directions (meaning when you switch panes you can accidentally jump back to the other pane again) bind-key Up select-pane -U bind-key Down select-pane -D bind-key Left select-pane -L bind-key Right select-pane -R # Make splitting windows easier bind-key v split-window -h bind-key s split-window -v # Reload tmux config # Same as in command mode :source-file ~/tmux.conf # Or outside of tmux with `tmux source-file ~/tmux.conf` bind-key r source-file ~/.tmux.conf # Allow Ctrl+k to clear the history bind-key -n C-k clear-history # Make resizing panes easier bind-key < resize-pane -L 5 bind-key > resize-pane -R 5 bind-key + resize-pane -U 5 bind-key - resize-pane -D 5 bind-key = select-layout even-vertical bind-key | select-layout even-horizontal # }}} # Settings {{{ # Ensure terminal starts with its own colour scheme (defined below) set -g default-terminal "screen-256color" set-window-option -g utf8 on # Note: if you have EDITOR=vim set # then the following two settings aren't needed # Use Vi style key bindings to move around command line mode set-option -g status-keys vi # Use Vi style key bindings to move around copy mode setw -g mode-keys vi # Remove delay when pressing esc in Vim set -sg escape-time 0 # Prevent tmux from renaming the tab when processes change # e.g. if you're in a directory which is a git repo and you fire up Pry then # tmux would first rename the tab to 'java' (for Pry) then 'git' when exiting Pry, then finally back to 'zsh' set-option -g allow-rename off # Tells tmux up front what shell to expect set-option -g default-shell /bin/zsh # Set base to 1 set -g base-index 1 # Enable UTF-8 support in status bar set -g status on set -g status-utf8 on # Increase scrollback lines set -g history-limit 30000 # Renumber windows automatically after removing a window # Prevents my OCD and means I don't have to manually run {move|swap}-window set-option -g renumber-windows on # Colour reference... # Light Blue = 31 # Dark Grey = 234 # Light Grey = 240 # White = 254 # sets right side of the status bar to look bit nicer set -g status-right '#[fg=colour234,bg=white,nobold,nounderscore,noitalics]#[fg=colour250,bg=colour234] %a #[fg=colour247,bg=colour234] #[fg=colour247,bg=colour234] %b %d  %R #[fg=colour252,bg=colour234,nobold,nounderscore,noitalics]#[fg=red,bg=colour234]#[fg=white,bg=red] #H' # sets status bar background colour set -g status-bg white # positions each window name to the left most edge of the status bar set -g status-justify 'left' # sets default pane border colour set -g pane-border-fg white # highlights border of current pane set -g pane-active-border-fg red # sets status bar background colour when executing a command via command-line mode set -g message-bg red # sets colour of status bar font in command-line mode set -g message-fg white # adds separator (in this case some extra breathing space around the list of windows) setw -g window-status-separator ' ' # sets design of current window listed in the status bar setw -g window-status-current-format '#[fg=colour231,bg=colour31,bold] #I  #W #[fg=colour31,bg=white,nobold,nounderscore,noitalics]' # Explanation of settings I don't use... # # sets background colour of status bar when you try to ESC command-line mode: # set -g message-command-bg 'colour31' # # sets colour of status bar font in default mode: # setw -g window-status-fg black # # sets the background colour of the window listed in the status bar: # setw -g window-status-bg 'colour234' # # sets default design around each window listed in the status bar: # setw -g window-status-format '#[fg=colour234,bg=colour234,nobold,nounderscore,noitalics]#[default] #I  #W #[fg=colour234,bg=colour234,nobold,nounderscore,noitalics]' # # sets left side information of status bar: # set -g status-left '#[fg=colour16,bg=colour254,bold] #S #[fg=colour254,bg=colour240,nobold,nounderscore,noitalics]#[fg=colour237,bg=colour240] #F #[fg=colour240,bg=colour236,nobold,nounderscore,noitalics]#[fg=colour247,bg=colour236] #W #[fg=colour236,bg=colour234,nobold,nounderscore,noitalics]' # }}} ================================================ FILE: .vim/autoload/pathogen.vim ================================================ " pathogen.vim - path option manipulation " Maintainer: Tim Pope " Version: 2.2 " Install in ~/.vim/autoload (or ~\vimfiles\autoload). " " For management of individually installed plugins in ~/.vim/bundle (or " ~\vimfiles\bundle), adding `execute pathogen#infect()` to the top of your " .vimrc is the only other setup necessary. " " The API is documented inline below. For maximum ease of reading, " :set foldmethod=marker if exists("g:loaded_pathogen") || &cp finish endif let g:loaded_pathogen = 1 function! s:warn(msg) echohl WarningMsg echomsg a:msg echohl NONE endfunction " Point of entry for basic default usage. Give a relative path to invoke " pathogen#incubate() (defaults to "bundle/{}"), or an absolute path to invoke " pathogen#surround(). For backwards compatibility purposes, a full path that " does not end in {} or * is given to pathogen#runtime_prepend_subdirectories() " instead. function! pathogen#infect(...) abort " {{{1 for path in a:0 ? reverse(copy(a:000)) : ['bundle/{}'] if path =~# '^[^\\/]\+$' call s:warn('Change pathogen#infect('.string(path).') to pathogen#infect('.string(path.'/{}').')') call pathogen#incubate(path . '/{}') elseif path =~# '^[^\\/]\+[\\/]\%({}\|\*\)$' call pathogen#incubate(path) elseif path =~# '[\\/]\%({}\|\*\)$' call pathogen#surround(path) else call s:warn('Change pathogen#infect('.string(path).') to pathogen#infect('.string(path.'/{}').')') call pathogen#surround(path . '/{}') endif endfor call pathogen#cycle_filetype() return '' endfunction " }}}1 " Split a path into a list. function! pathogen#split(path) abort " {{{1 if type(a:path) == type([]) | return a:path | endif let split = split(a:path,'\\\@"),'!isdirectory(v:val)')) && (!filereadable(dir.sep.'doc'.sep.'tags') || filewritable(dir.sep.'doc'.sep.'tags')) silent! execute 'helptags' pathogen#fnameescape(dir.'/doc') endif endfor endfor endfunction " }}}1 command! -bar Helptags :call pathogen#helptags() " Execute the given command. This is basically a backdoor for --remote-expr. function! pathogen#execute(...) abort " {{{1 for command in a:000 execute command endfor return '' endfunction " }}}1 " Like findfile(), but hardcoded to use the runtimepath. function! pathogen#runtime_findfile(file,count) abort "{{{1 let rtp = pathogen#join(1,pathogen#split(&rtp)) let file = findfile(a:file,rtp,a:count) if file ==# '' return '' else return fnamemodify(file,':p') endif endfunction " }}}1 " Backport of fnameescape(). function! pathogen#fnameescape(string) abort " {{{1 if exists('*fnameescape') return fnameescape(a:string) elseif a:string ==# '-' return '\-' else return substitute(escape(a:string," \t\n*?[{`$\\%#'\"|!<"),'^[+>]','\\&','') endif endfunction " }}}1 if exists(':Vedit') finish endif let s:vopen_warning = 0 function! s:find(count,cmd,file,lcd) " {{{1 let rtp = pathogen#join(1,pathogen#split(&runtimepath)) let file = pathogen#runtime_findfile(a:file,a:count) if file ==# '' return "echoerr 'E345: Can''t find file \"".a:file."\" in runtimepath'" endif if !s:vopen_warning let s:vopen_warning = 1 let warning = '|echohl WarningMsg|echo "Install scriptease.vim to continue using :V'.a:cmd.'"|echohl NONE' else let warning = '' endif if a:lcd let path = file[0:-strlen(a:file)-2] execute 'lcd `=path`' return a:cmd.' '.pathogen#fnameescape(a:file) . warning else return a:cmd.' '.pathogen#fnameescape(file) . warning endif endfunction " }}}1 function! s:Findcomplete(A,L,P) " {{{1 let sep = pathogen#separator() let cheats = { \'a': 'autoload', \'d': 'doc', \'f': 'ftplugin', \'i': 'indent', \'p': 'plugin', \'s': 'syntax'} if a:A =~# '^\w[\\/]' && has_key(cheats,a:A[0]) let request = cheats[a:A[0]].a:A[1:-1] else let request = a:A endif let pattern = substitute(request,'/\|\'.sep,'*'.sep,'g').'*' let found = {} for path in pathogen#split(&runtimepath) let path = expand(path, ':p') let matches = split(glob(path.sep.pattern),"\n") call map(matches,'isdirectory(v:val) ? v:val.sep : v:val') call map(matches,'expand(v:val, ":p")[strlen(path)+1:-1]') for match in matches let found[match] = 1 endfor endfor return sort(keys(found)) endfunction " }}}1 command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Ve :execute s:find(,'edit',,0) command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vedit :execute s:find(,'edit',,0) command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vopen :execute s:find(,'edit',,1) command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vsplit :execute s:find(,'split',,1) command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vvsplit :execute s:find(,'vsplit',,1) command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vtabedit :execute s:find(,'tabedit',,1) command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vpedit :execute s:find(,'pedit',,1) command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vread :execute s:find(,'read',,1) " vim:set et sw=2: ================================================ FILE: .vim/bundle/CSApprox/README ================================================ This is a mirror of http://www.vim.org/scripts/script.php?script_id=2390 CSApprox.vim ============ DESCRIPTION ============ It's hard to find colorschemes for terminal Vim. Most colorschemes are written to only support GVim, and don't work at all in terminal Vim. This plugin makes GVim-only colorschemes Just Work in terminal Vim, as long as the terminal supports 88 or 256 colors - and most do these days. This usually requires no user interaction (but see the help for what to do if things don't Just Work). After getting this plugin happily installed, any time you use :colorscheme it will do its magic and make the colorscheme Just Work. Whenever you change colorschemes using the :colorscheme command this script will be executed. It will take the colors that the scheme specified for use in the GUI and use an approximation algorithm to try to gracefully degrade them to the closest color available in your terminal. If you are running in a GUI or if your terminal doesn't support 88 or 256 colors, no changes are made. Also, no changes will be made if the colorscheme seems to have been high color already. If for some reason this transparent method isn't suitable to you (for instance if your environment can't be configured to meet the |csapprox-requirements|, or you need to work in Vim 6), another option is also available: using the |:CSApproxSnapshot| command to create a new GUI/88-/256-color terminal colorscheme. To use this command, a user would generally start GVim, choose a colorscheme that sets up the desired colors, and then use |:CSApproxSnapshot| to create a new colorscheme based on those colors that works in high color terminals. This method is more flexible than the transparent mode and works in more places, but also requires more user intervention, and makes it harder to deal with colorschemes being updated and such. ====== NOTES ====== Ideally, this plugin should require absolutely no configuration, but you may need some tweaking to make sure vim realizes that your terminal supports more than 16 colors. Also, konsole and Eterm users will want to make sure that this plugin realizes that the terminal does not use colors that are exactly xterm-compatible; they will want to skim through the help articles |csapprox-palettes| and |csapprox-configuration| for a better end result. ============== SCREENSHOTS ============== Some quick side-by-side screenshots can be found at http://www.cs.drexel.edu/~mjw452/CSApprox/ ================================================ FILE: .vim/bundle/CSApprox/after/plugin/CSApprox.vim ================================================ " Copyright (c) 2012, Matthew J. Wozniski " 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. " * The names of the contributors may not be used to endorse or promote " products derived from this software without specific prior written " permission. " " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``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 HOLDER 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. " The last thing to do when sourced is to run and actually fix up the colors. if !has('gui_running') && exists(':CSApprox') CSApprox endif ================================================ FILE: .vim/bundle/CSApprox/autoload/csapprox/common.vim ================================================ " Copyright (c) 2012, Matthew J. Wozniski " 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. " * The names of the contributors may not be used to endorse or promote " products derived from this software without specific prior written " permission. " " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``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 HOLDER 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. let s:xterm_colors = [ 0x00, 0x5F, 0x87, 0xAF, 0xD7, 0xFF ] let s:eterm_colors = [ 0x00, 0x2A, 0x55, 0x7F, 0xAA, 0xD4 ] let s:konsole_colors = [ 0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF ] let s:xterm_greys = [ 0x08, 0x12, 0x1C, 0x26, 0x30, 0x3A, \ 0x44, 0x4E, 0x58, 0x62, 0x6C, 0x76, \ 0x80, 0x8A, 0x94, 0x9E, 0xA8, 0xB2, \ 0xBC, 0xC6, 0xD0, 0xDA, 0xE4, 0xEE ] let s:urxvt_colors = [ 0x00, 0x8B, 0xCD, 0xFF ] let s:urxvt_greys = [ 0x2E, 0x5C, 0x73, 0x8B, \ 0xA2, 0xB9, 0xD0, 0xE7 ] " Uses &term to determine which cube should be use. If &term is set to " "xterm" or begins with "screen", the variables g:CSApprox_eterm and " g:CSApprox_konsole can be used to select a different palette. function! csapprox#common#PaletteType() if &t_Co == 88 let type = 'urxvt' elseif &term ==# 'xterm' || &term =~# '^screen' || &term==# 'builtin_gui' if exists('g:CSApprox_konsole') && g:CSApprox_konsole let type = 'konsole' elseif exists('g:CSApprox_eterm') && g:CSApprox_eterm let type = 'eterm' else let type = 'xterm' endif elseif &term =~? '^konsole' " Konsole only used its own palette up til KDE 4.2.0 if executable('kde4-config') && system('kde4-config --kde-version') =~ '^4\.[10]\.' let type = 'konsole' elseif executable('kde-config') && system('kde-config --version') =~# 'KDE: 3\.' let type = 'konsole' else let type = 'xterm' endif elseif &term =~? '^eterm' let type = 'eterm' else let type = 'xterm' endif return type endfunction " Retrieve the list of greyscale ramp colors for the current palette function! csapprox#common#Greys() return (&t_Co == 88 ? s:urxvt_greys : s:xterm_greys) endfunction " Retrieve the list of non-greyscale ramp colors for the current palette function! csapprox#common#Colors() return s:{csapprox#common#PaletteType()}_colors endfunction ================================================ FILE: .vim/bundle/CSApprox/autoload/csapprox/per_component.vim ================================================ " Copyright (c) 2012, Matthew J. Wozniski " 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. " * The names of the contributors may not be used to endorse or promote " products derived from this software without specific prior written " permission. " " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``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 HOLDER 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. " Integer comparator used to sort the complete list of possible colors function! s:IntCompare(i1, i2) return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1 endfunc " Color comparator to find the nearest element to a given one in a given list function! s:NearestElemInList(elem, list) let len = len(a:list) for i in range(len-1) if (a:elem <= (a:list[i] + a:list[i+1]) / 2) return a:list[i] endif endfor return a:list[len-1] endfunction " Takes 3 decimal values for r, g, and b, and returns the closest cube number. " " This approximator considers closeness based upon the individiual components. " For each of r, g, and b, it finds the closest cube component available on " the cube. If the three closest matches can combine to form a valid color, " this color is used, otherwise we repeat the search with the greys removed, " meaning that the three new matches must make a valid color when combined. function! csapprox#per_component#Approximate(r,g,b) let hex = printf("%02x%02x%02x", a:r, a:g, a:b) let colors = csapprox#common#Colors() let greys = csapprox#common#Greys() let type = csapprox#common#PaletteType() if !exists('s:approximator_cache_'.type) let s:approximator_cache_{type} = {} endif let rv = get(s:approximator_cache_{type}, hex, -1) if rv != -1 return rv endif " Only obtain sorted list once if !exists("s:".type."_greys_colors") let s:{type}_greys_colors = sort(greys + colors, "s:IntCompare") endif let greys_colors = s:{type}_greys_colors let r = s:NearestElemInList(a:r, greys_colors) let g = s:NearestElemInList(a:g, greys_colors) let b = s:NearestElemInList(a:b, greys_colors) let len = len(colors) if (r == g && g == b && index(greys, r) != -1) let rv = 16 + len * len * len + index(greys, r) else let r = s:NearestElemInList(a:r, colors) let g = s:NearestElemInList(a:g, colors) let b = s:NearestElemInList(a:b, colors) let rv = index(colors, r) * len * len \ + index(colors, g) * len \ + index(colors, b) \ + 16 endif let s:approximator_cache_{type}[hex] = rv return rv endfunction ================================================ FILE: .vim/bundle/CSApprox/autoload/csapprox.vim ================================================ " Copyright (c) 2012, Matthew J. Wozniski " 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. " * The names of the contributors may not be used to endorse or promote " products derived from this software without specific prior written " permission. " " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``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 HOLDER 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. let s:rgb = {} let s:rgb["alice blue"] = "#f0f8ff" let s:rgb["aliceblue"] = "#f0f8ff" let s:rgb["antique white"] = "#faebd7" let s:rgb["antiquewhite"] = "#faebd7" let s:rgb["antiquewhite1"] = "#ffefdb" let s:rgb["antiquewhite2"] = "#eedfcc" let s:rgb["antiquewhite3"] = "#cdc0b0" let s:rgb["antiquewhite4"] = "#8b8378" let s:rgb["aquamarine"] = "#7fffd4" let s:rgb["aquamarine1"] = "#7fffd4" let s:rgb["aquamarine2"] = "#76eec6" let s:rgb["aquamarine3"] = "#66cdaa" let s:rgb["aquamarine4"] = "#458b74" let s:rgb["azure"] = "#f0ffff" let s:rgb["azure1"] = "#f0ffff" let s:rgb["azure2"] = "#e0eeee" let s:rgb["azure3"] = "#c1cdcd" let s:rgb["azure4"] = "#838b8b" let s:rgb["beige"] = "#f5f5dc" let s:rgb["bisque"] = "#ffe4c4" let s:rgb["bisque1"] = "#ffe4c4" let s:rgb["bisque2"] = "#eed5b7" let s:rgb["bisque3"] = "#cdb79e" let s:rgb["bisque4"] = "#8b7d6b" let s:rgb["black"] = "#000000" let s:rgb["blanched almond"] = "#ffebcd" let s:rgb["blanchedalmond"] = "#ffebcd" let s:rgb["blue violet"] = "#8a2be2" let s:rgb["blue"] = "#0000ff" let s:rgb["blue1"] = "#0000ff" let s:rgb["blue2"] = "#0000ee" let s:rgb["blue3"] = "#0000cd" let s:rgb["blue4"] = "#00008b" let s:rgb["blueviolet"] = "#8a2be2" let s:rgb["brown"] = "#a52a2a" let s:rgb["brown1"] = "#ff4040" let s:rgb["brown2"] = "#ee3b3b" let s:rgb["brown3"] = "#cd3333" let s:rgb["brown4"] = "#8b2323" let s:rgb["burlywood"] = "#deb887" let s:rgb["burlywood1"] = "#ffd39b" let s:rgb["burlywood2"] = "#eec591" let s:rgb["burlywood3"] = "#cdaa7d" let s:rgb["burlywood4"] = "#8b7355" let s:rgb["cadet blue"] = "#5f9ea0" let s:rgb["cadetblue"] = "#5f9ea0" let s:rgb["cadetblue1"] = "#98f5ff" let s:rgb["cadetblue2"] = "#8ee5ee" let s:rgb["cadetblue3"] = "#7ac5cd" let s:rgb["cadetblue4"] = "#53868b" let s:rgb["chartreuse"] = "#7fff00" let s:rgb["chartreuse1"] = "#7fff00" let s:rgb["chartreuse2"] = "#76ee00" let s:rgb["chartreuse3"] = "#66cd00" let s:rgb["chartreuse4"] = "#458b00" let s:rgb["chocolate"] = "#d2691e" let s:rgb["chocolate1"] = "#ff7f24" let s:rgb["chocolate2"] = "#ee7621" let s:rgb["chocolate3"] = "#cd661d" let s:rgb["chocolate4"] = "#8b4513" let s:rgb["coral"] = "#ff7f50" let s:rgb["coral1"] = "#ff7256" let s:rgb["coral2"] = "#ee6a50" let s:rgb["coral3"] = "#cd5b45" let s:rgb["coral4"] = "#8b3e2f" let s:rgb["cornflower blue"] = "#6495ed" let s:rgb["cornflowerblue"] = "#6495ed" let s:rgb["cornsilk"] = "#fff8dc" let s:rgb["cornsilk1"] = "#fff8dc" let s:rgb["cornsilk2"] = "#eee8cd" let s:rgb["cornsilk3"] = "#cdc8b1" let s:rgb["cornsilk4"] = "#8b8878" let s:rgb["cyan"] = "#00ffff" let s:rgb["cyan1"] = "#00ffff" let s:rgb["cyan2"] = "#00eeee" let s:rgb["cyan3"] = "#00cdcd" let s:rgb["cyan4"] = "#008b8b" let s:rgb["dark blue"] = "#00008b" let s:rgb["dark cyan"] = "#008b8b" let s:rgb["dark goldenrod"] = "#b8860b" let s:rgb["dark gray"] = "#a9a9a9" let s:rgb["dark green"] = "#006400" let s:rgb["dark grey"] = "#a9a9a9" let s:rgb["dark khaki"] = "#bdb76b" let s:rgb["dark magenta"] = "#8b008b" let s:rgb["dark olive green"] = "#556b2f" let s:rgb["dark orange"] = "#ff8c00" let s:rgb["dark orchid"] = "#9932cc" let s:rgb["dark red"] = "#8b0000" let s:rgb["dark salmon"] = "#e9967a" let s:rgb["dark sea green"] = "#8fbc8f" let s:rgb["dark slate blue"] = "#483d8b" let s:rgb["dark slate gray"] = "#2f4f4f" let s:rgb["dark slate grey"] = "#2f4f4f" let s:rgb["dark turquoise"] = "#00ced1" let s:rgb["dark violet"] = "#9400d3" let s:rgb["dark yellow"] = "#bbbb00" let s:rgb["darkblue"] = "#00008b" let s:rgb["darkcyan"] = "#008b8b" let s:rgb["darkgoldenrod"] = "#b8860b" let s:rgb["darkgoldenrod1"] = "#ffb90f" let s:rgb["darkgoldenrod2"] = "#eead0e" let s:rgb["darkgoldenrod3"] = "#cd950c" let s:rgb["darkgoldenrod4"] = "#8b6508" let s:rgb["darkgray"] = "#a9a9a9" let s:rgb["darkgreen"] = "#006400" let s:rgb["darkgrey"] = "#a9a9a9" let s:rgb["darkkhaki"] = "#bdb76b" let s:rgb["darkmagenta"] = "#8b008b" let s:rgb["darkolivegreen"] = "#556b2f" let s:rgb["darkolivegreen1"] = "#caff70" let s:rgb["darkolivegreen2"] = "#bcee68" let s:rgb["darkolivegreen3"] = "#a2cd5a" let s:rgb["darkolivegreen4"] = "#6e8b3d" let s:rgb["darkorange"] = "#ff8c00" let s:rgb["darkorange1"] = "#ff7f00" let s:rgb["darkorange2"] = "#ee7600" let s:rgb["darkorange3"] = "#cd6600" let s:rgb["darkorange4"] = "#8b4500" let s:rgb["darkorchid"] = "#9932cc" let s:rgb["darkorchid1"] = "#bf3eff" let s:rgb["darkorchid2"] = "#b23aee" let s:rgb["darkorchid3"] = "#9a32cd" let s:rgb["darkorchid4"] = "#68228b" let s:rgb["darkred"] = "#8b0000" let s:rgb["darksalmon"] = "#e9967a" let s:rgb["darkseagreen"] = "#8fbc8f" let s:rgb["darkseagreen1"] = "#c1ffc1" let s:rgb["darkseagreen2"] = "#b4eeb4" let s:rgb["darkseagreen3"] = "#9bcd9b" let s:rgb["darkseagreen4"] = "#698b69" let s:rgb["darkslateblue"] = "#483d8b" let s:rgb["darkslategray"] = "#2f4f4f" let s:rgb["darkslategray1"] = "#97ffff" let s:rgb["darkslategray2"] = "#8deeee" let s:rgb["darkslategray3"] = "#79cdcd" let s:rgb["darkslategray4"] = "#528b8b" let s:rgb["darkslategrey"] = "#2f4f4f" let s:rgb["darkturquoise"] = "#00ced1" let s:rgb["darkviolet"] = "#9400d3" let s:rgb["darkyellow"] = "#bbbb00" let s:rgb["deep pink"] = "#ff1493" let s:rgb["deep sky blue"] = "#00bfff" let s:rgb["deeppink"] = "#ff1493" let s:rgb["deeppink1"] = "#ff1493" let s:rgb["deeppink2"] = "#ee1289" let s:rgb["deeppink3"] = "#cd1076" let s:rgb["deeppink4"] = "#8b0a50" let s:rgb["deepskyblue"] = "#00bfff" let s:rgb["deepskyblue1"] = "#00bfff" let s:rgb["deepskyblue2"] = "#00b2ee" let s:rgb["deepskyblue3"] = "#009acd" let s:rgb["deepskyblue4"] = "#00688b" let s:rgb["dim gray"] = "#696969" let s:rgb["dim grey"] = "#696969" let s:rgb["dimgray"] = "#696969" let s:rgb["dimgrey"] = "#696969" let s:rgb["dodger blue"] = "#1e90ff" let s:rgb["dodgerblue"] = "#1e90ff" let s:rgb["dodgerblue1"] = "#1e90ff" let s:rgb["dodgerblue2"] = "#1c86ee" let s:rgb["dodgerblue3"] = "#1874cd" let s:rgb["dodgerblue4"] = "#104e8b" let s:rgb["firebrick"] = "#b22222" let s:rgb["firebrick1"] = "#ff3030" let s:rgb["firebrick2"] = "#ee2c2c" let s:rgb["firebrick3"] = "#cd2626" let s:rgb["firebrick4"] = "#8b1a1a" let s:rgb["floral white"] = "#fffaf0" let s:rgb["floralwhite"] = "#fffaf0" let s:rgb["forest green"] = "#228b22" let s:rgb["forestgreen"] = "#228b22" let s:rgb["gainsboro"] = "#dcdcdc" let s:rgb["ghost white"] = "#f8f8ff" let s:rgb["ghostwhite"] = "#f8f8ff" let s:rgb["gold"] = "#ffd700" let s:rgb["gold1"] = "#ffd700" let s:rgb["gold2"] = "#eec900" let s:rgb["gold3"] = "#cdad00" let s:rgb["gold4"] = "#8b7500" let s:rgb["goldenrod"] = "#daa520" let s:rgb["goldenrod1"] = "#ffc125" let s:rgb["goldenrod2"] = "#eeb422" let s:rgb["goldenrod3"] = "#cd9b1d" let s:rgb["goldenrod4"] = "#8b6914" let s:rgb["gray"] = "#bebebe" let s:rgb["gray0"] = "#000000" let s:rgb["gray1"] = "#030303" let s:rgb["gray10"] = "#1a1a1a" let s:rgb["gray100"] = "#ffffff" let s:rgb["gray11"] = "#1c1c1c" let s:rgb["gray12"] = "#1f1f1f" let s:rgb["gray13"] = "#212121" let s:rgb["gray14"] = "#242424" let s:rgb["gray15"] = "#262626" let s:rgb["gray16"] = "#292929" let s:rgb["gray17"] = "#2b2b2b" let s:rgb["gray18"] = "#2e2e2e" let s:rgb["gray19"] = "#303030" let s:rgb["gray2"] = "#050505" let s:rgb["gray20"] = "#333333" let s:rgb["gray21"] = "#363636" let s:rgb["gray22"] = "#383838" let s:rgb["gray23"] = "#3b3b3b" let s:rgb["gray24"] = "#3d3d3d" let s:rgb["gray25"] = "#404040" let s:rgb["gray26"] = "#424242" let s:rgb["gray27"] = "#454545" let s:rgb["gray28"] = "#474747" let s:rgb["gray29"] = "#4a4a4a" let s:rgb["gray3"] = "#080808" let s:rgb["gray30"] = "#4d4d4d" let s:rgb["gray31"] = "#4f4f4f" let s:rgb["gray32"] = "#525252" let s:rgb["gray33"] = "#545454" let s:rgb["gray34"] = "#575757" let s:rgb["gray35"] = "#595959" let s:rgb["gray36"] = "#5c5c5c" let s:rgb["gray37"] = "#5e5e5e" let s:rgb["gray38"] = "#616161" let s:rgb["gray39"] = "#636363" let s:rgb["gray4"] = "#0a0a0a" let s:rgb["gray40"] = "#666666" let s:rgb["gray41"] = "#696969" let s:rgb["gray42"] = "#6b6b6b" let s:rgb["gray43"] = "#6e6e6e" let s:rgb["gray44"] = "#707070" let s:rgb["gray45"] = "#737373" let s:rgb["gray46"] = "#757575" let s:rgb["gray47"] = "#787878" let s:rgb["gray48"] = "#7a7a7a" let s:rgb["gray49"] = "#7d7d7d" let s:rgb["gray5"] = "#0d0d0d" let s:rgb["gray50"] = "#7f7f7f" let s:rgb["gray51"] = "#828282" let s:rgb["gray52"] = "#858585" let s:rgb["gray53"] = "#878787" let s:rgb["gray54"] = "#8a8a8a" let s:rgb["gray55"] = "#8c8c8c" let s:rgb["gray56"] = "#8f8f8f" let s:rgb["gray57"] = "#919191" let s:rgb["gray58"] = "#949494" let s:rgb["gray59"] = "#969696" let s:rgb["gray6"] = "#0f0f0f" let s:rgb["gray60"] = "#999999" let s:rgb["gray61"] = "#9c9c9c" let s:rgb["gray62"] = "#9e9e9e" let s:rgb["gray63"] = "#a1a1a1" let s:rgb["gray64"] = "#a3a3a3" let s:rgb["gray65"] = "#a6a6a6" let s:rgb["gray66"] = "#a8a8a8" let s:rgb["gray67"] = "#ababab" let s:rgb["gray68"] = "#adadad" let s:rgb["gray69"] = "#b0b0b0" let s:rgb["gray7"] = "#121212" let s:rgb["gray70"] = "#b3b3b3" let s:rgb["gray71"] = "#b5b5b5" let s:rgb["gray72"] = "#b8b8b8" let s:rgb["gray73"] = "#bababa" let s:rgb["gray74"] = "#bdbdbd" let s:rgb["gray75"] = "#bfbfbf" let s:rgb["gray76"] = "#c2c2c2" let s:rgb["gray77"] = "#c4c4c4" let s:rgb["gray78"] = "#c7c7c7" let s:rgb["gray79"] = "#c9c9c9" let s:rgb["gray8"] = "#141414" let s:rgb["gray80"] = "#cccccc" let s:rgb["gray81"] = "#cfcfcf" let s:rgb["gray82"] = "#d1d1d1" let s:rgb["gray83"] = "#d4d4d4" let s:rgb["gray84"] = "#d6d6d6" let s:rgb["gray85"] = "#d9d9d9" let s:rgb["gray86"] = "#dbdbdb" let s:rgb["gray87"] = "#dedede" let s:rgb["gray88"] = "#e0e0e0" let s:rgb["gray89"] = "#e3e3e3" let s:rgb["gray9"] = "#171717" let s:rgb["gray90"] = "#e5e5e5" let s:rgb["gray91"] = "#e8e8e8" let s:rgb["gray92"] = "#ebebeb" let s:rgb["gray93"] = "#ededed" let s:rgb["gray94"] = "#f0f0f0" let s:rgb["gray95"] = "#f2f2f2" let s:rgb["gray96"] = "#f5f5f5" let s:rgb["gray97"] = "#f7f7f7" let s:rgb["gray98"] = "#fafafa" let s:rgb["gray99"] = "#fcfcfc" let s:rgb["green yellow"] = "#adff2f" let s:rgb["green"] = "#00ff00" let s:rgb["green1"] = "#00ff00" let s:rgb["green2"] = "#00ee00" let s:rgb["green3"] = "#00cd00" let s:rgb["green4"] = "#008b00" let s:rgb["greenyellow"] = "#adff2f" let s:rgb["grey"] = "#bebebe" let s:rgb["grey0"] = "#000000" let s:rgb["grey1"] = "#030303" let s:rgb["grey10"] = "#1a1a1a" let s:rgb["grey100"] = "#ffffff" let s:rgb["grey11"] = "#1c1c1c" let s:rgb["grey12"] = "#1f1f1f" let s:rgb["grey13"] = "#212121" let s:rgb["grey14"] = "#242424" let s:rgb["grey15"] = "#262626" let s:rgb["grey16"] = "#292929" let s:rgb["grey17"] = "#2b2b2b" let s:rgb["grey18"] = "#2e2e2e" let s:rgb["grey19"] = "#303030" let s:rgb["grey2"] = "#050505" let s:rgb["grey20"] = "#333333" let s:rgb["grey21"] = "#363636" let s:rgb["grey22"] = "#383838" let s:rgb["grey23"] = "#3b3b3b" let s:rgb["grey24"] = "#3d3d3d" let s:rgb["grey25"] = "#404040" let s:rgb["grey26"] = "#424242" let s:rgb["grey27"] = "#454545" let s:rgb["grey28"] = "#474747" let s:rgb["grey29"] = "#4a4a4a" let s:rgb["grey3"] = "#080808" let s:rgb["grey30"] = "#4d4d4d" let s:rgb["grey31"] = "#4f4f4f" let s:rgb["grey32"] = "#525252" let s:rgb["grey33"] = "#545454" let s:rgb["grey34"] = "#575757" let s:rgb["grey35"] = "#595959" let s:rgb["grey36"] = "#5c5c5c" let s:rgb["grey37"] = "#5e5e5e" let s:rgb["grey38"] = "#616161" let s:rgb["grey39"] = "#636363" let s:rgb["grey4"] = "#0a0a0a" let s:rgb["grey40"] = "#666666" let s:rgb["grey41"] = "#696969" let s:rgb["grey42"] = "#6b6b6b" let s:rgb["grey43"] = "#6e6e6e" let s:rgb["grey44"] = "#707070" let s:rgb["grey45"] = "#737373" let s:rgb["grey46"] = "#757575" let s:rgb["grey47"] = "#787878" let s:rgb["grey48"] = "#7a7a7a" let s:rgb["grey49"] = "#7d7d7d" let s:rgb["grey5"] = "#0d0d0d" let s:rgb["grey50"] = "#7f7f7f" let s:rgb["grey51"] = "#828282" let s:rgb["grey52"] = "#858585" let s:rgb["grey53"] = "#878787" let s:rgb["grey54"] = "#8a8a8a" let s:rgb["grey55"] = "#8c8c8c" let s:rgb["grey56"] = "#8f8f8f" let s:rgb["grey57"] = "#919191" let s:rgb["grey58"] = "#949494" let s:rgb["grey59"] = "#969696" let s:rgb["grey6"] = "#0f0f0f" let s:rgb["grey60"] = "#999999" let s:rgb["grey61"] = "#9c9c9c" let s:rgb["grey62"] = "#9e9e9e" let s:rgb["grey63"] = "#a1a1a1" let s:rgb["grey64"] = "#a3a3a3" let s:rgb["grey65"] = "#a6a6a6" let s:rgb["grey66"] = "#a8a8a8" let s:rgb["grey67"] = "#ababab" let s:rgb["grey68"] = "#adadad" let s:rgb["grey69"] = "#b0b0b0" let s:rgb["grey7"] = "#121212" let s:rgb["grey70"] = "#b3b3b3" let s:rgb["grey71"] = "#b5b5b5" let s:rgb["grey72"] = "#b8b8b8" let s:rgb["grey73"] = "#bababa" let s:rgb["grey74"] = "#bdbdbd" let s:rgb["grey75"] = "#bfbfbf" let s:rgb["grey76"] = "#c2c2c2" let s:rgb["grey77"] = "#c4c4c4" let s:rgb["grey78"] = "#c7c7c7" let s:rgb["grey79"] = "#c9c9c9" let s:rgb["grey8"] = "#141414" let s:rgb["grey80"] = "#cccccc" let s:rgb["grey81"] = "#cfcfcf" let s:rgb["grey82"] = "#d1d1d1" let s:rgb["grey83"] = "#d4d4d4" let s:rgb["grey84"] = "#d6d6d6" let s:rgb["grey85"] = "#d9d9d9" let s:rgb["grey86"] = "#dbdbdb" let s:rgb["grey87"] = "#dedede" let s:rgb["grey88"] = "#e0e0e0" let s:rgb["grey89"] = "#e3e3e3" let s:rgb["grey9"] = "#171717" let s:rgb["grey90"] = "#e5e5e5" let s:rgb["grey91"] = "#e8e8e8" let s:rgb["grey92"] = "#ebebeb" let s:rgb["grey93"] = "#ededed" let s:rgb["grey94"] = "#f0f0f0" let s:rgb["grey95"] = "#f2f2f2" let s:rgb["grey96"] = "#f5f5f5" let s:rgb["grey97"] = "#f7f7f7" let s:rgb["grey98"] = "#fafafa" let s:rgb["grey99"] = "#fcfcfc" let s:rgb["honeydew"] = "#f0fff0" let s:rgb["honeydew1"] = "#f0fff0" let s:rgb["honeydew2"] = "#e0eee0" let s:rgb["honeydew3"] = "#c1cdc1" let s:rgb["honeydew4"] = "#838b83" let s:rgb["hot pink"] = "#ff69b4" let s:rgb["hotpink"] = "#ff69b4" let s:rgb["hotpink1"] = "#ff6eb4" let s:rgb["hotpink2"] = "#ee6aa7" let s:rgb["hotpink3"] = "#cd6090" let s:rgb["hotpink4"] = "#8b3a62" let s:rgb["indian red"] = "#cd5c5c" let s:rgb["indianred"] = "#cd5c5c" let s:rgb["indianred1"] = "#ff6a6a" let s:rgb["indianred2"] = "#ee6363" let s:rgb["indianred3"] = "#cd5555" let s:rgb["indianred4"] = "#8b3a3a" let s:rgb["ivory"] = "#fffff0" let s:rgb["ivory1"] = "#fffff0" let s:rgb["ivory2"] = "#eeeee0" let s:rgb["ivory3"] = "#cdcdc1" let s:rgb["ivory4"] = "#8b8b83" let s:rgb["khaki"] = "#f0e68c" let s:rgb["khaki1"] = "#fff68f" let s:rgb["khaki2"] = "#eee685" let s:rgb["khaki3"] = "#cdc673" let s:rgb["khaki4"] = "#8b864e" let s:rgb["lavender blush"] = "#fff0f5" let s:rgb["lavender"] = "#e6e6fa" let s:rgb["lavenderblush"] = "#fff0f5" let s:rgb["lavenderblush1"] = "#fff0f5" let s:rgb["lavenderblush2"] = "#eee0e5" let s:rgb["lavenderblush3"] = "#cdc1c5" let s:rgb["lavenderblush4"] = "#8b8386" let s:rgb["lawn green"] = "#7cfc00" let s:rgb["lawngreen"] = "#7cfc00" let s:rgb["lemon chiffon"] = "#fffacd" let s:rgb["lemonchiffon"] = "#fffacd" let s:rgb["lemonchiffon1"] = "#fffacd" let s:rgb["lemonchiffon2"] = "#eee9bf" let s:rgb["lemonchiffon3"] = "#cdc9a5" let s:rgb["lemonchiffon4"] = "#8b8970" let s:rgb["light blue"] = "#add8e6" let s:rgb["light coral"] = "#f08080" let s:rgb["light cyan"] = "#e0ffff" let s:rgb["light goldenrod yellow"] = "#fafad2" let s:rgb["light goldenrod"] = "#eedd82" let s:rgb["light gray"] = "#d3d3d3" let s:rgb["light green"] = "#90ee90" let s:rgb["light grey"] = "#d3d3d3" let s:rgb["light magenta"] = "#ffbbff" let s:rgb["light pink"] = "#ffb6c1" let s:rgb["light red"] = "#ffbbbb" let s:rgb["light salmon"] = "#ffa07a" let s:rgb["light sea green"] = "#20b2aa" let s:rgb["light sky blue"] = "#87cefa" let s:rgb["light slate blue"] = "#8470ff" let s:rgb["light slate gray"] = "#778899" let s:rgb["light slate grey"] = "#778899" let s:rgb["light steel blue"] = "#b0c4de" let s:rgb["light yellow"] = "#ffffe0" let s:rgb["lightblue"] = "#add8e6" let s:rgb["lightblue1"] = "#bfefff" let s:rgb["lightblue2"] = "#b2dfee" let s:rgb["lightblue3"] = "#9ac0cd" let s:rgb["lightblue4"] = "#68838b" let s:rgb["lightcoral"] = "#f08080" let s:rgb["lightcyan"] = "#e0ffff" let s:rgb["lightcyan1"] = "#e0ffff" let s:rgb["lightcyan2"] = "#d1eeee" let s:rgb["lightcyan3"] = "#b4cdcd" let s:rgb["lightcyan4"] = "#7a8b8b" let s:rgb["lightgoldenrod"] = "#eedd82" let s:rgb["lightgoldenrod1"] = "#ffec8b" let s:rgb["lightgoldenrod2"] = "#eedc82" let s:rgb["lightgoldenrod3"] = "#cdbe70" let s:rgb["lightgoldenrod4"] = "#8b814c" let s:rgb["lightgoldenrodyellow"] = "#fafad2" let s:rgb["lightgray"] = "#d3d3d3" let s:rgb["lightgreen"] = "#90ee90" let s:rgb["lightgrey"] = "#d3d3d3" let s:rgb["lightmagenta"] = "#ffbbff" let s:rgb["lightpink"] = "#ffb6c1" let s:rgb["lightpink1"] = "#ffaeb9" let s:rgb["lightpink2"] = "#eea2ad" let s:rgb["lightpink3"] = "#cd8c95" let s:rgb["lightpink4"] = "#8b5f65" let s:rgb["lightred"] = "#ffbbbb" let s:rgb["lightsalmon"] = "#ffa07a" let s:rgb["lightsalmon1"] = "#ffa07a" let s:rgb["lightsalmon2"] = "#ee9572" let s:rgb["lightsalmon3"] = "#cd8162" let s:rgb["lightsalmon4"] = "#8b5742" let s:rgb["lightseagreen"] = "#20b2aa" let s:rgb["lightskyblue"] = "#87cefa" let s:rgb["lightskyblue1"] = "#b0e2ff" let s:rgb["lightskyblue2"] = "#a4d3ee" let s:rgb["lightskyblue3"] = "#8db6cd" let s:rgb["lightskyblue4"] = "#607b8b" let s:rgb["lightslateblue"] = "#8470ff" let s:rgb["lightslategray"] = "#778899" let s:rgb["lightslategrey"] = "#778899" let s:rgb["lightsteelblue"] = "#b0c4de" let s:rgb["lightsteelblue1"] = "#cae1ff" let s:rgb["lightsteelblue2"] = "#bcd2ee" let s:rgb["lightsteelblue3"] = "#a2b5cd" let s:rgb["lightsteelblue4"] = "#6e7b8b" let s:rgb["lightyellow"] = "#ffffe0" let s:rgb["lightyellow1"] = "#ffffe0" let s:rgb["lightyellow2"] = "#eeeed1" let s:rgb["lightyellow3"] = "#cdcdb4" let s:rgb["lightyellow4"] = "#8b8b7a" let s:rgb["lime green"] = "#32cd32" let s:rgb["limegreen"] = "#32cd32" let s:rgb["linen"] = "#faf0e6" let s:rgb["magenta"] = "#ff00ff" let s:rgb["magenta1"] = "#ff00ff" let s:rgb["magenta2"] = "#ee00ee" let s:rgb["magenta3"] = "#cd00cd" let s:rgb["magenta4"] = "#8b008b" let s:rgb["maroon"] = "#b03060" let s:rgb["maroon1"] = "#ff34b3" let s:rgb["maroon2"] = "#ee30a7" let s:rgb["maroon3"] = "#cd2990" let s:rgb["maroon4"] = "#8b1c62" let s:rgb["medium aquamarine"] = "#66cdaa" let s:rgb["medium blue"] = "#0000cd" let s:rgb["medium orchid"] = "#ba55d3" let s:rgb["medium purple"] = "#9370db" let s:rgb["medium sea green"] = "#3cb371" let s:rgb["medium slate blue"] = "#7b68ee" let s:rgb["medium spring green"] = "#00fa9a" let s:rgb["medium turquoise"] = "#48d1cc" let s:rgb["medium violet red"] = "#c71585" let s:rgb["mediumaquamarine"] = "#66cdaa" let s:rgb["mediumblue"] = "#0000cd" let s:rgb["mediumorchid"] = "#ba55d3" let s:rgb["mediumorchid1"] = "#e066ff" let s:rgb["mediumorchid2"] = "#d15fee" let s:rgb["mediumorchid3"] = "#b452cd" let s:rgb["mediumorchid4"] = "#7a378b" let s:rgb["mediumpurple"] = "#9370db" let s:rgb["mediumpurple1"] = "#ab82ff" let s:rgb["mediumpurple2"] = "#9f79ee" let s:rgb["mediumpurple3"] = "#8968cd" let s:rgb["mediumpurple4"] = "#5d478b" let s:rgb["mediumseagreen"] = "#3cb371" let s:rgb["mediumslateblue"] = "#7b68ee" let s:rgb["mediumspringgreen"] = "#00fa9a" let s:rgb["mediumturquoise"] = "#48d1cc" let s:rgb["mediumvioletred"] = "#c71585" let s:rgb["midnight blue"] = "#191970" let s:rgb["midnightblue"] = "#191970" let s:rgb["mint cream"] = "#f5fffa" let s:rgb["mintcream"] = "#f5fffa" let s:rgb["misty rose"] = "#ffe4e1" let s:rgb["mistyrose"] = "#ffe4e1" let s:rgb["mistyrose1"] = "#ffe4e1" let s:rgb["mistyrose2"] = "#eed5d2" let s:rgb["mistyrose3"] = "#cdb7b5" let s:rgb["mistyrose4"] = "#8b7d7b" let s:rgb["moccasin"] = "#ffe4b5" let s:rgb["navajo white"] = "#ffdead" let s:rgb["navajowhite"] = "#ffdead" let s:rgb["navajowhite1"] = "#ffdead" let s:rgb["navajowhite2"] = "#eecfa1" let s:rgb["navajowhite3"] = "#cdb38b" let s:rgb["navajowhite4"] = "#8b795e" let s:rgb["navy blue"] = "#000080" let s:rgb["navy"] = "#000080" let s:rgb["navyblue"] = "#000080" let s:rgb["old lace"] = "#fdf5e6" let s:rgb["oldlace"] = "#fdf5e6" let s:rgb["olive drab"] = "#6b8e23" let s:rgb["olivedrab"] = "#6b8e23" let s:rgb["olivedrab1"] = "#c0ff3e" let s:rgb["olivedrab2"] = "#b3ee3a" let s:rgb["olivedrab3"] = "#9acd32" let s:rgb["olivedrab4"] = "#698b22" let s:rgb["orange red"] = "#ff4500" let s:rgb["orange"] = "#ffa500" let s:rgb["orange1"] = "#ffa500" let s:rgb["orange2"] = "#ee9a00" let s:rgb["orange3"] = "#cd8500" let s:rgb["orange4"] = "#8b5a00" let s:rgb["orangered"] = "#ff4500" let s:rgb["orangered1"] = "#ff4500" let s:rgb["orangered2"] = "#ee4000" let s:rgb["orangered3"] = "#cd3700" let s:rgb["orangered4"] = "#8b2500" let s:rgb["orchid"] = "#da70d6" let s:rgb["orchid1"] = "#ff83fa" let s:rgb["orchid2"] = "#ee7ae9" let s:rgb["orchid3"] = "#cd69c9" let s:rgb["orchid4"] = "#8b4789" let s:rgb["pale goldenrod"] = "#eee8aa" let s:rgb["pale green"] = "#98fb98" let s:rgb["pale turquoise"] = "#afeeee" let s:rgb["pale violet red"] = "#db7093" let s:rgb["palegoldenrod"] = "#eee8aa" let s:rgb["palegreen"] = "#98fb98" let s:rgb["palegreen1"] = "#9aff9a" let s:rgb["palegreen2"] = "#90ee90" let s:rgb["palegreen3"] = "#7ccd7c" let s:rgb["palegreen4"] = "#548b54" let s:rgb["paleturquoise"] = "#afeeee" let s:rgb["paleturquoise1"] = "#bbffff" let s:rgb["paleturquoise2"] = "#aeeeee" let s:rgb["paleturquoise3"] = "#96cdcd" let s:rgb["paleturquoise4"] = "#668b8b" let s:rgb["palevioletred"] = "#db7093" let s:rgb["palevioletred1"] = "#ff82ab" let s:rgb["palevioletred2"] = "#ee799f" let s:rgb["palevioletred3"] = "#cd6889" let s:rgb["palevioletred4"] = "#8b475d" let s:rgb["papaya whip"] = "#ffefd5" let s:rgb["papayawhip"] = "#ffefd5" let s:rgb["peach puff"] = "#ffdab9" let s:rgb["peachpuff"] = "#ffdab9" let s:rgb["peachpuff1"] = "#ffdab9" let s:rgb["peachpuff2"] = "#eecbad" let s:rgb["peachpuff3"] = "#cdaf95" let s:rgb["peachpuff4"] = "#8b7765" let s:rgb["peru"] = "#cd853f" let s:rgb["pink"] = "#ffc0cb" let s:rgb["pink1"] = "#ffb5c5" let s:rgb["pink2"] = "#eea9b8" let s:rgb["pink3"] = "#cd919e" let s:rgb["pink4"] = "#8b636c" let s:rgb["plum"] = "#dda0dd" let s:rgb["plum1"] = "#ffbbff" let s:rgb["plum2"] = "#eeaeee" let s:rgb["plum3"] = "#cd96cd" let s:rgb["plum4"] = "#8b668b" let s:rgb["powder blue"] = "#b0e0e6" let s:rgb["powderblue"] = "#b0e0e6" let s:rgb["purple"] = "#a020f0" let s:rgb["purple1"] = "#9b30ff" let s:rgb["purple2"] = "#912cee" let s:rgb["purple3"] = "#7d26cd" let s:rgb["purple4"] = "#551a8b" let s:rgb["red"] = "#ff0000" let s:rgb["red1"] = "#ff0000" let s:rgb["red2"] = "#ee0000" let s:rgb["red3"] = "#cd0000" let s:rgb["red4"] = "#8b0000" let s:rgb["rosy brown"] = "#bc8f8f" let s:rgb["rosybrown"] = "#bc8f8f" let s:rgb["rosybrown1"] = "#ffc1c1" let s:rgb["rosybrown2"] = "#eeb4b4" let s:rgb["rosybrown3"] = "#cd9b9b" let s:rgb["rosybrown4"] = "#8b6969" let s:rgb["royal blue"] = "#4169e1" let s:rgb["royalblue"] = "#4169e1" let s:rgb["royalblue1"] = "#4876ff" let s:rgb["royalblue2"] = "#436eee" let s:rgb["royalblue3"] = "#3a5fcd" let s:rgb["royalblue4"] = "#27408b" let s:rgb["saddle brown"] = "#8b4513" let s:rgb["saddlebrown"] = "#8b4513" let s:rgb["salmon"] = "#fa8072" let s:rgb["salmon1"] = "#ff8c69" let s:rgb["salmon2"] = "#ee8262" let s:rgb["salmon3"] = "#cd7054" let s:rgb["salmon4"] = "#8b4c39" let s:rgb["sandy brown"] = "#f4a460" let s:rgb["sandybrown"] = "#f4a460" let s:rgb["sea green"] = "#2e8b57" let s:rgb["seagreen"] = "#2e8b57" let s:rgb["seagreen1"] = "#54ff9f" let s:rgb["seagreen2"] = "#4eee94" let s:rgb["seagreen3"] = "#43cd80" let s:rgb["seagreen4"] = "#2e8b57" let s:rgb["seashell"] = "#fff5ee" let s:rgb["seashell1"] = "#fff5ee" let s:rgb["seashell2"] = "#eee5de" let s:rgb["seashell3"] = "#cdc5bf" let s:rgb["seashell4"] = "#8b8682" let s:rgb["sienna"] = "#a0522d" let s:rgb["sienna1"] = "#ff8247" let s:rgb["sienna2"] = "#ee7942" let s:rgb["sienna3"] = "#cd6839" let s:rgb["sienna4"] = "#8b4726" let s:rgb["sky blue"] = "#87ceeb" let s:rgb["skyblue"] = "#87ceeb" let s:rgb["skyblue1"] = "#87ceff" let s:rgb["skyblue2"] = "#7ec0ee" let s:rgb["skyblue3"] = "#6ca6cd" let s:rgb["skyblue4"] = "#4a708b" let s:rgb["slate blue"] = "#6a5acd" let s:rgb["slate gray"] = "#708090" let s:rgb["slate grey"] = "#708090" let s:rgb["slateblue"] = "#6a5acd" let s:rgb["slateblue1"] = "#836fff" let s:rgb["slateblue2"] = "#7a67ee" let s:rgb["slateblue3"] = "#6959cd" let s:rgb["slateblue4"] = "#473c8b" let s:rgb["slategray"] = "#708090" let s:rgb["slategray1"] = "#c6e2ff" let s:rgb["slategray2"] = "#b9d3ee" let s:rgb["slategray3"] = "#9fb6cd" let s:rgb["slategray4"] = "#6c7b8b" let s:rgb["slategrey"] = "#708090" let s:rgb["snow"] = "#fffafa" let s:rgb["snow1"] = "#fffafa" let s:rgb["snow2"] = "#eee9e9" let s:rgb["snow3"] = "#cdc9c9" let s:rgb["snow4"] = "#8b8989" let s:rgb["spring green"] = "#00ff7f" let s:rgb["springgreen"] = "#00ff7f" let s:rgb["springgreen1"] = "#00ff7f" let s:rgb["springgreen2"] = "#00ee76" let s:rgb["springgreen3"] = "#00cd66" let s:rgb["springgreen4"] = "#008b45" let s:rgb["steel blue"] = "#4682b4" let s:rgb["steelblue"] = "#4682b4" let s:rgb["steelblue1"] = "#63b8ff" let s:rgb["steelblue2"] = "#5cacee" let s:rgb["steelblue3"] = "#4f94cd" let s:rgb["steelblue4"] = "#36648b" let s:rgb["tan"] = "#d2b48c" let s:rgb["tan1"] = "#ffa54f" let s:rgb["tan2"] = "#ee9a49" let s:rgb["tan3"] = "#cd853f" let s:rgb["tan4"] = "#8b5a2b" let s:rgb["thistle"] = "#d8bfd8" let s:rgb["thistle1"] = "#ffe1ff" let s:rgb["thistle2"] = "#eed2ee" let s:rgb["thistle3"] = "#cdb5cd" let s:rgb["thistle4"] = "#8b7b8b" let s:rgb["tomato"] = "#ff6347" let s:rgb["tomato1"] = "#ff6347" let s:rgb["tomato2"] = "#ee5c42" let s:rgb["tomato3"] = "#cd4f39" let s:rgb["tomato4"] = "#8b3626" let s:rgb["turquoise"] = "#40e0d0" let s:rgb["turquoise1"] = "#00f5ff" let s:rgb["turquoise2"] = "#00e5ee" let s:rgb["turquoise3"] = "#00c5cd" let s:rgb["turquoise4"] = "#00868b" let s:rgb["violet red"] = "#d02090" let s:rgb["violet"] = "#ee82ee" let s:rgb["violetred"] = "#d02090" let s:rgb["violetred1"] = "#ff3e96" let s:rgb["violetred2"] = "#ee3a8c" let s:rgb["violetred3"] = "#cd3278" let s:rgb["violetred4"] = "#8b2252" let s:rgb["wheat"] = "#f5deb3" let s:rgb["wheat1"] = "#ffe7ba" let s:rgb["wheat2"] = "#eed8ae" let s:rgb["wheat3"] = "#cdba96" let s:rgb["wheat4"] = "#8b7e66" let s:rgb["white smoke"] = "#f5f5f5" let s:rgb["white"] = "#ffffff" let s:rgb["whitesmoke"] = "#f5f5f5" let s:rgb["yellow green"] = "#9acd32" let s:rgb["yellow"] = "#ffff00" let s:rgb["yellow1"] = "#ffff00" let s:rgb["yellow2"] = "#eeee00" let s:rgb["yellow3"] = "#cdcd00" let s:rgb["yellow4"] = "#8b8b00" let s:rgb["yellowgreen"] = "#9acd32" if has('mac') && !has('macunix') let s:rgb["dark gray"] = "0x808080" let s:rgb["darkgray"] = "0x808080" let s:rgb["dark grey"] = "0x808080" let s:rgb["darkgrey"] = "0x808080" let s:rgb["gray"] = "0xc0c0c0" let s:rgb["grey"] = "0xc0c0c0" let s:rgb["light gray"] = "0xe0e0e0" let s:rgb["lightgray"] = "0xe0e0e0" let s:rgb["light grey"] = "0xe0e0e0" let s:rgb["lightgrey"] = "0xe0e0e0" let s:rgb["dark red"] = "0x800000" let s:rgb["darkred"] = "0x800000" let s:rgb["red"] = "0xdd0806" let s:rgb["light red"] = "0xffa0a0" let s:rgb["lightred"] = "0xffa0a0" let s:rgb["dark blue"] = "0x000080" let s:rgb["darkblue"] = "0x000080" let s:rgb["blue"] = "0x0000d4" let s:rgb["light blue"] = "0xa0a0ff" let s:rgb["lightblue"] = "0xa0a0ff" let s:rgb["dark green"] = "0x008000" let s:rgb["darkgreen"] = "0x008000" let s:rgb["green"] = "0x006411" let s:rgb["light green"] = "0xa0ffa0" let s:rgb["lightgreen"] = "0xa0ffa0" let s:rgb["dark cyan"] = "0x008080" let s:rgb["darkcyan"] = "0x008080" let s:rgb["cyan"] = "0x02abea" let s:rgb["light cyan"] = "0xa0ffff" let s:rgb["lightcyan"] = "0xa0ffff" let s:rgb["dark magenta"] = "0x800080" let s:rgb["darkmagenta"] = "0x800080" let s:rgb["magenta"] = "0xf20884" let s:rgb["light magenta"] = "0xf0a0f0" let s:rgb["lightmagenta"] = "0xf0a0f0" let s:rgb["brown"] = "0x804040" let s:rgb["yellow"] = "0xfcf305" let s:rgb["light yellow"] = "0xffffa0" let s:rgb["lightyellow"] = "0xffffa0" let s:rgb["orange"] = "0xfc8000" let s:rgb["purple"] = "0xa020f0" let s:rgb["slateblue"] = "0x6a5acd" let s:rgb["violet"] = "0x8d38c9" endif function! csapprox#rgb() return s:rgb endfunction ================================================ FILE: .vim/bundle/CSApprox/doc/CSApprox.txt ================================================ *CSApprox.txt* Bringing GVim colorschemes to the terminal! *csapprox* *csapprox.vim* _____ ____ ___ ~ / ___// __// _ | ___ ___ ____ ___ __ __ ~ / /__ _\ \ / __ | / _ \ / _ \ / __// _ \ \ \ / ~ \___//___//_/ |_|/ .__// .__//_/ \___//_\_\ ~ /_/ /_/ ~ For Vim version 7.0 or newer Last changed 14 Sep 2012 By Matt Wozniski godlygeek@gmail.com Reference Manual~ *csapprox-toc* 1. Introduction |csapprox-intro| 2. Requirements |csapprox-requirements| 3. Configuration |csapprox-configure| 4. Rationale/Design |csapprox-design| 5. Known Bugs and Limitations |csapprox-limitations| 6. Appendix - Terminals and Palettes |csapprox-terminal-list| 7. Changelog |csapprox-changelog| 8. Contact Info |csapprox-author| The functionality mentioned here is a plugin, see |add-plugin|. You can avoid loading this plugin by setting the "CSApprox_loaded" global variable in your |vimrc| file: > :let g:CSApprox_loaded = 1 ============================================================================== 1. Introduction *csapprox-intro* It's hard to find colorschemes for terminal Vim. Most colorschemes are written to only support GVim, and don't work at all in terminal Vim. This plugin makes GVim-only colorschemes Just Work in terminal Vim, as long as the terminal supports 88 or 256 colors - and most do these days. This usually requires no user interaction (but see below for what to do if things don't Just Work). After getting this plugin happily installed, any time you use :colorscheme it will do its magic and make the colorscheme Just Work. Whenever you change colorschemes using the :colorscheme command this script will be executed. It will take the colors that the scheme specified for use in the GUI and use an approximation algorithm to try to gracefully degrade them to the closest color available in your terminal. If you are running in a GUI or if your terminal doesn't support 88 or 256 colors, no changes are made. Also, no changes will be made if the colorscheme seems to have been high color already. If for some reason this transparent method isn't suitable to you (for instance if your environment can't be configured to meet the |csapprox-requirements|, or you need to work in Vim 6), another option is also available: using the |:CSApproxSnapshot| command to create a new GUI/88-/256-color terminal colorscheme. To use this command, a user would generally start GVim, choose a colorscheme that sets up the desired colors, and then use |:CSApproxSnapshot| to create a new colorscheme based on those colors that works in high color terminals. This method is more flexible than the transparent mode and works in more places, but also requires more user intervention, and makes it harder to deal with colorschemes being updated and such. *:CSApproxSnapshot* The full syntax for the command is: > :CSApproxSnapshot[!] /path/to/new/colorscheme < For example: > :CSApproxSnapshot ~/.vim/colors/foobar.vim < NOTE: The generated colorscheme will only work in 88- and 256-color terminals, and in GVim. It will not work at all in a terminal with 16 or fewer colors. There's just no reliable way to approximate down from 16,777,216 colors to 16 colors, especially without there being any standard for what those 16 colors look like other than 'orange-ish', 'red-ish', etc. NOTE: Although |:CSApproxSnapshot| can be used in both GVim and terminal Vim, the resulting colors might be slightly off when run from terminal Vim. I can find no way around this; Vim internally sets different colors when running in a terminal than running in the GUI, and there's no way for terminal Vim to figure out what color would have been used in GVim. *:CSApprox* A command is also provided to run the approximation manually. This might be useful if some colors were set outside of a colorscheme file, for instance. By default, it will not change any colors unless no highlight group is set to a color above 15, which is CSApprox's normal behavior. This probably isn't useful in most use cases, though. On the other hand, if a ! is provided, CSApprox will skip that test and update the cterm value for every highlight group from the corresponding gui color. Syntax: > :CSApprox[!] < ============================================================================== 2. Requirements *csapprox-requirements* For CSApprox to work, there are 2 major requirements that must be met. a) GUI support (or vim >= 7.3) *csapprox-gui-support* *csapprox-+gui* NOTE This section only applies to vim versions before 7.3.000 - a modern vim does not need GUI support in order for CSApprox to function. If CSApprox is being used to adjust a scheme's colors transparently, then the terminal "vim" binary that is being run must be built with GUI support (see |csapprox-limitations| for an explanation). If |:CSApproxSnapshot| is being used to create a terminal colorscheme for high color terminals, then the "vim" binary being used to create the scheme must be built with +gui, but the scheme can be used in terminal "vim" binaries that weren't built with +gui. NOTE that creating snapshots with GVim will work better than making them with Vim, and (obviously) all "gvim" binaries are built with +gui. Unfortunately, several Linux distributions only include GUI support in their "gvim" binary, and not in their "vim" binary. You can check if GUI support is available with the following command: :echo has('gui') If that prints 0, the first thing to try would be searching for a larger vim package provided by your distribution, like "vim-enhanced" on RedHat/CentOS or "vim-gtk" or "vim-gnome" on Debian/Ubuntu. If you are unable to obtain a "vim" binary that includes GUI support, but have a "gvim" binary available, you can probably launch Vim with GUI support anyway by calling gvim with the |-v| flag in the shell: > gvim -v If the above works, you can remove the need to call "gvim -v" instead of "vim" all the time by creating a symbolic link from your "gvim" binary to "vim" somewhere in your $PATH, for example: sudo ln -s $(which gvim) $(which vim) If launching as "gvim -v" doesn"t work, and no package with GUI support is available, you will need to compile Vim yourself and ensure that GUI support is included to use CSApprox in its transparent mode, or create a snapshotted scheme from GVim to use its snapshot mode. If this is inconvenient for you, make sure that the Vim maintainer for your distribution knows it; they made a conscious decision to build "vim" without +gui and "gvim" without terminal support. b) Properly configured terminal *csapprox-terminal* As said above, many modern terminals support 88 or 256 colors, but most of these default to setting $TERM to something generic (usually "xterm"). Since Vim uses the value of the "colors" attribute for the current $TERM in terminfo to figure out the number of colors used internally as 't_Co', this plugin will either need for 't_Co' to be set to 88 or 256 in |vimrc|, or for $TERM to be set to something that implies high color support. Possible choices include "xterm-256color" for 256 color support and "rxvt-unicode" for 88 color support. *csapprox-palettes* Also, there are at least three different 256-color palettes in use. Nearly all terminals use an xterm-compatible palette, so most users need not concern themselves with this, with only two exceptions: Eterm uses a slightly different palette, and older Konsole (pre KDE 2.2.0) used a third palette. CSApprox has no reliable way to tell which palette your terminal uses, so it makes some educated guesses: i) If vim thinks that there are 88 colors available, CSApprox will use the xterm/urxvt-compatible 88 color palette (I don't know of any other 88 color palette in use anywhere). ii) If $TERM starts with "Eterm", CSApprox will approximate based on the Eterm palette. iii) If $TERM starts with "konsole", CSApprox will use the legacy Konsole palette if either "kde4-config --kde-version" or "kde-config --version" reports that the KDE version on the system is less than 4.2.0. Otherwise, it will use the xterm palette. iv) If $TERM starts with "xterm" or "screen", then CSApprox looks for the vim variables "g:CSApprox_eterm" and "g:CSApprox_konsole". If g:CSApprox_eterm is true, CSApprox uses the Eterm palette. If g:CSApprox_konsole is true, CSApprox uses the old konsole palette. Otherwise, CSApprox uses the xterm palette. v) For all other $TERM values, CSApprox uses the xterm palette. *csapprox-terminal-example* To turn on high color support despite an incorrect $TERM, you can override t_Co (the vim name for the terminfo setting defining how many colors are available) in your .vimrc, and set either CSApprox_konsole or CSApprox_eterm if appropriate. You could put something like this into your |vimrc|: > if (&term == 'xterm' || &term =~? '^screen') && hostname() == 'my-machine' " On my machine, I use an old Konsole with 256 color support set t_Co=256 let g:CSApprox_konsole = 1 endif Gnome Terminal, as of the time that I am writing this, doesn't support having the terminal emulator set $TERM to something adequately descriptive. In cases like this, something like the following would be appropriate: > if &term =~ '^\(xterm\|screen\)$' && $COLORTERM == 'gnome-terminal' set t_Co=256 endif ============================================================================== 3. Configuration *csapprox-configure* There are several global variables that can be set to configure the behavior of CSApprox. They are listed roughly based on the likelihood that the end user might want to know about them. g:CSApprox_loaded *g:CSApprox_loaded* If set in your |vimrc|, CSApprox is not loaded. Has no effect on snapshotted schemes. g:CSApprox_verbose_level *g:CSApprox_verbose_level* When CSApprox is run, the 'verbose' option will be temporarily raised to the value held in this variable unless it is already greater. The default value is 1, which allows CSApprox to default to warning whenever something is wrong, even if it is recoverable, but allows the user to quiet us if he wants by changing this variable to 0. The most important messages will be shown at verbosity level 1; some less important ones will be shown at higher verbosity levels. Has no effect on snapshotted schemes. g:CSApprox_fake_reverse *g:CSApprox_fake_reverse* In gvim, setting a highlight group like "Visual" (the color of your visual mode selection) to do reverse video results in it reversing the colors of each character cell under it. Some terminals don't support this and will instead always use the default background color on the default foreground color when asked for reverse video. If this variable is set to a non-zero number, CSApprox will change any request for reverse video to the "Normal" group's bg color on the "Normal" group's fg color, instead of asking the terminal to do reverse video. This provides a middle ground for terminals that don't properly support reverse video - it's worse than having the terminal properly reverse the colors of each character cell, but it's better than the broken behavior of some terminal emulators. This was the default behavior before CSApprox 4.0. g:CSApprox_eterm *g:CSApprox_eterm* If set to a non-zero number, CSApprox will use the Eterm palette when 'term' is set to "xterm" or begins with "screen". Otherwise, the xterm palette would be used. This also affects snapshotted schemes. g:CSApprox_konsole *g:CSApprox_konsole* If set to a non-zero number, CSApprox will use the old Konsole palette when 'term' is set to "xterm" or begins with "screen". Otherwise, the xterm palette would be used. This also affects snapshotted schemes. g:CSApprox_attr_map *g:CSApprox_attr_map* Since some attributes (like 'guisp') can't be used in a terminal, and others (like 'italic') are often very ugly in terminals, a generic way to map between a requested attribute and another attribute is included. This variable should be set to a Dictionary, where the keys are strings representing the attributes the author wanted set, and the values are the strings that the user wants set instead. If a value is '', it means the attribute should just be ignored. The default is to replace 'italic' with 'underline', and to use 'fg' instead of 'sp': > let g:CSApprox_attr_map = { 'italic' : 'underline', 'sp' : 'fg' } < Your author prefers disabling bold and italic entirely, so uses this: > let g:CSApprox_attr_map = { 'bold' : '', 'italic' : '', 'sp' : 'fg' } < Note: This transformation is considered at the time a snapshotted scheme is created, rather than when it is used. Note: You can only map an attribute representing a color to another attribute representing a color; likewise with boolean attributes. After all, sp -> bold and italic -> fg would be nonsensical. *g:CSApprox_hook_pre* *g:CSApprox_hook_{scheme}_pre* *g:CSApprox_hook_post* *g:CSApprox_hook_{scheme}_post* g:CSApprox_hook_pre g:CSApprox_hook_post g:CSApprox_hook_{scheme}_pre g:CSApprox_hook_{scheme}_post *csapprox-hooks* These variables provide a method for adjusting tweaking the approximation algorithm, either for all schemes, or on a per scheme basis. For snapshotted schemes, these will only take effect when the snapshotted scheme is created, rather than when it is used. Each of these variables may be set to either a String containing a command to be :execute'd, or a List of such Strings. The _pre hooks are executed before any approximations have been done. In order to affect the approximation at this stage, you would need to change the gui colors for a group; the cterm colors will then be approximated from those gui colors. Example: > let g:CSApprox_hook_pre = 'hi Comment guibg=#ffddff' < The advantage to tweaking the colors at this stage is that CSApprox will handle approximating the given gui colors to the proper cterm colors, regardless of the number of colors the terminal supports. The disadvantage is that certain things aren't possible, including clearing the background or foreground color for a group, selecting a precise cterm color to be used, and overriding the mappings made by g:CSApprox_attr_map. Another notable disadvantage is that overriding things at this level will actually affect the gui colors, in case the :gui is used to start gvim from the running vim instance. To overcome these disadvantages, the _post hooks are provided. These hooks will be executed only after all approximations have been completed. At this stage, in order to have changes appear the cterm* colors must be modified. For example: *csapprox-transparency* > let g:CSApprox_hook_post = ['hi Normal ctermbg=NONE ctermfg=NONE', \ 'hi NonText ctermbg=NONE ctermfg=NONE' ] < Setting g:CSApprox_hook_post as shown above will clear the background of the Normal and NonText groups, forcing the terminal's default background color to be used instead, including any pseudotransparency done by that terminal emulator. As noted, though, the _post functions do not allow CSApprox to approximate the colors. This may be desired, but if this is an inconvenience the function named by g:CSApprox_approximator_function can still be called manually. For example: > let g:CSApprox_hook_post = 'exe "hi Comment ctermbg="' \ . '. g:CSApprox_approximator_function(0xA0,0x50,0x35)' < The _{scheme}_ versions are exactly like their counterparts, except that they will only be executed if the value of g:colors_name matches the scheme name embedded in the variable name. They will be executed after the corresponding hook without _{scheme}_, which provides a way to override a less specific hook with a more specific one. For example, to clear the Normal and NonText groups, but only for the colorscheme "desert", one could do the following: > let g:CSApprox_hook_desert_post = ['hi Normal ctermbg=NONE ctermfg=NONE', \ 'hi NonText ctermbg=NONE ctermfg=NONE' ] < One final example: If you want CSApprox to be active for nearly all colorschemes, but want one or two particular schemes to be ignored, you can take advantage of the CSApprox logic that skips over any color scheme that is already high color by setting a color to a number above 255. Note that most colors greater than 15 will work, but some will not - 256 should always work. For instance, you can prevent CSApprox from modifying the colors of the zellner colorscheme like this: > let g:CSApprox_hook_zellner_pre = 'hi _FakeGroup ctermbg=256' < NOTE: Any characters that would stop the string stored in g:colors_name from being a valid variable name will be removed before the _{scheme}_ hook is searched. Basically, this means that first all characters that are neither alphanumeric nor underscore will be removed, then any leading digits will be removed. So, for a colorscheme named "123 foo_bar-baz456.vim", the hook searched for will be, eg, g:CSApprox_hook_foo_barbaz456_post g:CSApprox_use_showrgb *g:CSApprox_use_showrgb* By default, CSApprox will use a built in mapping of color names to values. This optimization greatly helps speed, but means that colors addressed by name might not match up perfectly between gvim (which uses the system's real rgb database) and CSApprox (which uses the builtin database). To force CSApprox to try the systemwide database first, and only fall back on the builtin database if it isn't available, set this variable non-zero. g:CSApprox_approximator_function *g:CSApprox_approximator_function* If the default approximation function doesn't work well enough, the user (or another author wishing to extend this plugin) can write another approximation function. This function should take three numbers, representing r, g, and b in decimal, and return the index on the color cube that best matches those colors. Assigning a |Funcref| to this variable will override the default approximator with the one the Funcref references. This option will take effect at the time a snapshotted scheme is created, rather than when it's used. g:CSApprox_redirfallback *g:CSApprox_redirfallback* Until Vim 7.2.052, there was a bug in the Vim function synIDattr() that made it impossible to determine syntax information about the |guisp| attribute. CSApprox includes a workaround for this problem, as well as a test that ought to disable this workaround if synIDattr() works properly. If this test should happen to give improper results somehow, the user can force the behavior with this variable. When set to 1, the workaround will always be used, and when set to 0, synIDattr() is blindly used. Needless to say, if this automatic detection should ever fail, the author would like to be notified! This option will take effect at the time a snapshotted scheme is created, rather than when it's used. ============================================================================== 4. Rationale/Design *csapprox-design* There is a wealth of colorschemes available for Vim. Unfortunately, since traditional terminal emulators have only supported 2, 8 or 16 colors, colorscheme authors have tended to avoid writing colorschemes for terminal Vim, sticking instead to GVim. Even now that nearly every popular terminal supports either 88 or 256 colors, few colorschemes are written to support them. This may be because the terminal color codes are just numbers from 0 to 87 or 255 with no semantic meaning, or because the same number doesn't yield the same color in all terminals, or simply because the colorscheme author doesn't use the terminal and doesn't want to take the time to support terminals. Whatever the reason, this leaves users of many modern terminal emulators in the awkward position of having a terminal emulator that supports many colors, but having very few colorschemes that were written to utilize those colors. This is where CSApprox comes in. It attempts to fill this void allowing GVim colorschemes to be used in terminal Vim. CSApprox has two distinct modes of operation. In the first mode, it attempts to make GVim colorschemes transparently backwards compatible with terminal Vim in a high color terminal. Basically, whenever a colorscheme is run it should set some colors for the GUI, and this script will then run and attempt to figure out the closest color available in the terminal's color palette to the color the scheme author asked for. Unfortunately, this does not work well all the time, and it has some limitations (see |csapprox-limitations|). Most of the time, however, this gives a very close approximation to the GVim colors without requiring any changes to the colorscheme, or any user interaction. It only requires that the plugin be installed on the machine where Vim is being run, and that the user's environment meets the needs specified at |csapprox-requirements|. In the event that this doesn't work, a second option - using |:CSApproxSnapshot| to create a new, 88-/256-color capable colorscheme - is available. Ideally, the aim is for CSApprox to be completely transparent to the user. This is why the approach I take is entirely different from the GuiColorScheme script, which will break on any but the simplest colorschemes. Unfortunately, given the difficulty of determining exactly which terminal emulator the user is running, and what features it supports, and which color palette it's using, perfect transparency is difficult. So, to this end, I've attempted to default to settings that make it unlikely that this script ever makes things worse (this is why I chose not to override t_Co to 256 myself), and I've attempted to make it easy to override my choice of defaults when necessary (through g:CSApprox_approximator_function, g:CSApprox_konsole, g:CSApprox_eterm, g:CSApprox_attr_map, etc). In the event that the transparent solution is undesirable, or that the user's environment can't be configured to allow it (no GVim and no Vim with +gui, for instance), |:CSApproxSnapshot| should provide a workable alternative - less cool, and less flexible, but it will work in more environments, and the snapshotted colorscheme will even work in Vim 6. If any of my design choices seem to be causing extra work with no real advantages, though, I'd like to hear about it. Feel free to email me with any improvements or complaints. ============================================================================== 5. Known Bugs and Limitations *csapprox-limitations* GUI support or vim >= 7.3 is required for transparently adapting schemes. There is nothing I can do about this given my chosen design. CSApprox works by being notified every time a colorscheme sets some GUI colors, then approximating those colors to similar terminal colors. Unfortunately, when Vim < 7.3 is not built with GUI support, it doesn't bother to store the GUI colors, so querying for them fails. This leaves me completely unable to tell what the colorscheme was trying to do. See |csapprox-+gui| for some potential workarounds if your distribution doesn't provide a Vim with +gui and you can't upgrade to a modern vim. User intervention is sometimes required for information about the terminal. This is really an insurmountable problem. Unfortunately, most terminal emulators default to setting $TERM to 'xterm', even when they're not really compatible with an xterm. $TERM is really the only reliable way to find anything at all out about the terminal you're running in, so there's no way to know if the terminal supports 88 or 256 colors without either the terminal telling me (using $TERM) or the user telling me (using 't_Co'). Similarly, unless $TERM is set to something that implies a certain color palette ought to be used, there's no way for me to know, so I'm forced to default to the most common, xterm's palette, and allow the user to override my choice with |g:CSApprox_konsole| or |g:CSApprox_eterm|. An example of configuring Vim to work around a terminal where $TERM is set to something generic without configuring the terminal properly is shown at |csapprox-terminal-example|. Some colorschemes could fail to be converted if they try to be too smart. A colorscheme could decide to only set colors for the mode Vim is running in. If a scheme only sets GUI colors when the GUI is running, instead of using the usual approach of setting all colors and letting Vim choose which to use, my approach falls apart. My method for figuring out what the scheme author wants the scheme to look like absolutely depends upon him setting the GUI colors in all modes. Fortunately, the few colorschemes that do this seem to be, by and large, intended for 256 color terminals already, meaning that skipping them is the proper behavior. Note that this will only affect transparently adapted schemes and snapshots made from terminal Vim; snapshots made from GVim are immune to this problem. Transparently adapting schemes is slow. For me, it takes Vim's startup time from 0.15 seconds to 0.35 seconds. This is probably still acceptable, but it is definitely worth trying to cut down on this time in future versions. Snapshotted schemes are faster to use, since all of the hard evaluations are made when they're made instead of when they're used. NOTE: As of CSApprox 3.50, the overhead is down to about 0.10 seconds on my test machine. It isn't possible to approximate only a particular set of groups. Unfortunately, the :CSApprox command will always update all groups, even if only a small set of groups has changed. A future improvement would be to provide a function called, say, CSApprox(), that takes an optional list of highlight groups (default: all) and only does approximation for those groups. ============================================================================== 6. Appendix - Terminals and Palettes *csapprox-terminal-list* What follows is a list of terminals known to have and known not to have high color support. This list is certainly incomplete; feel free to contact me with more to add to either list. *csapprox-terminals-good* ------------------------------- Good Terminals ------------------------------- The most recent versions of each of these terminals can be compiled with either 88 or 256 color support. *csapprox-xterm* xterm: 256 color palette Colors composed of: [ 0x00, 0x5F, 0x87, 0xAF, 0xD7, 0xFF ] Greys composed of: [ 0x08, 0x12, 0x1C, 0x26, 0x30, 0x3A, 0x44, 0x4E, 0x58, 0x62, 0x6C, 0x76, 0x80, 0x8A, 0x94, 0x9E, 0xA8, 0xB2, 0xBC, 0xC6, 0xD0, 0xDA, 0xE4, 0xEE ] *csapprox-urxvt* rxvt-unicode (urxvt): 88 colors by default (but a patch is available to use xterm's palette) Colors composed of: [ 0x00, 0x8B, 0xCD, 0xFF ] Greys composed of: [ 0x2E, 0x5C, 0x73, 0x8B, 0xA2, 0xB9, 0xD0, 0xE7 ] *csapprox-pterm* *csapprox-putty* PuTTY (pterm; putty.exe): 256 colors; same palette as xterm *csapprox-mrxvt* Mrxvt (mrxvt): 256 colors; same palette as xterm *csapprox-gnome-terminal* GNOME Terminal (gnome-terminal): 256 colors; same palette as xterm *csapprox-roxterm* ROXTerm (roxterm): 256 colors; same palette as xterm *csapprox-xfce4-terminal* Terminal (xfce4-terminal): 256 colors; same palette as xterm *csapprox-iterm.app* iTerm (iTerm.app): 256 colors; same palette as xterm *csapprox-konsole* Konsole (konsole): 256 color palette Colors used to be composed of: [ 0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF ] As of KDE 2.2.0, colors match the xterm palette Always used the same greyscales as xterm *csapprox-eterm* eterm (Eterm): 256 color palette Colors composed of: [ 0x00, 0x2A, 0x55, 0x7F, 0xAA, 0xD4 ] Same greyscales as xterm You should set the g:CSApprox_eterm variable unless $TERM begins with 'eterm', case insensitive *csapprox-screen* GNU Screen (screen): 256 color support. Internally, uses the xterm palette, but this is only relevant when running screen inside a terminal with fewer than 256 colors, in which case screen will attempt to map between its own 256 color cube and the colors supported by the real terminal to the best of its ability, in much the same way as CSApprox maps between GUI and terminal colors. *csapprox-terminals-bad* -------------------------------- Bad Terminals ------------------------------- This is a list of terminals known _not_ to have high color support. If any of these terminals have high color support added at some point in the future, please tell me and I'll update this information. *csapprox-terminal.app* Terminal.app (as of OS X 10.5.2) *csapprox-aterm* aterm (as of version 1.00.01) *csapprox-xiterm* xiterm (as of version 0.5) *csapprox-wterm* wterm (as of version 6.2.9) *csapprox-mlterm* mlterm (as of version 2.9.4) *csapprox-kterm* kterm (as of version 6.2.0) ============================================================================== 7. Changelog *csapprox-changelog* 4.00 14 Sep 2012 Fix CSApprox to not fail in vim 7.3 if not +gui, now that vim behaves properly even without +gui Provide the |:CSApprox| command to re-run CSApprox's approximation algorithm even if the colorscheme hasn't changed - useful for when the user has tweaked some colors manually. Better handling for the |inverse| (aka reverse) attribute for terminals that actually support it - and add the g:CSApprox_fake_reverse config variable to allow switching back to the old behavior for terminals that don't support real reverse video. Fix an issue where CSApprox would unconditionally leave 'background' set to "light" - now it will leave 'background' unchanged when it runs. Change the handling for Konsole to use the xterm palette by for KDE versions >= 2.2.0 - Konsole itself was changed to drop its old, slightly incompatible palette in KDE 2.2.0 Fix a minor issue where running vim in recovery mode with |-r| would result in a complaint from CSApprox that the terminal didn't have enough colors even when it did. Fix an issue where, even if CSApprox had been disabled by setting |g:CSApprox_loaded|, a CSApprox error message could still be displayed. 3.50 01 Apr 2009 Fix a major regression that prevented the Eterm and Konsole colors from being correctly snapshotted Fix a related bug causing incorrect terminal colors after calling |:CSApproxSnapshot| Fix a bug causing black to be used instead of dark grey Have snapshots calculate g:colors_name programmatically Introduce many tweaks for better speed Clarify some things at :help csapprox-terminal-example Default to using our own list of rgb.txt colors rather than searching, for performance. Add a new variable, g:CSApprox_use_showrgb, which forces us to try finding the colors using the "showrgb" program instead, and fall back on our own list if it isn't available Remove g:CSApprox_extra_rgb_txt_dirs - not needed in light of the above change 3.05 31 Jan 2009 Fix a harmless "Undefined variable" error in |:CSApproxSnapshot| Fix a behavioral bug when dumping out colors defined external to the scheme. 3.00 21 Jan 2009 Update the docs for better info on |:CSApproxSnapshot| Allow snapshotted schemes to work on Vim 6, and work properly in Konsole and Eterm (thanks David Majnemer!) Fix a bug causing a syntax error when using GVim while CSApprox was loaded. (thanks again, David Majnemer!) 2.00 14 Dec 2008 Add a hooks system, allowing users to specify a command to run, either before or after the approximation algorithm is run, for all schemes or one specific one. Also rewrite |:CSApproxSnapshot| to be more maintainable and less of a hack, and fix several bugs that it contained. 1.50 19 Nov 2008 Add CSApproxSnapshot command, as an alternative solution when the user has gvim or a vim with gui support, but sometimes needs to use a vim without gui support. 1.10 28 Oct 2008 Enable running on systems with no rgb.txt (Penn Su) Begin distributing a copy of rgb.txt with CSApprox 1.00 04 Oct 2008 First public release 0.90 14 Sep 2008 Initial beta release ============================================================================== 8. Contact Info *csapprox-author* Your author, a Vim nerd with some free time, was sick of seeing terminals always get the short end of the stick. He'd like to be notified of any problems you find - after all, he took the time to write all this lovely documentation, and this plugin, which took more time than you could possibly imagine to get working transparently for every colorscheme he could get his hands on. You can contact him with any problems or praises at godlygeek@gmail.com ============================================================================== vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl: ================================================ FILE: .vim/bundle/CSApprox/plugin/CSApprox.vim ================================================ " CSApprox: Make gvim-only colorschemes Just Work terminal vim " Maintainer: Matthew Wozniski (godlygeek@gmail.com) " Date: Fri, 14 Sep 2012 01:12:13 -0400 " Version: 4.00 " History: :help csapprox-changelog " " Long Description: " It's hard to find colorschemes for terminal Vim. Most colorschemes are " written to only support GVim, and don't work at all in terminal Vim. " " This plugin makes GVim-only colorschemes Just Work in terminal Vim, as long " as the terminal supports 88 or 256 colors - and most do these days. This " usually requires no user interaction (but see below for what to do if things " don't Just Work). After getting this plugin happily installed, any time you " use :colorscheme it will do its magic and make the colorscheme Just Work. " " Whenever you change colorschemes using the :colorscheme command this script " will be executed. It will take the colors that the scheme specified for use " in the GUI and use an approximation algorithm to try to gracefully degrade " them to the closest color available in your terminal. If you are running in " a GUI or if your terminal doesn't support 88 or 256 colors, no changes are " made. Also, no changes will be made if the colorscheme seems to have been " high color already. " " License: " Copyright (c) 2012, Matthew J. Wozniski " 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. " * The names of the contributors may not be used to endorse or promote " products derived from this software without specific prior written " permission. " " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``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 HOLDER 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. " {>1} Basic plugin setup " {>2} Check preconditions " Quit if the user doesn't want or need us or is missing the gui feature. We " need +gui to be able to check the gui color settings; vim doesn't bother to " store them if it is not built with +gui. if exists('g:CSApprox_loaded') finish elseif !has('gui') && v:version < 703 " Vim versions less than < 7.3.0 need +gui. " Warn unless the user set g:CSApprox_verbose_level to zero. if get(g:, 'CSApprox_verbose_level', 1) echomsg "CSApprox needs gui support - not loading." echomsg " See :help |csapprox-+gui| for possible workarounds." endif finish endif " {1} Mark us as loaded, and disable all compatibility options for now. let g:CSApprox_loaded = 1 let s:savecpo = &cpo set cpo&vim " {>1} Collect info for the set highlights " {>2} Determine if synIDattr is usable " synIDattr() couldn't support 'guisp' until 7.2.052. This function returns " true if :redir is needed to find the 'guisp' attribute, false if synIDattr() " is functional. This test can be overridden by setting the global variable " g:CSApprox_redirfallback to 1 (to force use of :redir) or to 0 (to force use " of synIDattr()). function! s:NeedRedirFallback() if !exists("g:CSApprox_redirfallback") let g:CSApprox_redirfallback = (v:version == 702 && !has('patch52')) \ || v:version < 702 endif return g:CSApprox_redirfallback endfunction " {>2} Collect and store the highlights " Get a dictionary containing information for every highlight group not merely " linked to another group. Return value is a dictionary, with highlight group " numbers for keys and values that are dictionaries with four keys each, " 'name', 'term', 'cterm', and 'gui'. 'name' holds the group name, and each " of the others holds highlight information for that particular mode. function! s:Highlights(modes) let rv = {} let i = 0 while 1 let i += 1 " Only interested in groups that exist and aren't linked if synIDtrans(i) == 0 break endif " Handle vim bug allowing groups with name == "" to be created if synIDtrans(i) != i || len(synIDattr(i, "name")) == 0 continue endif let rv[i] = {} let rv[i].name = synIDattr(i, "name") for where in a:modes let rv[i][where] = {} for attr in s:PossibleAttributes() let rv[i][where][attr] = synIDattr(i, attr, where) endfor for attr in [ "fg", "bg" ] let rv[i][where][attr] = synIDattr(i, attr.'#', where) endfor if where == "gui" let rv[i][where]["sp"] = s:SynGuiSp(i, rv[i].name) else let rv[i][where]["sp"] = -1 endif for attr in [ "fg", "bg", "sp" ] if rv[i][where][attr] == -1 let rv[i][where][attr] = '' endif endfor endfor endwhile return rv endfunction " {>2} Retrieve guisp " Get guisp using whichever method is specified by _redir_fallback function! s:SynGuiSp(idx, name) if !s:NeedRedirFallback() return s:SynGuiSpAttr(a:idx) else return s:SynGuiSpRedir(a:name) endif endfunction " {>3} Implementation for retrieving guisp with redir hack function! s:SynGuiSpRedir(name) redir => temp exe 'sil hi ' . a:name redir END let temp = matchstr(temp, 'guisp=\zs.*') if len(temp) == 0 || temp[0] =~ '\s' let temp = "" else " Make sure we can handle guisp='dark red' let temp = substitute(temp, '[\x00].*', '', '') let temp = substitute(temp, '\s*\(c\=term\|gui\).*', '', '') let temp = substitute(temp, '\s*$', '', '') endif return temp endfunction " {>3} Implementation for retrieving guisp with synIDattr() function! s:SynGuiSpAttr(idx) return synIDattr(a:idx, 'sp#', 'gui') endfunction " {>1} Handle color names " Place to store rgb.txt name to color mappings - lazy loaded if needed let s:rgb = {} " {>2} Builtin gui color names " gui_x11.c and gui_gtk_x11.c have some default colors names that are searched " if the x server doesn't know about a color. If 'showrgb' is available, " we'll default to using these color names and values, and overwrite them with " other values if 'showrgb' tells us about those colors. let s:rgb_defaults = { "lightred" : "#FFBBBB", \ "lightgreen" : "#88FF88", \ "lightmagenta" : "#FFBBFF", \ "darkcyan" : "#008888", \ "darkblue" : "#0000BB", \ "darkred" : "#BB0000", \ "darkmagenta" : "#BB00BB", \ "darkgrey" : "#BBBBBB", \ "darkyellow" : "#BBBB00", \ "gray10" : "#1A1A1A", \ "grey10" : "#1A1A1A", \ "gray20" : "#333333", \ "grey20" : "#333333", \ "gray30" : "#4D4D4D", \ "grey30" : "#4D4D4D", \ "gray40" : "#666666", \ "grey40" : "#666666", \ "gray50" : "#7F7F7F", \ "grey50" : "#7F7F7F", \ "gray60" : "#999999", \ "grey60" : "#999999", \ "gray70" : "#B3B3B3", \ "grey70" : "#B3B3B3", \ "gray80" : "#CCCCCC", \ "grey80" : "#CCCCCC", \ "gray90" : "#E5E5E5", \ "grey90" : "#E5E5E5" } " {>2} Colors that vim will use by name in one of the default schemes, either " for bg=light or for bg=dark. This lets us avoid loading the entire rgb.txt " database when the scheme itself doesn't ask for colors by name. let s:rgb_presets = { "black" : "#000000", \ "blue" : "#0000ff", \ "brown" : "#a52a2a", \ "cyan" : "#00ffff", \ "darkblue" : "#00008b", \ "darkcyan" : "#008b8b", \ "darkgrey" : "#a9a9a9", \ "darkmagenta" : "#8b008b", \ "green" : "#00ff00", \ "grey" : "#bebebe", \ "grey40" : "#666666", \ "grey90" : "#e5e5e5", \ "lightblue" : "#add8e6", \ "lightcyan" : "#e0ffff", \ "lightgrey" : "#d3d3d3", \ "lightmagenta" : "#ffbbff", \ "magenta" : "#ff00ff", \ "red" : "#ff0000", \ "seagreen" : "#2e8b57", \ "white" : "#ffffff", \ "yellow" : "#ffff00" } " {>2} Find available color names " Find the valid named colors. By default, use our own rgb list, but try to " retrieve the system's list if g:CSApprox_use_showrgb is set to true. Store " the color names and color values to the dictionary s:rgb - the keys are " color names (in lowercase), the values are strings representing color values " (as '#rrggbb'). function! s:UpdateRgbHash() try if !exists("g:CSApprox_use_showrgb") || !g:CSApprox_use_showrgb throw "Not using showrgb" endif " We want to use the 'showrgb' program, if it's around let lines = split(system('showrgb'), '\n') if v:shell_error || !exists('lines') || empty(lines) throw "'showrgb' didn't give us an rgb.txt" endif let s:rgb = copy(s:rgb_defaults) " fmt is (blanks?)(red)(blanks)(green)(blanks)(blue)(blanks)(name) let parsepat = '^\s*\(\d\+\)\s\+\(\d\+\)\s\+\(\d\+\)\s\+\(.*\)$' for line in lines let v = matchlist(line, parsepat) if len(v) < 0 throw "CSApprox: Bad RGB line: " . string(line) endif let s:rgb[tolower(v[4])] = printf("#%02x%02x%02x", v[1], v[2], v[3]) endfor catch try let s:rgb = csapprox#rgb() catch echohl ErrorMsg echomsg "Can't call rgb() from autoload/csapprox.vim" echomsg "Named colors will not be available!" echohl None endtry endtry return 0 endfunction " {>1} Derive and set cterm attributes " {>2} List of all possible attributes function! s:PossibleAttributes() return [ "bold", "italic", "reverse", "underline", "undercurl" ] endfunction " {>2} Attribute overrides " Allow the user to override a specified attribute with another attribute. " For example, the default is to map 'italic' to 'underline' (since many " terminals cannot display italic text, and gvim itself will replace italics " with underlines where italicizing is impossible), and to replace 'sp' with " 'fg' (since terminals can't use one color for the underline and another for " the foreground, we color the entire word). This default can of course be " overridden by the user, by setting g:CSApprox_attr_map. This map must be " a dictionary of string keys, representing the same attributes that synIDattr " can look up, to string values, representing the attribute mapped to or an " empty string to disable the given attribute entirely. function! s:attr_map(attr) let rv = get(g:CSApprox_attr_map, a:attr, a:attr) return rv endfunction function! s:NormalizeAttrMap(map) let old = copy(a:map) let new = filter(a:map, '0') let valid_attrs = [ 'bg', 'fg', 'sp' ] + s:PossibleAttributes() let colorattrs = [ 'fg', 'bg', 'sp' ] for olhs in keys(old) if olhs ==? 'inverse' let nlhs = 'reverse' endif let orhs = old[olhs] if orhs ==? 'inverse' let nrhs = 'reverse' endif let nlhs = tolower(olhs) let nrhs = tolower(orhs) try if index(valid_attrs, nlhs) == -1 echomsg "CSApprox: Bad attr map (removing unrecognized attribute " . olhs . ")" elseif nrhs != '' && index(valid_attrs, nrhs) == -1 echomsg "CSApprox: Bad attr map (removing unrecognized attribute " . orhs . ")" elseif nrhs != '' && !!(index(colorattrs, nlhs)+1) != !!(index(colorattrs, nrhs)+1) echomsg "CSApprox: Bad attr map (removing " . olhs . "; type mismatch with " . orhs . ")" elseif nrhs == 'sp' echomsg "CSApprox: Bad attr map (removing " . olhs . "; can't map to 'sp')" else let new[nlhs] = nrhs endif catch echo v:exception endtry endfor endfunction " {>2} Normalize the GUI settings of a highlight group " If the Normal group is cleared, set it to gvim's default, black on white " Though this would be a really weird thing for a scheme to do... *shrug* function! s:FixupGuiInfo(highlights) if a:highlights[s:hlid_normal].gui.bg == '' let a:highlights[s:hlid_normal].gui.bg = 'white' endif if a:highlights[s:hlid_normal].gui.fg == '' let a:highlights[s:hlid_normal].gui.fg = 'black' endif endfunction " {>2} Map gui settings to cterm settings " Given information about a highlight group, replace the cterm settings with " the mapped gui settings, applying any attribute overrides along the way. In " particular, this gives special treatment to the 'reverse' attribute and the " 'guisp' attribute. In particular, if the 'reverse' attribute is set for " gvim, we unset it for the terminal and instead set ctermfg to match guibg " and vice versa, since terminals can consider a 'reverse' flag to mean using " default-bg-on-default-fg instead of current-bg-on-current-fg. We also " ensure that the 'sp' attribute is never set for cterm, since no terminal can " handle that particular highlight. If the user wants to display the guisp " color, he should map it to either 'fg' or 'bg' using g:CSApprox_attr_map. function! s:FixupCtermInfo(highlights) for hl in values(a:highlights) if !has_key(hl, 'cterm') let hl["cterm"] = {} endif " Find attributes to be set in the terminal for attr in s:PossibleAttributes() let hl.cterm[attr] = '' if hl.gui[attr] == 1 if s:attr_map(attr) != '' let hl.cterm[ s:attr_map(attr) ] = 1 endif endif endfor for color in [ "bg", "fg" ] let eff_color = color if hl.cterm['reverse'] let eff_color = (color == 'bg' ? 'fg' : 'bg') endif let hl.cterm[color] = get(hl.gui, s:attr_map(eff_color), '') endfor if hl.gui['sp'] != '' && s:attr_map('sp') != '' let hl.cterm[s:attr_map('sp')] = hl.gui['sp'] endif if exists("g:CSApprox_fake_reverse") && g:CSApprox_fake_reverse if hl.cterm['reverse'] && hl.cterm.bg == '' let hl.cterm.bg = 'fg' endif if hl.cterm['reverse'] && hl.cterm.fg == '' let hl.cterm.fg = 'bg' endif if hl.cterm['reverse'] let hl.cterm.reverse = '' endif endif endfor endfunction " {>2} Kludge around inability to reference autoload functions function! s:DefaultApproximator(...) return call('csapprox#per_component#Approximate', a:000) endfunction " {>2} Set cterm colors for a highlight group " Given the information for a single highlight group (ie, the value of " one of the items in s:Highlights() already normalized with s:FixupCtermInfo " and s:FixupGuiInfo), handle matching the gvim colors to the closest cterm " colors by calling the appropriate approximator as specified with the " g:CSApprox_approximator_function variable and set the colors and attributes " appropriately to match the gui. function! s:SetCtermFromGui(hl) let hl = a:hl " Set up the default approximator function, if needed if !exists("g:CSApprox_approximator_function") let g:CSApprox_approximator_function = function("s:DefaultApproximator") endif " Clear existing highlights exe 'hi ' . hl.name . ' cterm=NONE ctermbg=NONE ctermfg=NONE' for which in [ 'bg', 'fg' ] let val = hl.cterm[which] " Skip unset colors if val == -1 || val == "" continue endif " Try translating anything but 'fg', 'bg', #rrggbb, and rrggbb from an " rgb.txt color to a #rrggbb color if val !~? '^[fb]g$' && val !~ '^#\=\x\{6}$' try " First see if it is in our preset-by-vim rgb list let val = s:rgb_presets[tolower(val)] catch " Then try loading and checking our real rgb list if empty(s:rgb) call s:UpdateRgbHash() endif try let val = s:rgb[tolower(val)] catch " And then barf if we still haven't found it if &verbose echomsg "CSApprox: Colorscheme uses unknown color \"" . val . "\"" endif continue endtry endtry endif if val =~? '^[fb]g$' exe 'hi ' . hl.name . ' cterm' . which . '=' . val let hl.cterm[which] = val elseif val =~ '^#\=\x\{6}$' let val = substitute(val, '^#', '', '') let r = str2nr(val[0:1], 16) let g = str2nr(val[2:3], 16) let b = str2nr(val[4:5], 16) let hl.cterm[which] = g:CSApprox_approximator_function(r, g, b) exe 'hi ' . hl.name . ' cterm' . which . '=' . hl.cterm[which] else throw "Internal error handling color: " . val endif endfor " Finally, set the attributes let attrs = s:PossibleAttributes() call filter(attrs, 'hl.cterm[v:val] == 1') if !empty(attrs) exe 'hi ' . hl.name . ' cterm=' . join(attrs, ',') endif endfunction " {>1} Top-level control " Cache the highlight ID of the normal group; it's used often and won't change let s:hlid_normal = hlID('Normal') " {>2} Builtin cterm color names above 15 " Vim defines some color name to high color mappings internally (see " syntax.c:do_highlight). Since we don't want to overwrite a colorscheme that " was actually written for a high color terminal with our choices, but have no " way to tell if a colorscheme was written for a high color terminal, we fall " back on guessing. If any highlight group has a cterm color set to 16 or " higher, we assume that the user has used a high color colorscheme - unless " that color is one of the below, which vim can set internally when a color is " requested by name. let s:presets_88 = [] let s:presets_88 += [32] " Brown let s:presets_88 += [72] " DarkYellow let s:presets_88 += [84] " Gray let s:presets_88 += [84] " Grey let s:presets_88 += [82] " DarkGray let s:presets_88 += [82] " DarkGrey let s:presets_88 += [43] " LightBlue let s:presets_88 += [61] " LightGreen let s:presets_88 += [63] " LightCyan let s:presets_88 += [74] " LightRed let s:presets_88 += [75] " LightMagenta let s:presets_88 += [78] " LightYellow let s:presets_256 = [] let s:presets_256 += [130] " Brown let s:presets_256 += [130] " DarkYellow let s:presets_256 += [248] " Gray let s:presets_256 += [248] " Grey let s:presets_256 += [242] " DarkGray let s:presets_256 += [242] " DarkGrey let s:presets_256 += [ 81] " LightBlue let s:presets_256 += [121] " LightGreen let s:presets_256 += [159] " LightCyan let s:presets_256 += [224] " LightRed let s:presets_256 += [225] " LightMagenta let s:presets_256 += [229] " LightYellow " {>2} Wrapper around :exe to allow :executing multiple commands. " "cmd" is the command to be :executed. " If the variable is a String, it is :executed. " If the variable is a List, each element is :executed. function! s:exe(cmd) if type(a:cmd) == type('') exe a:cmd else for cmd in a:cmd call s:exe(cmd) endfor endif endfunction " {>2} Function to handle hooks " Prototype: HandleHooks(type [, scheme]) " "type" is the type of hook to be executed, ie. "pre" or "post" " "scheme" is the name of the colorscheme that is currently active, if known " " If the variables g:CSApprox_hook_{type} and g:CSApprox_hook_{scheme}_{type} " exist, this will :execute them in that order. If one does not exist, it " will silently be ignored. " " If the scheme name contains characters that are invalid in a variable name, " they will simply be removed. Ie, g:colors_name = "123 foo_bar-baz456" " becomes "foo_barbaz456" " " NOTE: Exceptions will be printed out, rather than end processing early. The " rationale is that it is worse for the user to fix the hook in an editor with " broken colors. :) function! s:HandleHooks(type, ...) let type = a:type let scheme = (a:0 == 1 ? a:1 : "") let scheme = substitute(scheme, '[^[:alnum:]_]', '', 'g') let scheme = substitute(scheme, '^\d\+', '', '') for cmd in [ 'g:CSApprox_hook_' . type, \ 'g:CSApprox_' . scheme . '_hook_' . type, \ 'g:CSApprox_hook_' . scheme . '_' . type ] if exists(cmd) try call s:exe(eval(cmd)) catch echomsg "Error processing " . cmd . ":" echomsg v:exception endtry endif endfor endfunction " {>2} Main function " Wrapper around the actual implementation to make it easier to ensure that " all temporary settings are restored by the time we return, whether or not " something was thrown. Additionally, sets the 'verbose' option to the max of " g:CSApprox_verbose_level (default 1) and &verbose for the duration of the " main function. This allows us to default to a message whenever any error, " even a recoverable one, occurs, meaning the user quickly finds out when " something's wrong, but makes it very easy for the user to make us silent. function! s:CSApprox(...) try if a:0 == 1 && a:1 if !exists('s:inhibit_hicolor_test') let s:inhibit_hicolor_test = 0 endif let s:inhibit_hicolor_test += 1 endif let savelz = &lz set lz if exists("g:CSApprox_attr_map") && type(g:CSApprox_attr_map) == type({}) call s:NormalizeAttrMap(g:CSApprox_attr_map) else let g:CSApprox_attr_map = { 'italic' : 'underline', 'sp' : 'fg' } endif " colors_name must be unset and reset, or vim will helpfully reload the " colorscheme when we set the background for the Normal group. " See the help entries ':hi-normal-cterm' and 'g:colors_name' if exists("g:colors_name") let colors_name = g:colors_name unlet g:colors_name endif " Similarly, the global variable "syntax_cmd" must be set to something vim " doesn't recognize, lest vim helpfully switch all colors back to the " default whenever the Normal group is changed (in syncolor.vim)... if exists("g:syntax_cmd") let syntax_cmd = g:syntax_cmd endif let g:syntax_cmd = "PLEASE DON'T CHANGE ANY COLORS!!!" " Set up our verbosity level, if needed. " Default to 1, so the user can know if something's wrong. if !exists("g:CSApprox_verbose_level") let g:CSApprox_verbose_level = 1 endif call s:HandleHooks("pre", (exists("colors_name") ? colors_name : "")) let old_bg = &bg " Set 'verbose' set to the maximum of &verbose and CSApprox_verbose_level exe max([&vbs, g:CSApprox_verbose_level]) 'verbose call s:CSApproxImpl()' let &bg = old_bg call s:HandleHooks("post", (exists("colors_name") ? colors_name : "")) finally if exists("colors_name") let g:colors_name = colors_name endif unlet g:syntax_cmd if exists("syntax_cmd") let g:syntax_cmd = syntax_cmd endif let &lz = savelz if a:0 == 1 && a:1 let s:inhibit_hicolor_test -= 1 if s:inhibit_hicolor_test == 0 unlet s:inhibit_hicolor_test endif endif endtry endfunction " {>2} CSApprox implementation " Verifies that the user has not started the gui, and that vim recognizes his " terminal as having enough colors for us to go on, then gathers the existing " highlights and sets the cterm colors to match the gui colors for all those " highlights (unless the colorscheme was already high-color). function! s:CSApproxImpl() " Return if not running in an 88/256 color terminal if &t_Co != 256 && &t_Co != 88 if &verbose && &t_Co != '' echomsg "CSApprox skipped; terminal only has" &t_Co "colors, not 88/256" echomsg "Try checking :help csapprox-terminal for workarounds" endif return endif " Get the current highlight colors let highlights = s:Highlights(["gui"]) let hinums = keys(highlights) " Make sure that the script is not already 256 color by checking to make " sure that no groups are set to a value above 256, unless the color they're " set to can be set internally by vim (gotten by scraping " color_numbers_{88,256} in syntax.c:do_highlight) " " XXX: s:inhibit_hicolor_test allows this test to be skipped for snapshots if !exists("s:inhibit_hicolor_test") || !s:inhibit_hicolor_test for hlid in hinums for type in [ 'bg', 'fg' ] let color = synIDattr(hlid, type, 'cterm') if color > 15 && index(s:presets_{&t_Co}, str2nr(color)) < 0 " The value is set above 15, and wasn't set by vim. if &verbose >= 2 echomsg 'CSApprox: Exiting - high' type 'color found for' highlights[hlid].name endif return endif endfor endfor endif call s:FixupGuiInfo(highlights) call s:FixupCtermInfo(highlights) " We need to set the Normal group first so 'bg' and 'fg' work as colors call insert(hinums, remove(hinums, index(hinums, string(s:hlid_normal)))) " then set each color's cterm attributes to match gui for hlid in hinums call s:SetCtermFromGui(highlights[hlid]) endfor endfunction " {>2} Write out the current colors to an 88/256 color colorscheme file. " "file" - destination filename " "overwrite" - overwrite an existing file function! s:CSApproxSnapshot(file, overwrite) let force = a:overwrite let file = fnamemodify(a:file, ":p") if empty(file) throw "Bad file name: \"" . file . "\"" elseif (filewritable(fnamemodify(file, ':h')) != 2) throw "Cannot write to directory \"" . fnamemodify(file, ':h') . "\"" elseif (glob(file) || filereadable(file)) && !force " TODO - respect 'confirm' here and prompt if it's set. echohl ErrorMsg echomsg "E13: File exists (add ! to override)" echohl None return endif " Sigh... This is basically a bug, but one that I have no chance of fixing. " Vim decides that Pmenu should be highlighted in 'LightMagenta' in terminal " vim and as 'Magenta' in gvim... And I can't ask it what color it actually " *wants*. As far as I can see, there's no way for me to learn that " I should output 'Magenta' when 'LightMagenta' is provided by vim for the " terminal. if !has('gui_running') echohl WarningMsg echomsg "Warning: The written colorscheme may have incorrect colors" echomsg " when CSApproxSnapshot is used in terminal vim!" echohl None endif let save_t_Co = &t_Co let s:inhibit_hicolor_test = 1 if exists("g:CSApprox_konsole") let save_CSApprox_konsole = g:CSApprox_konsole endif if exists("g:CSApprox_eterm") let save_CSApprox_eterm = g:CSApprox_eterm endif " Needed just like in CSApprox() if exists("g:colors_name") let colors_name = g:colors_name unlet g:colors_name endif " Needed just like in CSApprox() if exists("g:syntax_cmd") let syntax_cmd = g:syntax_cmd endif let g:syntax_cmd = "PLEASE DON'T CHANGE ANY COLORS!!!" try let lines = [] let lines += [ '" This scheme was created by CSApproxSnapshot' ] let lines += [ '" on ' . strftime("%a, %d %b %Y") ] let lines += [ '' ] let lines += [ 'hi clear' ] let lines += [ 'if exists("syntax_on")' ] let lines += [ ' syntax reset' ] let lines += [ 'endif' ] let lines += [ '' ] let lines += [ 'if v:version < 700' ] let lines += [ ' let g:colors_name = expand(":t:r")' ] let lines += [ ' command! -nargs=+ CSAHi exe "hi" substitute(substitute(, "undercurl", "underline", "g"), "guisp\\S\\+", "", "g")' ] let lines += [ 'else' ] let lines += [ ' let g:colors_name = expand(":t:r")' ] let lines += [ ' command! -nargs=+ CSAHi exe "hi" ' ] let lines += [ 'endif' ] let lines += [ '' ] let lines += [ 'function! s:old_kde()' ] let lines += [ ' " Konsole only used its own palette up til KDE 4.2.0' ] let lines += [ " if executable('kde4-config') && system('kde4-config --kde-version') =~ '^4\.[10]\.'" ] let lines += [ ' return 1' ] let lines += [ " elseif executable('kde-config') && system('kde-config --version') =~# 'KDE: 3\.'" ] let lines += [ ' return 1' ] let lines += [ ' else' ] let lines += [ ' return 0' ] let lines += [ ' endif' ] let lines += [ 'endfunction' ] let lines += [ '' ] let lines += [ 'if 0' ] for round in [ 'konsole', 'eterm', 'xterm', 'urxvt' ] sil! unlet g:CSApprox_eterm sil! unlet g:CSApprox_konsole if round == 'konsole' let g:CSApprox_konsole = 1 elseif round == 'eterm' let g:CSApprox_eterm = 1 endif if round == 'urxvt' set t_Co=88 else set t_Co=256 endif call s:CSApprox() let highlights = s:Highlights(["term", "cterm", "gui"]) call s:FixupGuiInfo(highlights) if round == 'konsole' || round == 'eterm' if round == 'konsole' let term_matches_round = '(&term =~? "^konsole" && s:old_kde())' else let term_matches_round = '&term =~? "^' . round . '"' endif let lines += [ 'elseif has("gui_running") || (&t_Co == ' . &t_Co \ . ' && (&term ==# "xterm" || &term =~# "^screen")' \ . ' && exists("g:CSApprox_' . round . '")' \ . ' && g:CSApprox_' . round . ')' \ . ' || ' . term_matches_round ] else let lines += [ 'elseif has("gui_running") || &t_Co == ' . &t_Co ] endif let hinums = keys(highlights) call insert(hinums, remove(hinums, index(hinums, string(s:hlid_normal)))) for hlnum in hinums let hl = highlights[hlnum] let line = ' CSAHi ' . hl.name for type in [ 'term', 'cterm', 'gui' ] let attrs = s:PossibleAttributes() call filter(attrs, 'hl[type][v:val] == 1') let line .= ' ' . type . '=' . (empty(attrs) ? 'NONE' : join(attrs, ',')) if type != 'term' let line .= ' ' . type . 'bg=' . (len(hl[type].bg) ? hl[type].bg : 'bg') let line .= ' ' . type . 'fg=' . (len(hl[type].fg) ? hl[type].fg : 'fg') if type == 'gui' && hl.gui.sp !~ '^\s*$' let line .= ' ' . type . 'sp=' . hl[type].sp endif endif endfor let lines += [ line ] endfor endfor let lines += [ 'endif' ] let lines += [ '' ] let lines += [ 'if 1' ] let lines += [ ' delcommand CSAHi' ] let lines += [ 'endif' ] call writefile(lines, file) finally let &t_Co = save_t_Co if exists("save_CSApprox_konsole") let g:CSApprox_konsole = save_CSApprox_konsole endif if exists("save_CSApprox_eterm") let g:CSApprox_eterm = save_CSApprox_eterm endif if exists("colors_name") let g:colors_name = colors_name endif unlet g:syntax_cmd if exists("syntax_cmd") let g:syntax_cmd = syntax_cmd endif call s:CSApprox() unlet s:inhibit_hicolor_test endtry endfunction " {>2} Snapshot user command command! -bang -nargs=1 -complete=file -bar CSApproxSnapshot \ call s:CSApproxSnapshot(, strlen("")) " {>2} Manual updates command -bang -bar CSApprox call s:CSApprox(strlen("")) " {>1} Autocmds " Set up an autogroup to hook us on the completion of any :colorscheme command augroup CSApprox au! au ColorScheme * call s:CSApprox() "au User CSApproxPost highlight Normal ctermbg=none | highlight NonText ctermbg=None augroup END " {>1} Restore compatibility options let &cpo = s:savecpo unlet s:savecpo " {0} vim:sw=2:sts=2:et:fdm=expr:fde=substitute(matchstr(getline(v\:lnum),'^\\s*"\\s*{\\zs.\\{-}\\ze}'),'^$','=','') ================================================ FILE: .vim/bundle/Gist.vim/README ================================================ This is a mirror of http://www.vim.org/scripts/script.php?script_id=2423 This is vimscript for gist (http://gist.github.com) Usage: :Gist post whole text to gist. :'<,'>Gist post selected text to gist. :Gist -p post whole text to gist with private. if you got empty gist list, try :Gist --abandon :Gist -a post whole text to gist with anonymous. :Gist -m post multi buffer to gist. :Gist -e edit the gist. (shoud be work on gist buffer) you can update the gist with :w command on gist buffer. :Gist -e foo.js edit the gist with name 'foo.js'. (shoud be work on gist buffer) :Gist -d delete the gist. (should be work on gist buffer) password authentication is needed. :Gist -f fork the gist. (should be work on gist buffer) password authentication is needed. :Gist XXXXX get gist XXXXX. :Gist -c XXXXX. get gist XXXXX and put to clipboard. :Gist -l list gists from mine. :Gist -la list gists from all. Tips: if set g:gist_clip_command, gist.vim will copy the gist code with option '-c'. # mac let g:gist_clip_command = 'pbcopy' # linux let g:gist_clip_command = 'xclip -selection clipboard' # others(cygwin?) let g:gist_clip_command = 'putclip' if you want to detect filetype from filename... let g:gist_detect_filetype = 1 if you want to open browser after the post... let g:gist_open_browser_after_post = 1 if you want to change the browser... let g:gist_browser_command = 'w3m %URL%' or let g:gist_browser_command = 'opera %URL% &' on windows, should work with original setting. Require: curl command (http://curl.haxx.se/) and if you want to use profile of git, it require git command. ================================================ FILE: .vim/bundle/Gist.vim/README.mkd ================================================ ### Gist.vim This is a vimscript for creating gists (http://gist.github.com). For the latest version please see https://github.com/mattn/gist-vim. ## Usage: - Post current buffer to gist, using default privacy option. :Gist - Post selected text to gist, using default privacy option. This applies to all permutations listed below (except multi). :'<,'>Gist - Create a private gist. :Gist -p - Create a public gist. (Only relevant if you've set gists to be private by default.) :Gist -P > This is only relevant if you've set gists to be private by default; > if you get an empty gist list, try ":Gist --abandon". - Create a gist anonymously. :Gist -a - Create a gist with all open buffers. :Gist -m - Edit the gist (you need to have opened the gist buffer first). You can update the gist with the ":w" command within the gist buffer. :Gist -e - Edit the gist with name 'foo.js' (you need to have opened the gist buffer first). :Gist -e foo.js - Post/Edit with the description " (you need to have opened the gist buffer first). > :Gist -s something :Gist -e -s something - Delete the gist (you need to have opened the gist buffer first). Password authentication is needed. :Gist -d - Fork the gist (you need to have opened the gist buffer first). Password authentication is needed. :Gist -f - Star the gist (you need to have opened the gist buffer first). Password authentication is needed. :Gist +1 - Unstar the gist (you need to have opened the gist buffer first). Password authentication is needed. :Gist -1 - Get gist XXXXX. :Gist XXXXX - Get gist XXXXX and add to clipboard. :Gist -c XXXXX - List your public gists. :Gist -l - List gists from user "mattn". :Gist -l mattn - List everyone's gists. :Gist -la - List gists from your starred gists. :Gist -ls ## Tips: If you set g:gist_clip_command, gist.vim will copy the gist code with option '-c'. - Mac: let g:gist_clip_command = 'pbcopy' - Linux: let g:gist_clip_command = 'xclip -selection clipboard' - Others (cygwin?): let g:gist_clip_command = 'putclip' If you want to detect filetype from the filename: let g:gist_detect_filetype = 1 If you want to open browser after the post: let g:gist_open_browser_after_post = 1 If you want to change the browser: let g:gist_browser_command = 'w3m %URL%' or: let g:gist_browser_command = 'opera %URL% &' On windows, this should work with your user settings. If you want to show your private gists with ":Gist -l": let g:gist_show_privates = 1 If you want your gist to be private by default: let g:gist_post_private = 1 If you want to manipulate multiple files in a gist: let g:gist_get_multiplefile = 1 You need to either set global git config: $ git config --global github.user Username ## Requirements: - curl command (http://curl.haxx.se/) - webapi-vim (https://github.com/mattn/webapi-vim) - and if you want to use your git profile, the git command-line client. ## License: Copyright 2010 by Yasuhiro Matsumoto modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. 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 REGENTS 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. ## Install: Copy it to your plugin directory. gist.vim will create a curl cookie-jar file in your runtimepath. - rtp: - plugin/gist.vim - cookies/github If you want to uninstall gist.vim, remember to also remove `~/.gist-vim`. ## Setup: This plugin uses github API v3. Setting value is stored in `~/.gist-vim`. gist-vim have two ways to access APIs. First, you need to set your Github username in global git config: $ git config --global github.user Username Then, gist.vim will ask for your password to create an authorization when you first use it. The password is not stored and only the OAuth access token will be kept for later use. You can revoke the token at any time from the list of ["Authorized applications" on Github's "Account Settings" page](https://github.com/settings/applications). ================================================ FILE: .vim/bundle/Gist.vim/autoload/gist.vim ================================================ "============================================================================= " File: gist.vim " Author: Yasuhiro Matsumoto " Last Change: 27-Sep-2012. " Version: 7.0 " WebPage: http://github.com/mattn/gist-vim " License: BSD let s:save_cpo = &cpo set cpo&vim let s:configfile = expand('~/.gist-vim') if !exists('g:github_user') let s:system = function(get(g:, 'webapi#system_function', 'system')) let g:github_user = substitute(s:system('git config --get github.user'), "\n", '', '') if strlen(g:github_user) == 0 let g:github_user = $GITHUB_USER end endif function! s:get_browser_command() let gist_browser_command = get(g:, 'gist_browser_command', '') if gist_browser_command == '' if has('win32') || has('win64') let gist_browser_command = '!start rundll32 url.dll,FileProtocolHandler %URL%' elseif has('mac') || has('macunix') || has('gui_macvim') || system('uname') =~? '^darwin' let gist_browser_command = 'open %URL%' elseif executable('xdg-open') let gist_browser_command = 'xdg-open %URL%' elseif executable('firefox') let gist_browser_command = 'firefox %URL% &' else let gist_browser_command = '' endif endif return gist_browser_command endfunction function! s:open_browser(url) let cmd = s:get_browser_command() if len(cmd) == 0 redraw echohl WarningMsg echo "It seems that you don't have general web browser. Open URL below." echohl None echo a:url return endif if cmd =~ '^!' let cmd = substitute(cmd, '%URL%', '\=shellescape(a:url)', 'g') silent! exec cmd elseif cmd =~ '^:[A-Z]' let cmd = substitute(cmd, '%URL%', '\=a:url', 'g') exec cmd else let cmd = substitute(cmd, '%URL%', '\=shellescape(a:url)', 'g') call system(cmd) endif endfunction function! s:shellwords(str) let words = split(a:str, '\%(\([^ \t\''"]\+\)\|''\([^\'']*\)''\|"\(\%([^\"\\]\|\\.\)*\)"\)\zs\s*\ze') let words = map(words, 'substitute(v:val, ''\\\([\\ ]\)'', ''\1'', "g")') let words = map(words, 'matchstr(v:val, ''^\%\("\zs\(.*\)\ze"\|''''\zs\(.*\)\ze''''\|.*\)$'')') return words endfunction function! s:format_gist(gist) let files = sort(keys(a:gist.files)) if empty(files) return "" endif let file = a:gist.files[files[0]] if has_key(file, "content") let code = file.content let code = "\n".join(map(split(code, "\n"), '" ".v:val'), "\n") else let code = "" endif return printf("gist: %s %s%s", a:gist.id, type(a:gist.description)==0?"": a:gist.description, code) endfunction " Note: A colon in the file name has side effects on Windows due to NTFS Alternate Data Streams; avoid it. let s:bufprefix = 'gist' . (has('unix') ? ':' : '_') function! s:GistList(gistls, page) if a:gistls == '-all' let url = 'https://api.github.com/gists/public' elseif get(g:, 'gist_show_privates', 0) && a:gistls == 'starred' let url = 'https://api.github.com/gists/starred' elseif get(g:, 'gist_show_privates') && a:gistls == 'mine' let url = 'https://api.github.com/gists' else let url = 'https://api.github.com/users/'.a:gistls.'/gists' endif let winnum = bufwinnr(bufnr(s:bufprefix.a:gistls)) if winnum != -1 if winnum != bufwinnr('%') exe winnum 'wincmd w' endif setlocal modifiable else exec 'silent noautocmd split' s:bufprefix.a:gistls endif if a:page > 1 let oldlines = getline(0, line('$')) let url = url . '?page=' . a:page endif setlocal modifiable let old_undolevels = &undolevels let oldlines = [] silent %d _ redraw | echon 'Listing gists... ' let auth = s:GistGetAuthHeader() if len(auth) == 0 bw! redraw echohl ErrorMsg | echomsg 'Canceled' | echohl None return endif let res = webapi#http#get(url, '', { "Authorization": auth }) if v:shell_error != 0 bw! redraw echohl ErrorMsg | echomsg 'Gists not found' | echohl None return endif let content = webapi#json#decode(res.content) if type(content) == 4 && has_key(content, 'message') && len(content.message) bw! redraw echohl ErrorMsg | echomsg content.message | echohl None if content.message == 'Bad credentials' call delete(s:configfile) endif return endif let lines = map(filter(content, '!empty(v:val.files)'), 's:format_gist(v:val)') call setline(1, split(join(lines, "\n"), "\n")) $put='more...' let b:gistls = a:gistls let b:page = a:page setlocal buftype=nofile bufhidden=hide noswapfile setlocal nomodified setlocal nomodifiable syntax match SpecialKey /^gist:/he=e-1 nnoremap :call GistListAction(0) nnoremap :call GistListAction(1) cal cursor(1+len(oldlines),1) nohlsearch redraw | echo '' endfunction function! gist#list(user, ...) let page = get(a:000, 0, 0) if a:user == '-all' let url = 'https://api.github.com/gists/public' elseif get(g:, 'gist_show_privates', 0) && a:user == 'starred' let url = 'https://api.github.com/gists/starred' elseif get(g:, 'gist_show_privates') && a:user == 'mine' let url = 'https://api.github.com/gists' else let url = 'https://api.github.com/users/'.a:user.'/gists' endif let auth = s:GistGetAuthHeader() if len(auth) == 0 return [] endif let res = webapi#http#get(url, '', { "Authorization": auth }) return webapi#json#decode(res.content) endfunction function! s:GistGetFileName(gistid) let auth = s:GistGetAuthHeader() if len(auth) == 0 return '' endif let res = webapi#http#get('https://api.github.com/gists/'.a:gistid, '', { "Authorization": auth }) let gist = webapi#json#decode(res.content) if has_key(gist, 'files') return sort(keys(gist.files))[0] endif return '' endfunction function! s:GistDetectFiletype(gistid) let auth = s:GistGetAuthHeader() if len(auth) == 0 return '' endif let res = webapi#http#get('https://api.github.com/gists/'.a:gistid, '', { "Authorization": auth }) let gist = webapi#json#decode(res.content) let filename = sort(keys(gist.files))[0] let ext = fnamemodify(filename, ':e') if has_key(s:extmap, ext) let type = s:extmap[ext] else let type = get(gist.files[filename], "type", "text") endif silent! exec "setlocal ft=".tolower(type) endfunction function! s:GistWrite(fname) if substitute(a:fname, '\\', '/', 'g') == expand("%:p:gs@\\@/@") Gist -e else exe "w".(v:cmdbang ? "!" : "") fnameescape(v:cmdarg) fnameescape(a:fname) silent! exe "file" fnameescape(a:fname) silent! au! BufWriteCmd endif endfunction function! s:GistGet(gistid, clipboard) redraw | echon 'Getting gist... ' let res = webapi#http#get('https://api.github.com/gists/'.a:gistid, '', { "Authorization": s:GistGetAuthHeader() }) let status = matchstr(matchstr(res.header, '^Status:'), '^[^:]\+: \zs.*') if status =~ '^2' let gist = webapi#json#decode(res.content) if get(g:, 'gist_get_multiplefile', 0) != 0 let num_file = len(keys(gist.files)) else let num_file = 1 endif redraw if num_file > len(keys(gist.files)) echohl ErrorMsg | echomsg 'Gist not found' | echohl None return endif for n in range(num_file) try let old_undolevels = &undolevels let filename = sort(keys(gist.files))[n] let winnum = bufwinnr(bufnr(s:bufprefix.a:gistid."/".filename)) if winnum != -1 if winnum != bufwinnr('%') exe winnum 'wincmd w' endif setlocal modifiable else exec 'silent noautocmd new' setlocal noswapfile exec 'noautocmd file' s:bufprefix.a:gistid."/".fnameescape(filename) endif set undolevels=-1 filetype detect silent %d _ let content = gist.files[filename].content call setline(1, split(content, "\n")) let b:gist = { \ "filename": filename, \ "id": gist.id, \ "description": gist.description, \ "private": gist.public =~ 'true', \} catch let &undolevels = old_undolevels bw! redraw echohl ErrorMsg | echomsg 'Gist contains binary' | echohl None return endtry let &undolevels = old_undolevels setlocal buftype=acwrite bufhidden=delete noswapfile setlocal nomodified doau StdinReadPost,BufRead,BufReadPost let gist_detect_filetype = get(g:, 'gist_detect_filetype', 0) if (&ft == '' && gist_detect_filetype == 1) || gist_detect_filetype == 2 call s:GistDetectFiletype(a:gistid) endif if a:clipboard if exists('g:gist_clip_command') exec 'silent w !'.g:gist_clip_command elseif has('clipboard') silent! %yank + else %yank endif endif 1 au! BufWriteCmd call s:GistWrite(expand("")) endfor else bw! redraw echohl ErrorMsg | echomsg 'Gist not found' | echohl None return endif endfunction function! s:GistListAction(shift) let line = getline('.') let mx = '^gist:\s*\zs\(\w\+\)\ze.*' if line =~# mx let gistid = matchstr(line, mx) if a:shift call s:open_browser("https://gist.github.com/" . gistid) else call s:GistGet(gistid, 0) endif return endif if line =~# '^more\.\.\.$' call s:GistList(b:gistls, b:page+1) return endif endfunction function! s:GistUpdate(content, gistid, gistnm, desc) let gist = { "id": a:gistid, "files" : {}, "description": "","public": function('webapi#json#true') } if exists('b:gist') if has_key(b:gist, 'private') && b:gist.private | let gist["public"] = function('webapi#json#false') | endif if has_key(b:gist, 'description') | let gist["description"] = b:gist.description | endif if has_key(b:gist, 'filename') | let filename = b:gist.filename | endif else let filename = a:gistnm if len(filename) == 0 | let filename = s:GistGetFileName(a:gistid) | endif if len(filename) == 0 | let filename = s:get_current_filename(1) | endif endif let auth = s:GistGetAuthHeader() if len(auth) == 0 redraw echohl ErrorMsg | echomsg 'Canceled' | echohl None return endif " Update description " If no new description specified, keep the old description if a:desc != ' ' let gist["description"] = a:desc else let res = webapi#http#get('https://api.github.com/gists/'.a:gistid, '', { "Authorization": auth }) let status = matchstr(matchstr(res.header, '^Status:'), '^[^:]\+: \zs.*') if status =~ '^2' let old_gist = webapi#json#decode(res.content) let gist["description"] = old_gist.description endif endif let gist.files[filename] = { "content": a:content, "filename": filename } redraw | echon 'Updating gist... ' let res = webapi#http#post('https://api.github.com/gists/' . a:gistid, \ webapi#json#encode(gist), { \ "Authorization": auth, \ "Content-Type": "application/json", \}) let status = matchstr(matchstr(res.header, '^Status:'), '^[^:]\+: \zs.*') if status =~ '^2' let obj = webapi#json#decode(res.content) let loc = obj["html_url"] redraw | echomsg 'Done: '.loc let b:gist = {"id": a:gistid, "filename": filename} setlocal nomodified else let loc = '' let status = matchstr(status, '^\d\+\s*\zs.*') echohl ErrorMsg | echomsg 'Post failed: '.status | echohl None endif return loc endfunction function! s:GistDelete(gistid) let auth = s:GistGetAuthHeader() if len(auth) == 0 redraw echohl ErrorMsg | echomsg 'Canceled' | echohl None return endif redraw | echon 'Deleting gist... ' let res = webapi#http#post('https://api.github.com/gists/'.a:gistid, '', { \ "Authorization": auth, \ "Content-Type": "application/json", \}, 'DELETE') let status = matchstr(matchstr(res.header, '^Status:'), '^[^:]\+: \zs.*') if status =~ '^2' redraw | echomsg 'Done: ' if exists('b:gist') unlet b:gist endif else let status = matchstr(status, '^\d\+\s*\zs.*') echohl ErrorMsg | echomsg 'Delete failed: '.status | echohl None endif endfunction function! s:get_current_filename(no) let filename = expand('%:t') if len(filename) == 0 && &ft != '' let pair = filter(items(s:extmap), 'v:val[1] == &ft') if len(pair) > 0 let filename = printf('gistfile%d%s', a:no, pair[0][0]) endif endif if filename == '' let filename = printf('gistfile%d.txt', a:no) endif return filename endfunction " GistPost function: " Post new gist to github " " if there is an embedded gist url or gist id in your file, " it will just update it. " -- by c9s " " embedded gist url format: " " Gist: https://gist.github.com/123123 " " embedded gist id format: " " GistID: 123123 " function! s:GistPost(content, private, desc, anonymous) let gist = { "files" : {}, "description": "","public": function('webapi#json#true') } if a:desc != ' ' | let gist["description"] = a:desc | endif if a:private | let gist["public"] = function('webapi#json#false') | endif let filename = s:get_current_filename(1) let gist.files[filename] = { "content": a:content, "filename": filename } let header = {"Content-Type": "application/json"} if !a:anonymous let auth = s:GistGetAuthHeader() if len(auth) == 0 redraw echohl ErrorMsg | echomsg 'Canceled' | echohl None return endif let header["Authorization"] = auth endif redraw | echon 'Posting it to gist... ' let res = webapi#http#post('https://api.github.com/gists', webapi#json#encode(gist), header) let status = matchstr(matchstr(res.header, '^Status:'), '^[^:]\+: \zs.*') if status =~ '^2' let obj = webapi#json#decode(res.content) let loc = obj["html_url"] redraw | echomsg 'Done: '.loc let b:gist = { \ "filename": filename, \ "id": matchstr(loc, '[^/]\+$'), \ "description": gist['description'], \ "private": a:private, \} else let loc = '' let status = matchstr(status, '^\d\+\s*\zs.*') echohl ErrorMsg | echomsg 'Post failed: '.status | echohl None endif return loc endfunction function! s:GistPostBuffers(private, desc, anonymous) let bufnrs = range(1, bufnr("$")) let bn = bufnr('%') let query = [] let gist = { "files" : {}, "description": "","public": function('webapi#json#true') } if a:desc != ' ' | let gist["description"] = a:desc | endif if a:private | let gist["public"] = function('webapi#json#false') | endif let index = 1 for bufnr in bufnrs if !bufexists(bufnr) || buflisted(bufnr) == 0 continue endif echo "Creating gist content".index."... " silent! exec "buffer!" bufnr let content = join(getline(1, line('$')), "\n") let filename = s:get_current_filename(index) let gist.files[filename] = { "content": content, "filename": filename } let index = index + 1 endfor silent! exec "buffer!" bn let header = {"Content-Type": "application/json"} if !a:anonymous let auth = s:GistGetAuthHeader() if len(auth) == 0 redraw echohl ErrorMsg | echomsg 'Canceled' | echohl None return endif let header["Authorization"] = auth endif redraw | echon 'Posting it to gist... ' let res = webapi#http#post('https://api.github.com/gists', webapi#json#encode(gist), header) let status = matchstr(matchstr(res.header, '^Status:'), '^[^:]\+: \zs.*') if status =~ '^2' let obj = webapi#json#decode(res.content) let loc = obj["html_url"] redraw | echomsg 'Done: '.loc let b:gist = {"id": matchstr(loc, '[^/]\+$'), "filename": filename, "private": a:private} else let loc = '' let status = matchstr(status, '^\d\+\s*\zs.*') echohl ErrorMsg | echomsg 'Post failed: '.status | echohl None endif return loc endfunction function! gist#Gist(count, line1, line2, ...) redraw if strlen(g:github_user) == 0 echohl ErrorMsg | echomsg "You don't have github account. read ':help gist-vim-setup'." | echohl None return endif let bufname = bufname("%") " find GistID: in content , then we should just update let gistid = '' let gistls = '' let gistnm = '' let gistdesc = ' ' let private = get(g:, 'gist_post_private', 0) let multibuffer = 0 let clipboard = 0 let deletepost = 0 let editpost = 0 let anonymous = 0 let listmx = '^\%(-l\|--list\)\s*\([^\s]\+\)\?$' let bufnamemx = '^' . s:bufprefix .'\(\zs[0-9a-f]\+\ze\|\zs[0-9a-f]\+\ze[/\\].*\)$' if bufname =~ bufnamemx let gistidbuf = matchstr(bufname, bufnamemx) else let gistidbuf = matchstr(join(getline(a:line1, a:line2), "\n"), 'GistID:\s*\zs\w\+') endif let args = (a:0 > 0) ? s:shellwords(a:1) : [] for arg in args if arg =~ '^\(-h\|--help\)$\C' help :Gist return elseif arg =~ '^\(-la\|--listall\)$\C' let gistls = '-all' elseif arg =~ '^\(-ls\|--liststar\)$\C' let gistls = 'starred' elseif arg =~ '^\(-l\|--list\)$\C' if get(g:, 'gist_show_privates') let gistls = 'mine' else let gistls = g:github_user endif elseif arg =~ '^\(-m\|--multibuffer\)$\C' let multibuffer = 1 elseif arg =~ '^\(-p\|--private\)$\C' let private = 1 elseif arg =~ '^\(-P\|--public\)$\C' let private = 0 elseif arg =~ '^\(-a\|--anonymous\)$\C' let anonymous = 1 elseif arg =~ '^\(-s\|--description\)$\C' let gistdesc = '' elseif arg =~ '^\(-c\|--clipboard\)$\C' let clipboard = 1 elseif arg =~ '^\(-d\|--delete\)$\C' && gistidbuf != '' let gistid = gistidbuf let deletepost = 1 elseif arg =~ '^\(-e\|--edit\)$\C' && gistidbuf != '' let gistid = gistidbuf let editpost = 1 elseif arg =~ '^\(+1\|--star\)$\C' && gistidbuf != '' let auth = s:GistGetAuthHeader() if len(auth) == 0 echohl ErrorMsg | echomsg 'Canceled' | echohl None else let gistid = gistidbuf let res = webapi#http#post('https://api.github.com/gists/'.gistid.'/star', '', { "Authorization": auth }, 'PUT') let status = matchstr(matchstr(res.header, '^Status:'), '^[^:]\+: \zs.*') if status =~ '^2' echomsg "Stared" gistid else echohl ErrorMsg | echomsg 'Star failed' | echohl None endif endif return elseif arg =~ '^\(-1\|--unstar\)$\C' && gistidbuf != '' let auth = s:GistGetAuthHeader() if len(auth) == 0 echohl ErrorMsg | echomsg 'Canceled' | echohl None else let gistid = gistidbuf let res = webapi#http#post('https://api.github.com/gists/'.gistid.'/star', '', { "Authorization": auth }, 'DELETE') if status =~ '^2' echomsg "Unstared" gistid else echohl ErrorMsg | echomsg 'Unstar failed' | echohl None endif endif return elseif arg =~ '^\(-f\|--fork\)$\C' && gistidbuf != '' let auth = s:GistGetAuthHeader() if len(auth) == 0 echohl ErrorMsg | echomsg 'Canceled' | echohl None return else let gistid = gistidbuf let res = webapi#http#post('https://api.github.com/gists/'.gistid.'/fork', '', { "Authorization": auth }) let status = matchstr(matchstr(res.header, '^Status:'), '^[^:]\+: \zs.*') if status =~ '^2' let obj = webapi#json#decode(res.content) let gistid = obj["id"] else echohl ErrorMsg | echomsg 'Fork failed' | echohl None return endif endif elseif arg !~ '^-' && len(gistnm) == 0 if gistdesc != ' ' let gistdesc = matchstr(arg, '^\s*\zs.*\ze\s*$') elseif editpost == 1 || deletepost == 1 let gistnm = arg elseif len(gistls) > 0 && arg != '^\w\+$\C' let gistls = arg elseif arg =~ '^[0-9a-z]\+$\C' let gistid = arg else echohl ErrorMsg | echomsg 'Invalid arguments: '.arg | echohl None unlet args return 0 endif elseif len(arg) > 0 echohl ErrorMsg | echomsg 'Invalid arguments: '.arg | echohl None unlet args return 0 endif endfor unlet args "echo "gistid=".gistid "echo "gistls=".gistls "echo "gistnm=".gistnm "echo "gistdesc=".gistdesc "echo "private=".private "echo "clipboard=".clipboard "echo "editpost=".editpost "echo "deletepost=".deletepost if gistidbuf != '' && gistid == '' && editpost == 0 && deletepost == 0 let editpost = 1 let gistid = gistidbuf endif if len(gistls) > 0 call s:GistList(gistls, 1) elseif len(gistid) > 0 && editpost == 0 && deletepost == 0 call s:GistGet(gistid, clipboard) else let url = '' if multibuffer == 1 let url = s:GistPostBuffers(private, gistdesc, anonymous) else if a:count < 1 let content = join(getline(a:line1, a:line2), "\n") else let save_regcont = @" let save_regtype = getregtype('"') silent! normal! gvy let content = @" call setreg('"', save_regcont, save_regtype) endif if editpost == 1 let url = s:GistUpdate(content, gistid, gistnm, gistdesc) elseif deletepost == 1 call s:GistDelete(gistid) else let url = s:GistPost(content, private, gistdesc, anonymous) endif if a:count >= 1 && get(g:, 'gist_keep_selection', 0) == 1 silent! normal! gv endif endif if len(url) > 0 if get(g:, 'gist_open_browser_after_post', 0) == 1 call s:open_browser(url) endif let gist_put_url_to_clipboard_after_post = get(g:, 'gist_put_url_to_clipboard_after_post', 1) if gist_put_url_to_clipboard_after_post > 0 if gist_put_url_to_clipboard_after_post == 2 let url = url . "\n" endif if exists('g:gist_clip_command') call system(g:gist_clip_command, url) elseif has('unix') && !has('xterm_clipboard') let @" = url else let @+ = url endif endif endif endif return 1 endfunction function! s:GistGetAuthHeader() if get(g:, 'gist_use_password_in_gitconfig', 0) != 0 let password = substitute(system('git config --get github.password'), "\n", '', '') if password =~ '^!' | let password = system(password[1:]) | endif return printf("basic %s", webapi#base64#b64encode(g:github_user.":".password)) endif let auth = "" if filereadable(s:configfile) let str = join(readfile(s:configfile), "") if type(str) == 1 let auth = str endif endif if len(auth) > 0 return auth endif redraw echohl WarningMsg echo 'Gist.vim requires authorization to use the Github API. These settings are stored in "~/.gist-vim". If you want to revoke, do "rm ~/.gist-vim".' echohl None let password = inputsecret("Github Password for ".g:github_user.":") if len(password) > 0 let insecureSecret = printf("basic %s", webapi#base64#b64encode(g:github_user.":".password)) let res = webapi#http#post('https://api.github.com/authorizations', webapi#json#encode({ \ "scopes" : ["gist"], \ "note" : "Gist.vim on ".hostname(), \ "note_url" : "http://www.vim.org/scripts/script.php?script_id=2423" \}), { \ "Content-Type" : "application/json", \ "Authorization" : insecureSecret, \}) let authorization = webapi#json#decode(res.content) if has_key(authorization, 'token') let secret = printf("token %s", authorization.token) call writefile([secret], s:configfile) if !(has('win32') || has('win64')) call system("chmod go= ".s:configfile) endif elseif has_key(authorization, 'message') echohl WarningMsg echo authorization.message echohl None let secret = '' endif else let secret = '' endif return secret endfunction let s:extmap = { \".adb": "ada", \".ahk": "ahk", \".arc": "arc", \".as": "actionscript", \".asm": "asm", \".asp": "asp", \".aw": "php", \".b": "b", \".bat": "bat", \".befunge": "befunge", \".bmx": "bmx", \".boo": "boo", \".c-objdump": "c-objdump", \".c": "c", \".cfg": "cfg", \".cfm": "cfm", \".ck": "ck", \".cl": "cl", \".clj": "clj", \".cmake": "cmake", \".coffee": "coffee", \".cpp": "cpp", \".cppobjdump": "cppobjdump", \".cs": "csharp", \".css": "css", \".cw": "cw", \".d-objdump": "d-objdump", \".d": "d", \".darcspatch": "darcspatch", \".diff": "diff", \".duby": "duby", \".dylan": "dylan", \".e": "e", \".ebuild": "ebuild", \".eclass": "eclass", \".el": "lisp", \".erb": "erb", \".erl": "erlang", \".f90": "f90", \".factor": "factor", \".feature": "feature", \".fs": "fs", \".fy": "fy", \".go": "go", \".groovy": "groovy", \".gs": "gs", \".gsp": "gsp", \".haml": "haml", \".hs": "haskell", \".html": "html", \".hx": "hx", \".ik": "ik", \".ino": "ino", \".io": "io", \".j": "j", \".java": "java", \".js": "javascript", \".json": "json", \".jsp": "jsp", \".kid": "kid", \".lhs": "lhs", \".lisp": "lisp", \".ll": "ll", \".lua": "lua", \".ly": "ly", \".m": "objc", \".mak": "mak", \".man": "man", \".mao": "mao", \".matlab": "matlab", \".md": "markdown", \".minid": "minid", \".ml": "ml", \".moo": "moo", \".mu": "mu", \".mustache": "mustache", \".mxt": "mxt", \".myt": "myt", \".n": "n", \".nim": "nim", \".nu": "nu", \".numpy": "numpy", \".objdump": "objdump", \".ooc": "ooc", \".parrot": "parrot", \".pas": "pas", \".pasm": "pasm", \".pd": "pd", \".phtml": "phtml", \".pir": "pir", \".pl": "perl", \".po": "po", \".py": "python", \".pytb": "pytb", \".pyx": "pyx", \".r": "r", \".raw": "raw", \".rb": "ruby", \".rhtml": "rhtml", \".rkt": "rkt", \".rs": "rs", \".rst": "rst", \".s": "s", \".sass": "sass", \".sc": "sc", \".scala": "scala", \".scm": "scheme", \".scpt": "scpt", \".scss": "scss", \".self": "self", \".sh": "sh", \".sml": "sml", \".sql": "sql", \".st": "smalltalk", \".tcl": "tcl", \".tcsh": "tcsh", \".tex": "tex", \".textile": "textile", \".tpl": "smarty", \".twig": "twig", \".txt" : "text", \".v": "verilog", \".vala": "vala", \".vb": "vbnet", \".vhd": "vhdl", \".vim": "vim", \".weechatlog": "weechatlog", \".xml": "xml", \".xq": "xquery", \".xs": "xs", \".yml": "yaml", \} let &cpo = s:save_cpo unlet s:save_cpo " vim:set et: ================================================ FILE: .vim/bundle/Gist.vim/doc/gist-vim.txt ================================================ *Gist.vim* Vimscript for creating gists (http://gist.github.com) Usage |gist-vim-usage| Tips |gist-vim-tips| Requirements |gist-vim-requirements| License |gist-vim-license| Install |gist-vim-install| Setup |gist-vim-setup| This is a vimscript for creating gists (http://gist.github.com) For the latest version please see https://github.com/mattn/gist-vim. ============================================================================== USAGE *:Gist* *gist-vim-usage* - Post current buffer to gist, using default privacy option. > :Gist < - Post selected text to gist, using defualt privacy option. This applies to all permutations listed below (except multi). > :'<,'>Gist < - Create a private gist. > :Gist -p < - Create a public gist. (Only relevant if you've set gists to be private by default.) > :Gist -P < - Post whole text to gist as public. This is only relevant if you've set gists to be private by default. > :Gist -P < - Create a gist anonymously. > :Gist -a < - Create a gist with all open buffers. > :Gist -m < - Edit the gist (you need to have opened the gist buffer first). You can update the gist with the {:w} command within the gist buffer. > :Gist -e < - Edit the gist with name "foo.js" (you need to have opened the gist buffer first). > :Gist -e foo.js < - Post/Edit with the description " (you need to have opened the gist buffer first). > :Gist -s something :Gist -e -s something < - Delete the gist (you need to have opened the gist buffer first). Password authentication is needed. > :Gist -d < - Fork the gist (you need to have opened the gist buffer first). Password authentication is needed. > :Gist -f < - Star the gist (you need to have opened the gist buffer first). Password authentication is needed. > :Gist +1 < - Unstar the gist (you need to have opened the gist buffer first). Password authentication is needed. > :Gist -1 < - Get gist XXXXX. > :Gist XXXXX < - Get gist XXXXX and add to clipboard. > :Gist -c XXXXX < - List your public gists. > :Gist -l < - List gists from user "mattn". > :Gist -l mattn < - List everyone's gists. > :Gist -la < - List gists from your starred gists. > :Gist -ls < ============================================================================== TIPS *gist-vim-tips* If you set "g:gist_clip_command", gist.vim will copy the gist code with option "-c". - Mac: > let g:gist_clip_command = 'pbcopy' < - Linux: > let g:gist_clip_command = 'xclip -selection clipboard' < - Others (cygwin?): > let g:gist_clip_command = 'putclip' < If you want to detect filetype from the filename: > let g:gist_detect_filetype = 1 < If you want to open the browser after the post: > let g:gist_open_browser_after_post = 1 < If you want to change the browser: > let g:gist_browser_command = 'w3m %URL%' < or: > let g:gist_browser_command = 'opera %URL% &' < On windows, this should work with your user settings. If you want to show your private gists with ":Gist -l": > let g:gist_show_privates = 1 < If you want to edit all files for gists containing more than one: > let g:gist_get_multiplefile = 1 < If you want to update a gist, embed > GistID: xxxxx > in your local file, then call > :Gist > ============================================================================== REQUIREMENTS *gist-vim-requirements* - curl command (http://curl.haxx.se/) - webapi-vim (https://github.com/mattn/webapi-vim) - and, if you want to use your git profile, the git command-line client. ============================================================================== LICENSE *gist-vim-license* Copyright 2010 by Yasuhiro Matsumoto modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. 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 REGENTS 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. ============================================================================== INSTALL *gist-vim-install* Copy gist.vim to your plugin directory. gist.vim will create a curl cookie-jar file in your runtimepath. rtp: - plugin/gist.vim - cookies/github If you want to uninstall gist.vim, remember to also remove "cookies/github". ============================================================================== SETUP *gist-vim-setup* This plugin uses github API v3. Setting value is stored in `~/.gist.vim`. gist-vim have two ways to access APIs. First, you need to set your Github username in global git config: > $ git config --global github.user Username < Then, gist.vim will ask for your password to create an authorization when you first use it. The password is not stored and only the OAuth access token will be kept for later use. You can revoke the token at any time from the list of "Authorized applications" on Github's "Account Settings" page. (https://github.com/settings/applications) If you happen to have your password already written in ~/.gitconfig like below: > [github] password = xxxxx < Then, add following into your ~/.vimrc > let g:gist_use_password_in_gitconfig = 1 < This is not secure at all, so strongly discouraged. ============================================================================== THANKS *gist-vim-thanks* AD7six Bruno Bigras c9s Daniel Bretoi Jeremy Michael Cantrell Kien N kongo2002 MATSUU Takuto Matthew Weier O'Phinney ornicar Roland Schilter steve tyru Will Gray netj vim:tw=78:ts=8:ft=help:norl: ================================================ FILE: .vim/bundle/Gist.vim/plugin/gist.vim ================================================ "============================================================================= " File: gist.vim " Author: Yasuhiro Matsumoto " WebPage: http://github.com/mattn/gist-vim " License: BSD " GetLatestVimScripts: 2423 1 :AutoInstall: gist.vim " script type: plugin if &cp || (exists('g:loaded_gist_vim') && g:loaded_gist_vim) finish endif let g:loaded_gist_vim = 1 if !exists('g:github_user') && !executable('git') echohl ErrorMsg | echomsg "Gist: require 'git' command" | echohl None finish endif if !executable('curl') echohl ErrorMsg | echomsg "Gist: require 'curl' command" | echohl None finish endif command! -nargs=? -range=% Gist :call gist#Gist(, , , ) " vim:set et: ================================================ FILE: .vim/bundle/Tabmerge/README ================================================ This is a mirror of http://www.vim.org/scripts/script.php?script_id=1961 Usage: :Tabmerge [tab number] [top|bottom|left|right] The tab number can be "$" for the last tab. If the tab number isn't specified the tab to the right of the current tab is merged. If there is no right tab, the left tab is merged. The location specifies where in the current tab to merge the windows. Defaults to "top". ================================================ FILE: .vim/bundle/Tabmerge/plugin/Tabmerge.vim ================================================ " Tabmerge -- Merge the windows in a tab with the current tab. " " Copyright July 17, 2007 Christian J. Robinson " " Distributed under the terms of the Vim license. See ":help license". " Usage: " " :Tabmerge [tab number] [top|bottom|left|right] " " The tab number can be "$" for the last tab. If the tab number isn't " specified the tab to the right of the current tab is merged. If there " is no right tab, the left tab is merged. " " The location specifies where in the current tab to merge the windows. " Defaults to "top". " " Limitations: " " Vertical windows are merged as horizontal splits. Doing otherwise would be " nearly impossible. if v:version < 700 echoerr "Tabmerge.vim requires at least Vim version 7" finish endif command! -nargs=* Tabmerge call Tabmerge() function! Tabmerge(...) " {{{1 if a:0 > 2 echohl ErrorMsg echo "Too many arguments" echohl None return elseif a:0 == 2 let tabnr = a:1 let where = a:2 elseif a:0 == 1 if a:1 =~ '^\d\+$' || a:1 == '$' let tabnr = a:1 else let where = a:1 endif endif if !exists('l:where') let where = 'top' endif if !exists('l:tabnr') if type(tabpagebuflist(tabpagenr() + 1)) == 3 let tabnr = tabpagenr() + 1 elseif type(tabpagebuflist(tabpagenr() - 1)) == 3 let tabnr = tabpagenr() - 1 else echohl ErrorMsg echo "Already only one tab" echohl None return endif endif if tabnr == '$' let tabnr = tabpagenr(tabnr) else let tabnr = tabnr endif let tabwindows = tabpagebuflist(tabnr) if type(tabwindows) == 0 && tabwindows == 0 echohl ErrorMsg echo "No such tab number: " . tabnr echohl None return elseif tabnr == tabpagenr() echohl ErrorMsg echo "Can't merge with the current tab" echohl None return endif if where =~? '^t\(op\)\?$' let where = 'topleft' elseif where =~? '^b\(ot\(tom\)\?\)\?$' let where = 'botright' elseif where =~? '^l\(eft\)\?$' let where = 'leftabove vertical' elseif where =~? '^r\(ight\)\?$' let where = 'rightbelow vertical' else echohl ErrorMsg echo "Invalid location: " . a:2 echohl None return endif let save_switchbuf = &switchbuf let &switchbuf = '' if where == 'top' let tabwindows = reverse(tabwindows) endif for buf in tabwindows exe where . ' sbuffer ' . buf endfor exe 'tabclose ' . tabnr let &switchbuf = save_switchbuf endfunction " vim:fdm=marker:fdc=2:fdl=1: ================================================ FILE: .vim/bundle/ZoomWin/autoload/ZoomWin.vim ================================================ " ZoomWin: Brief-like ability to zoom into/out-of a window " Author: Charles Campbell " original version by Ron Aaron " Date: Mar 09, 2014 " Version: 25n ASTRO-ONLY " History: see :help zoomwin-history {{{1 " GetLatestVimScripts: 508 1 :AutoInstall: ZoomWin.vim " --------------------------------------------------------------------- " Load Once: {{{1 if &cp || exists("g:loaded_ZoomWin") finish endif if v:version < 702 echohl WarningMsg echo "***warning*** this version of ZoomWin needs vim 7.2" echohl Normal finish endif let s:keepcpo = &cpo let g:loaded_ZoomWin = "v25n" if !exists("g:zoomwin_localoptlist") let s:localoptlist = ["ai","ar","bh","bin","bl","bomb","bt","cfu","ci","cin","cink","cino","cinw","cms","com","cpt","diff","efm","eol","ep","et","fenc","fex","ff","flp","fo","ft","gp","imi","ims","inde","inex","indk","inf","isk","key","kmp","lisp","mps","ml","ma","mod","nf","ofu","oft","pi","qe","ro","sw","sn","si","sts","spc","spf","spl","sua","swf","smc","syn","ts","tx","tw","udf","wfh","wfw","wm"] else let s:localoptlist = g:zoomwin_localoptlist endif set cpo&vim "DechoTabOn " ===================================================================== " Functions: {{{1 " --------------------------------------------------------------------- " ZoomWin#ZoomWin: toggles between a single-window and a multi-window layout {{{2 " The original version was by Ron Aaron. fun! ZoomWin#ZoomWin() " let g:decho_hide= 1 "Decho let lzkeep = &lz set lz " call Dfunc("ZoomWin#ZoomWin() winbufnr(2)=".winbufnr(2)) " if the vim doesn't have +mksession, only a partial zoom is available {{{3 if !has("mksession") if !exists("s:partialzoom") echomsg "missing the +mksession feature; only a partial zoom is available" let s:partialzoom= 0 endif if v:version < 630 echoerr "***sorry*** you need an updated vim, preferably with +mksession" elseif s:partialzoom " partial zoom out let s:partialzoom= 0 exe s:winrestore else " partial zoom in let s:partialzoom= 1 let s:winrestore = winrestcmd() res endif let &lz = lzkeep " call Dret("ZoomWin#ZoomWin : partialzoom=".s:partialzoom) return endif " Close certain windows and save user settings {{{3 call s:ZoomWinPreserve(0) call s:SaveUserSettings() if winbufnr(2) == -1 " there's only one window - restore to multiple-windows mode (zoom out) {{{3 " call Decho("there's only one window - restore to multiple windows") if exists("s:sessionfile") && filereadable(s:sessionfile) " save position in current one-window-only " call Decho("save position in current one-window-only in sponly (s:sessionfile<".s:sessionfile.">)") let sponly = s:SavePosn(0) let s:origline = line(".") let s:origcol = virtcol(".") let s:swv = deepcopy(getwinvar(winnr(),""),1) sil! unlet key value for [key,value] in items(s:swv) exe "sil! unlet w:".key sil! unlet key value endfor " source session file to restore window layout let ei_keep = &ei set ei=all noswf bh=hide exe 'sil! so '.fnameescape(s:sessionfile) let v:this_session= s:sesskeep let winrestore = winrestcmd() " restore any and all window variables call s:RestoreWinVars() if exists("s:savedposn1") " restore windows' positioning and buffers " call Decho("restore windows, positions, buffers") noautocmd windo call s:RestorePosn(s:savedposn{winnr()})|unlet s:savedposn{winnr()} call s:GotoWinNum(s:winkeep) execute winrestore unlet s:winkeep endif if exists("s:swv") " restore window variables which possibly were modified while in one-window mode for [key,value] in items(s:swv) sil! call setwinvar(winnr(),key,value) sil! unlet key value endfor endif if line(".") != s:origline || virtcol(".") != s:origcol " If the cursor hasn't moved from the original position, " then let the position remain what it was in the original " multi-window layout. " call Decho("restore position using sponly") call s:RestorePosn(sponly) endif " delete session file and variable holding its name " call Decho("delete session file<".s:sessionfile.">") " call delete(s:sessionfile) unlet s:sessionfile let &ei = ei_keep endif " I don't know why -- but netrw-generated windows end up as [Scratch] even though the bufname is correct. " Following code fixes this. Without the if..[Scratch] test, though, when one attempts to write a file " one gets an E13. Thus, only [Scratch] windows will be affected by this windo command. let curwin= winnr() let winrestore = winrestcmd() noautocmd windo if bufname(winbufnr(winnr())) == '[Scratch]'|exe "sil! file ".fnameescape(bufname(winbufnr(winnr())))|endif exe curwin."wincmd w" " Restore local window settings call s:RestoreWinSettings() execute winrestore " zoomwinstate used by g:ZoomWin_funcref() let zoomwinstate= 0 else " there's more than one window - go to only-one-window mode (zoom in){{{3 " call Decho("there's multiple windows - goto one-window-only") let s:winkeep = winnr() let s:sesskeep = v:this_session " doesn't work with the command line window (normal mode q:) if &bt == "nofile" && expand("%") == (v:version < 702 ? 'command-line' : '[Command Line]') echoerr "***error*** ZoomWin#ZoomWin doesn't work with the ".expand("%")." window" let &lz= lzkeep " call Dret("ZoomWin#ZoomWin : ".expand('%')." window error") return endif " disable all events (autocmds) " call Decho("disable events") let ei_keep= &ei set ei=all let winrestore = winrestcmd() " Save local window settings call s:SaveWinSettings() " save all window variables call s:SaveWinVars() " save window positioning commands " call Decho("save window positioning commands") noautocmd windo let s:savedposn{winnr()}= s:SavePosn(1) call s:GotoWinNum(s:winkeep) execute winrestore " set up name of session file let s:sessionfile= tempname() " call Decho("s:sessionfile<".s:sessionfile.">") " save session " call Decho("save session") let ssop_keep = &ssop let &ssop = 'blank,help,winsize,folds,globals,localoptions,options' exe 'mksession! '.fnameescape(s:sessionfile) let keepyy= @@ let keepy0= @0 let keepy1= @1 let keepy2= @2 let keepy3= @3 let keepy4= @4 let keepy5= @5 let keepy6= @6 let keepy7= @7 let keepy8= @8 let keepy9= @9 set lz ei=all bh= if v:version >= 700 let curwin = winnr() try exe "keepalt keepmarks new! ".fnameescape(s:sessionfile) catch /^Vim\%((\a\+)\)\=:E/ let seswin = -1 windo if winheight(winnr()) > 1 | let seswin= winnr() | endif if seswin < 0 echoerr "Too many windows (not enough room)" sil! call delete(s:sessionfile) unlet s:sessionfile let &lz= lzkeep " call Dret("ZoomWin#ZoomWin : too many windows") return endif exe seswin."wincmd w" exe "keepalt keepmarks new! ".fnameescape(s:sessionfile) endtry " modify the session (so that it merely restores window layout) sil! keepjumps keepmarks v/wincmd\|split\|resize/d " save modified session " wipe out session window and buffer " restore cursor to the window that was current before editing the session file keepalt w! keepalt bw! exe curwin."wincmd w" else exe "new! ".fnameescape(s:sessionfile) v/wincmd\|split\|resize/d w! bw! endif let @@= keepyy let @0= keepy0 let @1= keepy1 let @2= keepy2 let @3= keepy3 let @4= keepy4 let @5= keepy5 let @6= keepy6 let @7= keepy7 let @8= keepy8 let @9= keepy9 call histdel('search', -1) let @/ = histget('search', -1) " restore user's session options and restore event handling " call Decho("restore user session options and event handling") set nolz let &ssop = ssop_keep let curwin= winnr() sil! only! let &ei = ei_keep echomsg expand("%") call s:RestoreOneWinSettings(curwin) " zoomwinstate used by g:ZoomWin_funcref() let zoomwinstate= 1 endif " restore user option settings {{{3 call s:RestoreUserSettings() " Re-open certain windows {{{3 call s:ZoomWinPreserve(1) " call user's optional funcref (callback) functions if exists("g:ZoomWin_funcref") if type(g:ZoomWin_funcref) == 2 call g:ZoomWin_funcref(zoomwinstate) elseif type(g:ZoomWin_funcref) == 3 for Fncref in g:ZoomWin_funcref if type(Fncref) == 2 call Fncref(zoomwinstate) endif endfor endif endif let &lz= lzkeep " call Dret("ZoomWin#ZoomWin") endfun " --------------------------------------------------------------------- " SavePosn: this function sets up a savedposn variable that {{{2 " has the commands necessary to restore the view " of the current window. fun! s:SavePosn(savewinhoriz) " call Dfunc("SavePosn(savewinhoriz=".a:savewinhoriz.") file<".expand("%").">") let swline = line(".") if swline == 1 && getline(1) == "" " empty buffer let savedposn= "silent b ".winbufnr(0) " call Dret("SavePosn savedposn<".savedposn.">") return savedposn endif let swcol = col(".") if swcol >= col("$") let swcol= swcol + virtcol(".") - virtcol("$") " adjust for virtual edit (cursor past end-of-line) endif let swwline = winline()-1 let swwcol = virtcol(".") - wincol() " call Decho("swline #".swline) " call Decho("swcol #".swcol) " call Decho("swwline#".swwline) " call Decho("swwcol #".swwcol) let savedposn = "sil! b ".winbufnr(0) let savedposn = savedposn."|".swline let savedposn = savedposn."|sil! norm! 0z\" if swwline > 0 let savedposn= savedposn.":sil! norm! ".swwline."\\" endif if a:savewinhoriz if swwcol > 0 let savedposn= savedposn.":sil! norm! 0".swwcol."zl\" endif let savedposn= savedposn.":sil! call cursor(".swline.",".swcol.")\" " handle certain special settings for the multi-window savedposn call " bufhidden buftype buflisted let settings= "" if &bh != "" " call Decho("special handling: changing buf#".bufnr("%")."'s bh=".&bh." to hide") let settings="bh=".&bh setl bh=hide endif if !&bl " call Decho("special handling: changing buf#".bufnr("%")."'s bl=".&bl." to bl") let settings= settings." nobl" setl bl endif if &bt != "" " call Decho("special handling: changing buf#".bufnr("%")."'s bt=".&bt.' to ""') let settings= settings." bt=".&bt setl bt= endif if settings != "" let savedposn= savedposn.":setl ".settings."\" endif else let savedposn= savedposn.":sil! call cursor(".swline.",".swcol.")\" endif " call Dret("SavePosn savedposn<".savedposn."> : buf#".bufnr("%")." bh=".&bh." bl=".&bl." bt=".&bt) return savedposn endfun " --------------------------------------------------------------------- " s:RestorePosn: this function restores noname and scratch windows {{{2 fun! s:RestorePosn(savedposn) " call Dfunc("RestorePosn(savedposn<".a:savedposn.">) win#".winnr()." scb=".&scb) if &scb setl noscb " try " Decho exe a:savedposn " catch /^Vim\%((\a\+)\)\=:E/ " Decho " call Decho("error occurred") " Decho " endtry " Decho setl scb else " try " Decho exe a:savedposn " catch /^Vim\%((\a\+)\)\=:E/ " Decho " call Decho("error occurred") " Decho " endtry " Decho endif " call Dret("RestorePosn") endfun " --------------------------------------------------------------------- " CleanupSessionFile: if you exit Vim before cleaning up the {{{2 " supposed-to-be temporary session file fun! ZoomWin#CleanupSessionFile() " call Dfunc("ZoomWin#CleanupSessionFile()") if exists("s:sessionfile") && filereadable(s:sessionfile) " call Decho("sessionfile exists and is readable; deleting it") sil! call delete(s:sessionfile) unlet s:sessionfile endif " call Dret("ZoomWin#CleanupSessionFile") endfun " --------------------------------------------------------------------- " GotoWinNum: this function puts cursor into specified window {{{2 fun! s:GotoWinNum(winnum) " call Dfunc("GotoWinNum(winnum=".a:winnum.") winnr=".winnr()) if a:winnum != winnr() exe a:winnum."wincmd w" endif " call Dret("GotoWinNum") endfun " --------------------------------------------------------------------- " ZoomWinPreserve: This function, largely written by David Fishburn, {{{2 " allows ZoomWin to "preserve" certain windows: " " TagList, by Yegappan Lakshmanan " http://vim.sourceforge.net/scripts/script.php?script_id=273 " " WinManager, by Srinath Avadhanula " http://vim.sourceforge.net/scripts/script.php?script_id=95 " " It does so by closing the associated window upon entry to ZoomWin " and re-opening it upon exit by using commands provided by the " utilities themselves. fun! s:ZoomWinPreserve(open) " call Dfunc("ZoomWinPreserve(open=".a:open.")") if a:open == 0 " Close Taglist if exists('g:zoomwin_preserve_taglist') && exists('g:loaded_taglist') " If taglist window is open then close it. let s:taglist_winnum = bufwinnr(g:TagList_title) if s:taglist_winnum != -1 " Close the window exec "sil! Tlist" endif endif " Close Winmanager if exists('g:zoomwin_preserve_winmanager') && exists('g:loaded_winmanager') " If the winmanager window is open then close it. let s:is_winmgr_vis = IsWinManagerVisible() if s:is_winmgr_vis == 1 exec "WMClose" endif endif else " Re-open Taglist if exists('g:zoomwin_preserve_taglist') && exists('g:loaded_taglist') " If taglist window was open, open it again if s:taglist_winnum != -1 exec "sil! Tlist" endif endif " Re-Open Winmanager if exists('g:zoomwin_preserve_winmanager') && exists('g:loaded_winmanager') " If the winmanager window is open then close it. if s:is_winmgr_vis == 1 exec "WManager" endif endif endif " call Dret("ZoomWinPreserve") endfun " --------------------------------------------------------------------- " s:SaveWinVars: saves a copy of all window-variables into the script variable s:swv_#, {{{2 " where # is the current window number, for all windows. fun! s:SaveWinVars() " call Dfunc("s:SaveWinVars()") noautocmd windo let s:swv_{winnr()}= deepcopy(getwinvar(winnr(),""),1)|let s:swvmatches_{winnr()}= getmatches() " call Dret("s:SaveWinVars") endfun " --------------------------------------------------------------------- " s:RestoreWinVars: restores window variables for all windows {{{2 fun! s:RestoreWinVars() " call Dfunc("s:RestoreWinVars()") " windo call Decho(string(s:swv_{winnr()})) noautocmd windo if exists("s:swv_{winnr()}") |sil! unlet s:key s:value |for [s:key,s:value] in items(s:swv_{winnr()})|call setwinvar(winnr(),s:key,s:value)|exe "sil! unlet s:key s:value"|endfor|call setmatches(s:swvmatches_{winnr()})|unlet s:swvmatches_{winnr()}|unlet s:swv_{winnr()}|endif " call Dret("s:RestoreWinVars") endfun " --------------------------------------------------------------------- " s:SaveUserSettings: save user options, set to zoomwin-safe options. {{{2 " Force window minimum height/width to be >= 1 fun! s:SaveUserSettings() " call Dfunc("s:SaveUserSettings()") let s:keep_hidden = &hidden let s:keep_shm = &shm let s:keep_siso = &siso let s:keep_so = &so let s:keep_ss = &ss let s:keep_wfh = &wfh let s:keep_write = &write if has("clipboard") " call Decho("@* save before: s:keep_star=".@*) let s:keep_star = @* " call Decho("@* save after : s:keep_star=".@*) endif let s:keep_swf = &swf if v:version < 603 if &wmh == 0 || &wmw == 0 let s:keep_wmh = &wmh let s:keep_wmw = &wmw sil! set wmh=1 wmw=1 endif endif set hidden write nowfh so=0 siso=0 ss=0 shm+=A " call Dret("s:SaveUserSettings") endfun " --------------------------------------------------------------------- " s:RestoreUserSettings: restore user option settings {{{2 fun! s:RestoreUserSettings() " call Dfunc("s:RestoreUserSettings()") " call Decho("restore user option settings") let &hidden= s:keep_hidden let &shm = s:keep_shm let &siso = s:keep_siso let &so = s:keep_so let &ss = s:keep_ss let &wfh = s:keep_wfh let &write = s:keep_write if has("clipboard") && exists("s:keep_star") " call Decho( "@* restore before: s:keep_star=".@*) let @* = s:keep_star " call Decho("@* restore after : s:keep_star=".@*) endif let &swf = s:keep_swf if v:version < 603 if exists("s:keep_wmw") let &wmh= s:keep_wmh let &wmw= s:keep_wmw endif endif " call Dret("s:RestoreUserSettings") endfun " --------------------------------------------------------------------- " s:SaveWinSettings: saves all windows' local settings {{{2 fun! s:SaveWinSettings() " call Dfunc("s:SaveWinSettings() curwin#".winnr()) if exists("s:localoptlist") && !empty(s:localoptlist) let curwin= winnr() for localopt in s:localoptlist noautocmd windo exe "let s:swv_".localopt."_{winnr()}= &".localopt endfor exe "noautocmd ".curwin."wincmd w" endif " call Dret("s:SaveWinSettings : &bt=".&bt." s:swv_bt_".curwin."=".s:swv_bt_{curwin}) endfun " --------------------------------------------------------------------- " s:RestoreWinSettings: restores all windows' local settings {{{2 fun! s:RestoreWinSettings() " call Dfunc("s:RestoreWinSettings() bh=".&bh." bt=".&bt." bl=".&bl) if exists("s:localoptlist") && !empty(s:localoptlist) let curwin= winnr() for localopt in s:localoptlist exe 'noautocmd windo if exists("s:swv_'.localopt.'_{winnr()}")|if &'.localopt.'!=# s:swv_'.localopt.'_{winnr()}|let &'.localopt.'= s:swv_'.localopt.'_{winnr()}|endif|unlet s:swv_'.localopt.'_{winnr()}|endif' endfor exe "noautocmd ".curwin."wincmd w" endif " call Dret("s:RestoreWinSettings : bh=".&bh." bt=".&bt." bl=".&bl) endfun " --------------------------------------------------------------------- " s:RestoreOneWinSettings: assumes that s:SaveWinSettings() was called previously; this function restores the specified window's local settings {{{2 fun! s:RestoreOneWinSettings(wnum) " call Dfunc("s:RestoreOneWinSettings(wnum=".a:wnum.") s:swv_bt_".a:wnum."=".s:swv_bt_{a:wnum}." bh=".&bh." bt=".&bt." bl=".&bl) if exists("s:localoptlist") && !empty(s:localoptlist) for localopt in s:localoptlist " call Decho('windo if exists("s:swv_'.localopt.'_{a:wnum}")|let &'.localopt.'= s:swv_'.localopt.'_{a:wnum}|unlet s:swv_'.localopt.'_{a:wnum}|endif') exe 'noautocmd windo if exists("s:swv_'.localopt.'_{a:wnum}")|if &'.localopt.'!=# s:swv_'.localopt.'_{a:wnum}|let &'.localopt.'= s:swv_'.localopt.'_{a:wnum}|endif|unlet s:swv_'.localopt.'_{a:wnum}|endif' endfor endif " call Dret("s:RestoreOneWinSettings : bh=".&bh." bt=".&bt." bl=".&bl) endfun " ===================================================================== " Restore: {{{1 let &cpo= s:keepcpo unlet s:keepcpo " --------------------------------------------------------------------- " Modelines: {{{1 " vim: ts=4 fdm=marker ================================================ FILE: .vim/bundle/ZoomWin/doc/ZoomWin.txt ================================================ *ZoomWin.txt* Zoom into/out-of a window Mar 09, 2014 Authors: Charles E. Campbell *zoomwin* Ron Aaron Copyright: (c) 2004-2014 by Charles E. Campbell *zoomwin-copyright* The VIM LICENSE applies to ZoomWin.vim and ZoomWin.txt (see |copyright|) except use "ZoomWin" instead of "Vim" No warranty, express or implied. Use At-Your-Own-Risk. ============================================================================== 1. Usage *zoomwin-usage* :call ZoomWin() :ZoomWin o Either of the two commands or the normal mode o will toggle between * selecting the current window for display as the only window or * restoring the original multiple-window view. ============================================================================== 2. Setup *zoomwin-setup* ZoomWin comes as a vimball; to install it, simply > vim ZoomWin.vba.gz :so % :q < Your .vimrc needs to have, at least: > set nocp filetype plugin on < (see |'nocp'|, |:filetype|, and |filetype-plugin-on| for an explanation of these commands) ============================================================================== 3. Options *zoomwin-options* *g:ZoomWin_funcref* : this variable is used as a function reference (|Funcref|) or as a |List| of function references. It is called with a single argument: > 0 : multi-window display; not zoomed in 1 : single-window display; zoomed in < What this does is permits ZoomWin users to have a function called whenever ZoomWin changes state. As an example, consider having the status line indicate whether one is ZoomWin'd in or not: > set stl=Normal fun! ZWStatline(state) if a:state set stl=ZoomWin else set stl=Normal endif endfun if !exists("g:ZoomWin_funcref") let g:ZoomWin_funcref= function("ZWStatline") endif < The function, ZWStatline(), is called by ZoomWin() every time it changes state. *g:zoomwin_localoptlist* specify a set of windows options to be saved and restored during zoom-in and zoom-out. It may be empty. Default: > let s:localoptlist = [ \ "ai" , "ar" , "bh" , "bin", "bl" , \ "bomb", "bt" , "cfu" , "ci" , "cin" , \ "cink", "cino", "cinw", "cms", "com" , \ "cpt" , "efm" , "eol" , "ep" , "et" , \ "fenc", "fex" , "ff" , "flp", "fo" , \ "ft" , "gp" , "imi" , "ims", "inde", \ "inex", "indk", "inf" , "isk", "key" , \ "kmp" , "lisp", "mps" , "ml" , "ma" , \ "mod" , "nf" , "ofu" , "oft", "pi" , \ "qe" , "ro" , "sw" , "sn" , "si" , \ "sts" , "spc" , "spf" , "spl", "sua" , \ "swf" , "smc" , "syn" , "ts" , "tx" , \ "tw" , "udf" , "wm"] < *g:zoomwin_preserve_taglist* open and close a taglist window on zooms *g:zoomwin_preserve_winmanager* open and close winmanager a window on zooms ============================================================================== 4. History *zoomwin-history* v25 Jul 30, 2012 : (Paul, google01239) ZoomWin wasn't saving the local value of |'diff'|. It has now been included in the s:localoptlist (options which are local). * (Adam George) when clipboard=unnamed, ZoomWin was overwriting the @* register. Fixed. Oct 16, 2012 * (Marcin Szamotulski) reported that vim -o x y, then zooming in and zooming back out resulted in |:swapname| showing "No swap file". Fixed. Oct 31, 2012 * (Adam George) reported that |E13| errors occurred * when one zoomed in, zoomed out, and then * attempted to write. Fixed (due to [Scratch] * file renaming) Jan 14, 2013 * (Jorge Rodrigues) reported on errors in RestoreUserSettings() associated with saving and restoring the |'scrolloff'| setting. ZoomWin now protects against that by testing if the current vim supports |xterm-clipboard|. Mar 13, 2013 * (Ingo Karkat) provided patches for three problems: 1) setting some options (like |'keymap'|) has side effects; only restore an option if its changed 2) |:windo| has side effect of changing the height of every visited window from 0 to 1 3) matches are saved and restored (see |getmatches()| and |setmatches()|) * buffers with bh=wipe were being wiped out during zoom in and out. Fixed (cec) Jul 15, 2013 * (Ingo Karkat) ZoomWin now works with |i_CTRL-O|, removes an |E481| when a count is used with ZoomWin, and removed a superfluous ', '', 'g') let res = '' let max = 0 let mx = '\(]\{-}>\)\|\(<\/td>\)\|\(]\{-}>\)\|\(<\/div>\)' let m = split(buf, mx) for str in m let c = split(str, '<[^>]*?>') let str = substitute(str, '<[^>]\{-}>', ' ', 'g') let str = substitute(str, '>', '>', 'g') let str = substitute(str, '<', '<', 'g') let str = substitute(str, '"', '"', 'g') let str = substitute(str, ''', "'", 'g') let str = substitute(str, ' ', ' ', 'g') let str = substitute(str, '¥', '\¥', 'g') let str = substitute(str, '&', '\&', 'g') let str = substitute(str, '^\s*\(.*\)\s*$', '\1', '') let str = substitute(str, '\s\+', ' ', 'g') let l = len(str) if l > threshold_len let per = (l+0.0) / len(c) if max < l && per > threshold_per let max = l let res = str endif endif endfor let res = substitute(res, '^\s*\(.*\)\s*$', '\1', 'g') return res endfunction function! emmet#util#getImageSize(fn) let fn = a:fn if emmet#util#isImageMagickInstalled() return emmet#util#imageSizeWithImageMagick(fn) endif if filereadable(fn) let hex = substitute(system('xxd -p "'.fn.'"'), '\n', '', 'g') else if fn !~ '^\w\+://' let path = fnamemodify(expand('%'), ':p:gs?\\?/?') if has('win32') || has('win64') | let path = tolower(path) endif for k in keys(g:emmet_docroot) let root = fnamemodify(k, ':p:gs?\\?/?') if has('win32') || has('win64') | let root = tolower(root) endif if stridx(path, root) == 0 let v = g:emmet_docroot[k] let fn = (len(v) == 0 ? k : v) . fn break endif endfor endif let hex = substitute(system(g:emmet_curl_command.' "'.fn.'" | xxd -p'), '\n', '', 'g') endif let [width, height] = [-1, -1] if hex =~ '^89504e470d0a1a0a' let width = eval('0x'.hex[32:39]) let height = eval('0x'.hex[40:47]) endif if hex =~ '^ffd8' let pos = 4 while pos < len(hex) let bs = hex[pos+0:pos+3] let pos += 4 if bs == 'ffc0' || bs == 'ffc2' let pos += 6 let height = eval('0x'.hex[pos+0:pos+1])*256 + eval('0x'.hex[pos+2:pos+3]) let pos += 4 let width = eval('0x'.hex[pos+0:pos+1])*256 + eval('0x'.hex[pos+2:pos+3]) break elseif bs =~ 'ffd[9a]' break elseif bs =~ 'ff\(e[0-9a-e]\|fe\|db\|dd\|c4\)' let pos += (eval('0x'.hex[pos+0:pos+1])*256 + eval('0x'.hex[pos+2:pos+3])) * 2 endif endwhile endif if hex =~ '^47494638' let width = eval('0x'.hex[14:15].hex[12:13]) let height = eval('0x'.hex[18:19].hex[16:17]) endif return [width, height] endfunction function! emmet#util#imageSizeWithImageMagick(fn) let fn = a:fn let img_info = system('identify -format "%wx%h" "'.a:fn.'"') let img_size = split(substitute(img_info, '\n', '', ''), 'x') if len(img_size) != 2 return [-1, -1] endif return img_size endfunction function! emmet#util#isImageMagickInstalled() if !get(s:, 'emmet_use_identify', 1) return 0 endif return executable('identify') endfunction function! emmet#util#unique(arr) let m = {} let r = [] for i in a:arr if !has_key(m, i) let m[i] = 1 call add(r, i) endif endfor return r endfunction let s:seed = localtime() function! emmet#util#srand(seed) let s:seed = a:seed endfunction function! emmet#util#rand() let s:seed = s:seed * 214013 + 2531011 return (s:seed < 0 ? s:seed - 0x80000000 : s:seed) / 0x10000 % 0x8000 endfunction function! emmet#util#cache(name, ...) let content = get(a:000, 0, "") let dir = expand("~/.emmet/cache") if !isdirectory(dir) call mkdir(dir, "p", 0700) endif let file = dir . "/" . substitute(a:name, '\W', '_', 'g') if len(content) == 0 if !filereadable(file) return "" endif return join(readfile(file), "\n") endif call writefile(split(content, "\n"), file) endfunction function! emmet#util#getcurpos() let pos = getpos('.') if mode(0) == 'i' && pos[2] > 0 let pos[2] -=1 endif return pos endfunction function! emmet#util#closePopup() return pumvisible() ? "\" : "" endfunction ================================================ FILE: .vim/bundle/emmet-vim/autoload/emmet.vim ================================================ "============================================================================= " emmet.vim " Author: Yasuhiro Matsumoto " Last Change: 06-Dec-2013. let s:save_cpo = &cpo set cpo&vim let s:filtermx = '|\(\%(bem\|html\|haml\|slim\|e\|c\|fc\|xsl\|t\|\/[^ ]\+\)\s*,\{0,1}\s*\)*$' function! emmet#getExpandos(type, key) let expandos = emmet#getResource(a:type, 'expandos', {}) if has_key(expandos, a:key) return expandos[a:key] endif return a:key endfunction function! emmet#splitFilterArg(filters) for f in a:filters if f =~ '^/' return f[1:] endif endfor return '' endfunction function! emmet#useFilter(filters, filter) for f in a:filters if a:filter == '/' && f =~ '^/' return 1 elseif f == a:filter return 1 endif endfor return 0 endfunction function! emmet#getIndentation(...) if a:0 > 0 let type = a:1 else let type = emmet#getFileType() endif if has_key(s:emmet_settings, type) && has_key(s:emmet_settings[type], 'indentation') let indent = s:emmet_settings[type].indentation elseif has_key(s:emmet_settings, 'indentation') let indent = s:emmet_settings.indentation else let indent = (&l:expandtab || &l:tabstop != &l:shiftwidth) ? repeat(' ', &l:shiftwidth) : "\t" endif return indent endfunction function! emmet#getBaseType(type) if !has_key(s:emmet_settings, a:type) return '' endif if !has_key(s:emmet_settings[a:type], 'extends') return a:type endif let extends = s:emmet_settings[a:type].extends if type(extends) == 1 let tmp = split(extends, '\s*,\s*') let ext = tmp[0] else let ext = extends[0] endif if a:type != ext return emmet#getBaseType(ext) endif return '' endfunction function! emmet#isExtends(type, extend) if a:type == a:extend return 1 endif if !has_key(s:emmet_settings, a:type) return 0 endif if !has_key(s:emmet_settings[a:type], 'extends') return 0 endif let extends = s:emmet_settings[a:type].extends if type(extends) == 1 let tmp = split(extends, '\s*,\s*') unlet! extends let extends = tmp endif for ext in extends if a:extend == ext return 1 endif endfor return 0 endfunction function! emmet#parseIntoTree(abbr, type) let abbr = a:abbr let type = a:type let rtype = emmet#lang#exists(type) ? type : 'html' return emmet#lang#{rtype}#parseIntoTree(abbr, type) endfunction function! emmet#expandAbbrIntelligent(feedkey) if !emmet#isExpandable() return a:feedkey endif return "\(EmmetExpandAbbr)" endfunction function! emmet#isExpandable() let line = getline('.') if col('.') < len(line) let line = matchstr(line, '^\(.*\%'.col('.').'c\)') endif let part = matchstr(line, '\(\S.*\)$') let type = emmet#getFileType() let ftype = emmet#lang#exists(type) ? type : 'html' let part = emmet#lang#{ftype}#findTokens(part) return len(part) > 0 endfunction function! emmet#mergeConfig(lhs, rhs) if type(a:lhs) == 3 && type(a:rhs) == 3 let a:lhs += a:rhs if len(a:lhs) call remove(a:lhs, 0, len(a:lhs)-1) endif for rhi in a:rhs call add(a:lhs, a:rhs[rhi]) endfor elseif type(a:lhs) == 4 && type(a:rhs) == 4 for key in keys(a:rhs) if type(a:rhs[key]) == 3 if !has_key(a:lhs, key) let a:lhs[key] = [] endif let a:lhs[key] += a:rhs[key] elseif type(a:rhs[key]) == 4 if has_key(a:lhs, key) call emmet#mergeConfig(a:lhs[key], a:rhs[key]) else let a:lhs[key] = a:rhs[key] endif else let a:lhs[key] = a:rhs[key] endif endfor endif endfunction function! emmet#newNode() return { 'name': '', 'attr': {}, 'child': [], 'snippet': '', 'basevalue': 0, 'basedirect': 1, 'multiplier': 1, 'parent': {}, 'value': '', 'pos': 0, 'important': 0, 'attrs_order': ['id', 'class'] } endfunction function! s:itemno(itemno, current) let current = a:current if current.basedirect > 0 if current.basevalue == 0 return a:itemno else return current.basevalue - 1 + a:itemno endif else if current.basevalue == 0 return current.multiplier - 1 - a:itemno else return current.multiplier + current.basevalue - 2 - a:itemno endif endif endfunction function! emmet#toString(...) let current = a:1 if a:0 > 1 let type = a:2 else let type = &ft endif if len(type) == 0 | let type = 'html' | endif if a:0 > 2 let inline = a:3 else let inline = 0 endif if a:0 > 3 if type(a:4) == 1 let filters = split(a:4, '\s*,\s*') else let filters = a:4 endif else let filters = ['html'] endif if a:0 > 4 let group_itemno = a:5 else let group_itemno = 0 endif if a:0 > 5 let indent = a:6 else let indent = '' endif let dollar_expr = emmet#getResource(type, 'dollar_expr', 1) let itemno = 0 let str = '' let rtype = emmet#lang#exists(type) ? type : 'html' while itemno < current.multiplier if len(current.name) if current.multiplier == 1 let inner = emmet#lang#{rtype}#toString(s:emmet_settings, current, type, inline, filters, s:itemno(group_itemno, current), indent) else let inner = emmet#lang#{rtype}#toString(s:emmet_settings, current, type, inline, filters, s:itemno(itemno, current), indent) endif if current.multiplier > 1 let inner = substitute(inner, '\$#', '$line'.(itemno+1).'$', 'g') endif let str .= inner else let snippet = current.snippet if len(current.snippet) == 0 let snippets = emmet#getResource(type, 'snippets', {}) if !empty(snippets) && has_key(snippets, 'emmet_snippet') let snippet = snippets['emmet_snippet'] endif endif if len(snippet) > 0 let tmp = snippet let tmp = substitute(tmp, '\${emmet_name}', current.name, 'g') let snippet_node = emmet#newNode() let snippet_node.value = '{'.tmp.'}' let snippet_node.important = current.important let str = emmet#lang#{rtype}#toString(s:emmet_settings, snippet_node, type, inline, filters, s:itemno(group_itemno, current), indent) else if len(current.name) let str .= current.name endif if len(current.value) let text = current.value[1:-2] if dollar_expr " TODO: regexp engine specified if exists('®expengine') let text = substitute(text, '\%#=1\%(\\\)\@\ 0 let key = get(matcharr, 1) if key !~ '^\d\+:' let key = substitute(key, '\\{', '{', 'g') let key = substitute(key, '\\}', '}', 'g') let value = emmet#getDollarValueByKey(key) if type(value) == type('') let expr = get(matcharr, 0) call add(dollar_list, {'expr': expr, 'value': value}) endif endif else break endif let expand = substitute(expand, dollar_reg, '', '') endwhile return dollar_list endfunction function! emmet#getDollarValueByKey(key) let ret = 0 let key = a:key let ftsetting = get(s:emmet_settings, emmet#getFileType()) if type(ftsetting) == 4 && has_key(ftsetting, key) let V = get(ftsetting, key) if type(V) == 1 | return V | endif endif if type(ret) != 1 && has_key(s:emmet_settings, key) let V = get(s:emmet_settings, key) if type(V) == 1 | return V | endif endif if has_key(s:emmet_settings, 'custom_expands') && type(s:emmet_settings['custom_expands']) == 4 for k in keys(s:emmet_settings['custom_expands']) if key =~ k let V = get(s:emmet_settings['custom_expands'], k) if type(V) == 1 | return V | endif if type(V) == 2 | return V(key) | endif endif endfor endif return ret endfunction function! emmet#reExpandDollarExpr(expand, times) let expand = a:expand let dollar_exprs = emmet#getDollarExprs(expand) if len(dollar_exprs) > 0 if a:times < 9 for n in range(len(dollar_exprs)) let pair = get(dollar_exprs, n) let pat = get(pair, 'expr') let sub = get(pair, 'value') let expand = substitute(expand, pat, sub, '') endfor return emmet#reExpandDollarExpr(expand, a:times + 1) endif endif return expand endfunction function! emmet#expandDollarExpr(expand) return emmet#reExpandDollarExpr(a:expand, 0) endfunction function! emmet#expandCursorExpr(expand, mode) let expand = a:expand let type = emmet#getFileType() if expand !~ '\${cursor}' if a:mode == 2 let expand = '${cursor}' . expand else let expand .= '${cursor}' endif endif let expand = substitute(expand, '\${cursor}', '$cursor$', '') let expand = substitute(expand, '\${cursor}', '', 'g') return expand endfunction function! emmet#unescapeDollarExpr(expand) return substitute(a:expand, '\\\$', '$', 'g') endfunction function! emmet#expandAbbr(mode, abbr) range let type = emmet#getFileType() let rtype = emmet#getFileType(1) let indent = emmet#getIndentation(type) let expand = '' let line = '' let part = '' let rest = '' let filters = emmet#getFilters(type) if len(filters) == 0 let filters = ['html'] endif if a:mode == 2 let leader = substitute(input('Tag: ', ''), '^\s*\(.*\)\s*$', '\1', 'g') if len(leader) == 0 return '' endif if leader =~ s:filtermx let filters = map(split(matchstr(leader, s:filtermx)[1:], '\s*[^\\]\zs,\s*'), 'substitute(v:val, "\\\\\\\\zs.\\\\ze", "&", "g")') let leader = substitute(leader, s:filtermx, '', '') endif if leader =~ '\*' let query = substitute(leader, '*', '*' . (a:lastline - a:firstline + 1), '') if query !~ '}\s*$' let query .= '>{$#}' endif if emmet#useFilter(filters, '/') let spl = emmet#splitFilterArg(filters) let fline = getline(a:firstline) let query = substitute(query, '>\{0,1}{\$#}\s*$', '{\\$column\\$}*' . len(split(fline, spl)), '') endif let items = emmet#parseIntoTree(query, type).child for item in items let expand .= emmet#toString(item, rtype, 0, filters, 0, indent) endfor if emmet#useFilter(filters, 'e') let expand = substitute(expand, '&', '\&', 'g') let expand = substitute(expand, '<', '\<', 'g') let expand = substitute(expand, '>', '\>', 'g') endif let line = getline(a:firstline) let part = substitute(line, '^\s*', '', '') for n in range(a:firstline, a:lastline) let lline = getline(n) let lpart = substitute(lline, '^\s\+', '', '') if emmet#useFilter(filters, 't') let lpart = substitute(lpart, '^[0-9.-]\+\s\+', '', '') let lpart = substitute(lpart, '\s\+$', '', '') endif if emmet#useFilter(filters, '/') for column in split(lpart, spl) let expand = substitute(expand, '\$column\$', '\=column', '') endfor else let expand = substitute(expand, '\$line'.(n-a:firstline+1).'\$', '\=lpart', 'g') endif endfor let expand = substitute(expand, '\$line\d*\$', '', 'g') let expand = substitute(expand, '\$column\$', '', 'g') let content = join(getline(a:firstline, a:lastline), "\n") if stridx(expand, '$#') < len(expand)-2 let expand = substitute(expand, '^\(.*\)\$#\s*$', '\1', '') endif let expand = substitute(expand, '\$#', '\=content', 'g') else let str = '' if visualmode() ==# 'V' let line = getline(a:firstline) let lspaces = matchstr(line, '^\s*', '', '') let part = substitute(line, '^\s*', '', '') for n in range(a:firstline, a:lastline) if len(leader) > 0 let line = getline(a:firstline) let spaces = matchstr(line, '^\s*', '', '') if len(spaces) >= len(lspaces) let str .= indent . getline(n)[len(lspaces):] . "\n" else let str .= getline(n) . "\n" endif else let lpart = substitute(getline(n), '^\s*', '', '') let str .= lpart . "\n" endif endfor let leader .= (str =~ "\n" ? ">{\n" : "{") . str . "}" let items = emmet#parseIntoTree(leader, type).child else let save_regcont = @" let save_regtype = getregtype('"') silent! normal! gvygv let str = @" call setreg('"', save_regcont, save_regtype) let items = emmet#parseIntoTree(leader . "{".str."}", type).child endif for item in items let expand .= emmet#toString(item, rtype, 0, filters, 0, '') endfor if emmet#useFilter(filters, 'e') let expand = substitute(expand, '&', '\&', 'g') let expand = substitute(expand, '<', '\<', 'g') let expand = substitute(expand, '>', '\>', 'g') endif endif elseif a:mode == 4 let line = getline('.') let spaces = matchstr(line, '^\s*') if line !~ '^\s*$' put =spaces.a:abbr else call setline('.', spaces.a:abbr) endif normal! $ call emmet#expandAbbr(0, "") return '' else let line = getline('.') if col('.') < len(line) let line = matchstr(line, '^\(.*\%'.col('.').'c\)') endif if a:mode == 1 let part = matchstr(line, '\([a-zA-Z0-9:_\-\@|]\+\)$') else let part = matchstr(line, '\(\S.*\)$') let ftype = emmet#lang#exists(type) ? type : 'html' let part = emmet#lang#{ftype}#findTokens(part) let line = line[0: stridx(line, part) + len(part) - 1] endif if col('.') == col('$') let rest = '' else let rest = getline('.')[len(line):] endif let str = part if str =~ s:filtermx let filters = split(matchstr(str, s:filtermx)[1:], '\s*,\s*') let str = substitute(str, s:filtermx, '', '') endif let items = emmet#parseIntoTree(str, rtype).child for item in items let expand .= emmet#toString(item, rtype, 0, filters, 0, indent) endfor if emmet#useFilter(filters, 'e') let expand = substitute(expand, '&', '\&', 'g') let expand = substitute(expand, '<', '\<', 'g') let expand = substitute(expand, '>', '\>', 'g') endif let expand = substitute(expand, '\$line\([0-9]\+\)\$', '\=submatch(1)', 'g') endif let expand = emmet#expandDollarExpr(expand) let expand = emmet#expandCursorExpr(expand, a:mode) if len(expand) if has_key(s:emmet_settings, 'timezone') && len(s:emmet_settings.timezone) let expand = substitute(expand, '${datetime}', strftime("%Y-%m-%dT%H:%M:%S") . s:emmet_settings.timezone, 'g') else " TODO: on windows, %z/%Z is 'Tokyo(Standard)' let expand = substitute(expand, '${datetime}', strftime("%Y-%m-%dT%H:%M:%S %z"), 'g') endif let expand = emmet#unescapeDollarExpr(expand) if a:mode == 2 && visualmode() ==# 'v' if a:firstline == a:lastline let expand = substitute(expand, '\n\s*', '', 'g') else let expand = substitute(expand, '\n$', '', 'g') endif silent! normal! gv let col = col("'<") silent! normal! c let line = getline('.') let lhs = matchstr(line, '.*\%<'.col.'c.') let rhs = matchstr(line, '\%>'.(col-1).'c.*') let expand = lhs.expand.rhs let lines = split(expand, '\n') call setline(line('.'), lines[0]) if len(lines) > 1 call append(line('.'), lines[1:]) endif else if line[:-len(part)-1] =~ '^\s\+$' let indent = line[:-len(part)-1] else let indent = '' endif let expand = substitute(expand, '\n\s*$', '', 'g') let expand = line[:-len(part)-1] . substitute(expand, "\n", "\n" . indent, 'g') . rest let lines = split(expand, '\n') if a:mode == 2 silent! exe "normal! gvc" endif call setline(line('.'), lines[0]) if len(lines) > 1 call append(line('.'), lines[1:]) endif endif endif if search('\$cursor\$', 'e') let oldselection = &selection let &selection = 'inclusive' if foldclosed(line('.')) != -1 silent! foldopen endif silent! exe "normal! v7h\"_s" if col('.') == col('$') call feedkeys('', 'n') endif let &selection = oldselection endif if g:emmet_debug > 1 call getchar() endif return '' endfunction function! emmet#moveNextPrevItem(flag) let type = emmet#getFileType() let rtype = emmet#lang#exists(type) ? type : 'html' return emmet#lang#{rtype}#moveNextPrevItem(a:flag) endfunction function! emmet#moveNextPrev(flag) let type = emmet#getFileType() let rtype = emmet#lang#exists(type) ? type : 'html' return emmet#lang#{rtype}#moveNextPrev(a:flag) endfunction function! emmet#imageSize() let orgpos = emmet#util#getcurpos() let type = emmet#getFileType() let rtype = emmet#lang#exists(type) ? type : 'html' call emmet#lang#{rtype}#imageSize() silent! call setpos('.', orgpos) return '' endfunction function! emmet#encodeImage() let type = emmet#getFileType() let rtype = emmet#lang#exists(type) ? type : 'html' return emmet#lang#{rtype}#encodeImage() endfunction function! emmet#toggleComment() let type = emmet#getFileType() let rtype = emmet#lang#exists(type) ? type : 'html' call emmet#lang#{rtype}#toggleComment() return '' endfunction function! emmet#balanceTag(flag) range let type = emmet#getFileType() let rtype = emmet#lang#exists(type) ? type : 'html' return emmet#lang#{rtype}#balanceTag(a:flag) endfunction function! emmet#splitJoinTag() let type = emmet#getFileType() let rtype = emmet#lang#exists(type) ? type : 'html' return emmet#lang#{rtype}#splitJoinTag() endfunction function! emmet#mergeLines() range let lines = join(map(getline(a:firstline, a:lastline), 'matchstr(v:val, "^\\s*\\zs.*\\ze\\s*$")'), '') let indent = substitute(getline('.'), '^\(\s*\).*', '\1', '') silent! exe "normal! gvc" call setline('.', indent . lines) endfunction function! emmet#removeTag() let type = emmet#getFileType() let rtype = emmet#lang#exists(type) ? type : 'html' call emmet#lang#{rtype}#removeTag() return '' endfunction function! emmet#anchorizeURL(flag) let mx = 'https\=:\/\/[-!#$%&*+,./:;=?@0-9a-zA-Z_~]\+' let pos1 = searchpos(mx, 'bcnW') let url = matchstr(getline(pos1[0])[pos1[1]-1:], mx) let block = [pos1, [pos1[0], pos1[1] + len(url) - 1]] if !emmet#util#cursorInRegion(block) return '' endif let mx = '.*]*>\s*\zs\([^<]\+\)\ze\s*<\/title[^>]*>.*' let content = emmet#util#getContentFromURL(url) let content = substitute(content, '\r', '', 'g') let content = substitute(content, '[ \n]\+', ' ', 'g') let content = substitute(content, '', '', 'g') let title = matchstr(content, mx) let type = emmet#getFileType() let rtype = emmet#lang#exists(type) ? type : 'html' if a:flag == 0 let a = emmet#lang#html#parseTag('') let a.attr.href = url let a.value = '{' . title . '}' let expand = emmet#toString(a, rtype, 0, []) let expand = substitute(expand, '\${cursor}', '', 'g') else let body = emmet#util#getTextFromHTML(content) let body = '{' . substitute(body, '^\(.\{0,100}\).*', '\1', '') . '...}' let blockquote = emmet#lang#html#parseTag('
') let a = emmet#lang#html#parseTag('') let a.attr.href = url let a.value = '{' . title . '}' call add(blockquote.child, a) call add(blockquote.child, emmet#lang#html#parseTag('
')) let p = emmet#lang#html#parseTag('

') let p.value = body call add(blockquote.child, p) let cite = emmet#lang#html#parseTag('') let cite.value = '{' . url . '}' call add(blockquote.child, cite) let expand = emmet#toString(blockquote, rtype, 0, []) let expand = substitute(expand, '\${cursor}', '', 'g') endif let indent = substitute(getline('.'), '^\(\s*\).*', '\1', '') let expand = substitute(expand, "\n", "\n" . indent, 'g') call emmet#util#setContent(block, expand) return '' endfunction function! emmet#codePretty() range let type = input('FileType: ', &ft, 'filetype') if len(type) == 0 return endif let block = emmet#util#getVisualBlock() let content = emmet#util#getContent(block) silent! 1new let &l:filetype = type call setline(1, split(content, "\n")) let old_lazyredraw = &lazyredraw set lazyredraw silent! TOhtml let &lazyredraw = old_lazyredraw let content = join(getline(1, '$'), "\n") silent! bw! silent! bw! let content = matchstr(content, ']*>[\s\n]*\zs.*\ze') call emmet#util#setContent(block, content) endfunction function! emmet#expandWord(abbr, type, orig) let str = a:abbr let type = a:type let indent = emmet#getIndentation(type) if len(type) == 0 | let type = 'html' | endif if str =~ s:filtermx let filters = split(matchstr(str, s:filtermx)[1:], '\s*,\s*') let str = substitute(str, s:filtermx, '', '') else let filters = emmet#getFilters(a:type) if len(filters) == 0 let filters = ['html'] endif endif let str = substitute(str, '|', '${cursor}', 'g') let items = emmet#parseIntoTree(str, a:type).child let expand = '' for item in items let expand .= emmet#toString(item, a:type, 0, filters, 0, indent) endfor if emmet#useFilter(filters, 'e') let expand = substitute(expand, '&', '\&', 'g') let expand = substitute(expand, '<', '\<', 'g') let expand = substitute(expand, '>', '\>', 'g') endif if a:orig == 0 let expand = emmet#expandDollarExpr(expand) let expand = substitute(expand, '\${cursor}', '', 'g') endif return expand endfunction function! emmet#getSnippets(type) let type = a:type if len(type) == 0 || !has_key(s:emmet_settings, type) let type = 'html' endif return emmet#getResource(type, 'snippets', {}) endfunction function! emmet#completeTag(findstart, base) if a:findstart let line = getline('.') let start = col('.') - 1 while start > 0 && line[start - 1] =~ '[a-zA-Z0-9:_\@\-]' let start -= 1 endwhile return start else let type = emmet#getFileType() let res = [] let snippets = emmet#getResource(type, 'snippets', {}) for item in keys(snippets) if stridx(item, a:base) != -1 call add(res, substitute(item, '\${cursor}\||', '', 'g')) endif endfor let aliases = emmet#getResource(type, 'aliases', {}) for item in values(aliases) if stridx(item, a:base) != -1 call add(res, substitute(item, '\${cursor}\||', '', 'g')) endif endfor return res endif endfunction unlet! s:emmet_settings let s:emmet_settings = { \ 'lang': "en", \ 'charset': "UTF-8", \ 'custom_expands' : { \ '^\%(lorem\|lipsum\)\(\d*\)$' : function('emmet#lorem#en#expand'), \ }, \ 'css': { \ 'snippets': { \ '@i': '@import url(|);', \ '@m': "@media print {\n\t|\n}", \ '@f': "@font-face {\n\tfont-family:|;\n\tsrc:url(|);\n}", \ '!': '!important', \ 'pos': 'position:|;', \ 'pos:s': 'position:static;', \ 'pos:a': 'position:absolute;', \ 'pos:r': 'position:relative;', \ 'pos:f': 'position:fixed;', \ 't': 'top:|;', \ 't:a': 'top:auto;', \ 'r': 'right:|;', \ 'r:a': 'right:auto;', \ 'b': 'bottom:|;', \ 'b:a': 'bottom:auto;', \ 'l': 'left:|;', \ 'l:a': 'left:auto;', \ 'z': 'z-index:|;', \ 'z:a': 'z-index:auto;', \ 'fl': 'float:|;', \ 'fl:n': 'float:none;', \ 'fl:l': 'float:left;', \ 'fl:r': 'float:right;', \ 'cl': 'clear:|;', \ 'cl:n': 'clear:none;', \ 'cl:l': 'clear:left;', \ 'cl:r': 'clear:right;', \ 'cl:b': 'clear:both;', \ 'd': 'display:|;', \ 'd:n': 'display:none;', \ 'd:b': 'display:block;', \ 'd:i': 'display:inline;', \ 'd:ib': 'display:inline-block;', \ 'd:li': 'display:list-item;', \ 'd:ri': 'display:run-in;', \ 'd:cp': 'display:compact;', \ 'd:tb': 'display:table;', \ 'd:itb': 'display:inline-table;', \ 'd:tbcp': 'display:table-caption;', \ 'd:tbcl': 'display:table-column;', \ 'd:tbclg': 'display:table-column-group;', \ 'd:tbhg': 'display:table-header-group;', \ 'd:tbfg': 'display:table-footer-group;', \ 'd:tbr': 'display:table-row;', \ 'd:tbrg': 'display:table-row-group;', \ 'd:tbc': 'display:table-cell;', \ 'd:rb': 'display:ruby;', \ 'd:rbb': 'display:ruby-base;', \ 'd:rbbg': 'display:ruby-base-group;', \ 'd:rbt': 'display:ruby-text;', \ 'd:rbtg': 'display:ruby-text-group;', \ 'v': 'visibility:|;', \ 'v:v': 'visibility:visible;', \ 'v:h': 'visibility:hidden;', \ 'v:c': 'visibility:collapse;', \ 'ov': 'overflow:|;', \ 'ov:v': 'overflow:visible;', \ 'ov:h': 'overflow:hidden;', \ 'ov:s': 'overflow:scroll;', \ 'ov:a': 'overflow:auto;', \ 'ovx': 'overflow-x:|;', \ 'ovx:v': 'overflow-x:visible;', \ 'ovx:h': 'overflow-x:hidden;', \ 'ovx:s': 'overflow-x:scroll;', \ 'ovx:a': 'overflow-x:auto;', \ 'ovy': 'overflow-y:|;', \ 'ovy:v': 'overflow-y:visible;', \ 'ovy:h': 'overflow-y:hidden;', \ 'ovy:s': 'overflow-y:scroll;', \ 'ovy:a': 'overflow-y:auto;', \ 'ovs': 'overflow-style:|;', \ 'ovs:a': 'overflow-style:auto;', \ 'ovs:s': 'overflow-style:scrollbar;', \ 'ovs:p': 'overflow-style:panner;', \ 'ovs:m': 'overflow-style:move;', \ 'ovs:mq': 'overflow-style:marquee;', \ 'zoo': 'zoom:1;', \ 'cp': 'clip:|;', \ 'cp:a': 'clip:auto;', \ 'cp:r': 'clip:rect(|);', \ 'bxz': 'box-sizing:|;', \ 'bxz:cb': 'box-sizing:content-box;', \ 'bxz:bb': 'box-sizing:border-box;', \ 'bxsh': 'box-shadow:|;', \ 'bxsh:n': 'box-shadow:none;', \ 'bxsh:w': '-webkit-box-shadow:0 0 0 #000;', \ 'bxsh:m': '-moz-box-shadow:0 0 0 0 #000;', \ 'm': 'margin:|;', \ 'm:a': 'margin:auto;', \ 'm:0': 'margin:0;', \ 'm:2': 'margin:0 0;', \ 'm:3': 'margin:0 0 0;', \ 'm:4': 'margin:0 0 0 0;', \ 'mt': 'margin-top:|;', \ 'mt:a': 'margin-top:auto;', \ 'mr': 'margin-right:|;', \ 'mr:a': 'margin-right:auto;', \ 'mb': 'margin-bottom:|;', \ 'mb:a': 'margin-bottom:auto;', \ 'ml': 'margin-left:|;', \ 'ml:a': 'margin-left:auto;', \ 'p': 'padding:|;', \ 'p:0': 'padding:0;', \ 'p:2': 'padding:0 0;', \ 'p:3': 'padding:0 0 0;', \ 'p:4': 'padding:0 0 0 0;', \ 'pt': 'padding-top:|;', \ 'pr': 'padding-right:|;', \ 'pb': 'padding-bottom:|;', \ 'pl': 'padding-left:|;', \ 'w': 'width:|;', \ 'w:a': 'width:auto;', \ 'h': 'height:|;', \ 'h:a': 'height:auto;', \ 'maw': 'max-width:|;', \ 'maw:n': 'max-width:none;', \ 'mah': 'max-height:|;', \ 'mah:n': 'max-height:none;', \ 'miw': 'min-width:|;', \ 'mih': 'min-height:|;', \ 'o': 'outline:|;', \ 'o:n': 'outline:none;', \ 'oo': 'outline-offset:|;', \ 'ow': 'outline-width:|;', \ 'os': 'outline-style:|;', \ 'oc': 'outline-color:#000;', \ 'oc:i': 'outline-color:invert;', \ 'bd': 'border:|;', \ 'bd+': 'border:1px solid #000;', \ 'bd:n': 'border:none;', \ 'bdbk': 'border-break:|;', \ 'bdbk:c': 'border-break:close;', \ 'bdcl': 'border-collapse:|;', \ 'bdcl:c': 'border-collapse:collapse;', \ 'bdcl:s': 'border-collapse:separate;', \ 'bdc': 'border-color:#000;', \ 'bdi': 'border-image:url(|);', \ 'bdi:n': 'border-image:none;', \ 'bdi:w': '-webkit-border-image:url(|) 0 0 0 0 stretch stretch;', \ 'bdi:m': '-moz-border-image:url(|) 0 0 0 0 stretch stretch;', \ 'bdti': 'border-top-image:url(|);', \ 'bdti:n': 'border-top-image:none;', \ 'bdri': 'border-right-image:url(|);', \ 'bdri:n': 'border-right-image:none;', \ 'bdbi': 'border-bottom-image:url(|);', \ 'bdbi:n': 'border-bottom-image:none;', \ 'bdli': 'border-left-image:url(|);', \ 'bdli:n': 'border-left-image:none;', \ 'bdci': 'border-corner-image:url(|);', \ 'bdci:n': 'border-corner-image:none;', \ 'bdci:c': 'border-corner-image:continue;', \ 'bdtli': 'border-top-left-image:url(|);', \ 'bdtli:n': 'border-top-left-image:none;', \ 'bdtli:c': 'border-top-left-image:continue;', \ 'bdtri': 'border-top-right-image:url(|);', \ 'bdtri:n': 'border-top-right-image:none;', \ 'bdtri:c': 'border-top-right-image:continue;', \ 'bdbri': 'border-bottom-right-image:url(|);', \ 'bdbri:n': 'border-bottom-right-image:none;', \ 'bdbri:c': 'border-bottom-right-image:continue;', \ 'bdbli': 'border-bottom-left-image:url(|);', \ 'bdbli:n': 'border-bottom-left-image:none;', \ 'bdbli:c': 'border-bottom-left-image:continue;', \ 'bdf': 'border-fit:|;', \ 'bdf:c': 'border-fit:clip;', \ 'bdf:r': 'border-fit:repeat;', \ 'bdf:sc': 'border-fit:scale;', \ 'bdf:st': 'border-fit:stretch;', \ 'bdf:ow': 'border-fit:overwrite;', \ 'bdf:of': 'border-fit:overflow;', \ 'bdf:sp': 'border-fit:space;', \ 'bdl': 'border-left:|;', \ 'bdl:a': 'border-length:auto;', \ 'bdsp': 'border-spacing:|;', \ 'bds': 'border-style:|;', \ 'bds:n': 'border-style:none;', \ 'bds:h': 'border-style:hidden;', \ 'bds:dt': 'border-style:dotted;', \ 'bds:ds': 'border-style:dashed;', \ 'bds:s': 'border-style:solid;', \ 'bds:db': 'border-style:double;', \ 'bds:dtds': 'border-style:dot-dash;', \ 'bds:dtdtds': 'border-style:dot-dot-dash;', \ 'bds:w': 'border-style:wave;', \ 'bds:g': 'border-style:groove;', \ 'bds:r': 'border-style:ridge;', \ 'bds:i': 'border-style:inset;', \ 'bds:o': 'border-style:outset;', \ 'bdw': 'border-width:|;', \ 'bdt': 'border-top:|;', \ 'bdt+': 'border-top:1px solid #000;', \ 'bdt:n': 'border-top:none;', \ 'bdtw': 'border-top-width:|;', \ 'bdts': 'border-top-style:|;', \ 'bdts:n': 'border-top-style:none;', \ 'bdtc': 'border-top-color:#000;', \ 'bdr': 'border-right:|;', \ 'bdr+': 'border-right:1px solid #000;', \ 'bdr:n': 'border-right:none;', \ 'bdrw': 'border-right-width:|;', \ 'bdrt': 'border-right-style:|;', \ 'bdrs:n': 'border-right-style:none;', \ 'bdrc': 'border-right-color:#000;', \ 'bdb': 'border-bottom:|;', \ 'bdb+': 'border-bottom:1px solid #000;', \ 'bdb:n': 'border-bottom:none;', \ 'bdbw': 'border-bottom-width:|;', \ 'bdbs': 'border-bottom-style:|;', \ 'bdbs:n': 'border-bottom-style:none;', \ 'bdbc': 'border-bottom-color:#000;', \ 'bdln': 'border-length:|;', \ 'bdl+': 'border-left:1px solid #000;', \ 'bdl:n': 'border-left:none;', \ 'bdlw': 'border-left-width:|;', \ 'bdls': 'border-left-style:|;', \ 'bdls:n': 'border-left-style:none;', \ 'bdlc': 'border-left-color:#000;', \ 'bdrs': 'border-radius:|;', \ 'bdtrrz': 'border-top-right-radius:|;', \ 'bdtlrz': 'border-top-left-radius:|;', \ 'bdbrrz': 'border-bottom-right-radius:|;', \ 'bdblrz': 'border-bottom-left-radius:|;', \ 'bdrz:w': '-webkit-border-radius:|;', \ 'bdrz:m': '-moz-border-radius:|;', \ 'bg': 'background:|;', \ 'bg+': 'background:#FFF url(|) 0 0 no-repeat;', \ 'bg:n': 'background:none;', \ 'bg:ie': 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=''|x.png'');', \ 'bgc': 'background-color:#FFF;', \ 'bgi': 'background-image:url(|);', \ 'bgi:n': 'background-image:none;', \ 'bgr': 'background-repeat:|;', \ 'bgr:n': 'background-repeat:no-repeat;', \ 'bgr:x': 'background-repeat:repeat-x;', \ 'bgr:y': 'background-repeat:repeat-y;', \ 'bga': 'background-attachment:|;', \ 'bga:f': 'background-attachment:fixed;', \ 'bga:s': 'background-attachment:scroll;', \ 'bgp': 'background-position:0 0;', \ 'bgpx': 'background-position-x:|;', \ 'bgpy': 'background-position-y:|;', \ 'bgbk': 'background-break:|;', \ 'bgbk:bb': 'background-break:bounding-box;', \ 'bgbk:eb': 'background-break:each-box;', \ 'bgbk:c': 'background-break:continuous;', \ 'bgcp': 'background-clip:|;', \ 'bgcp:bb': 'background-clip:border-box;', \ 'bgcp:pb': 'background-clip:padding-box;', \ 'bgcp:cb': 'background-clip:content-box;', \ 'bgcp:nc': 'background-clip:no-clip;', \ 'bgo': 'background-origin:|;', \ 'bgo:pb': 'background-origin:padding-box;', \ 'bgo:bb': 'background-origin:border-box;', \ 'bgo:cb': 'background-origin:content-box;', \ 'bgz': 'background-size:|;', \ 'bgz:a': 'background-size:auto;', \ 'bgz:ct': 'background-size:contain;', \ 'bgz:cv': 'background-size:cover;', \ 'c': 'color:#000;', \ 'tbl': 'table-layout:|;', \ 'tbl:a': 'table-layout:auto;', \ 'tbl:f': 'table-layout:fixed;', \ 'cps': 'caption-side:|;', \ 'cps:t': 'caption-side:top;', \ 'cps:b': 'caption-side:bottom;', \ 'ec': 'empty-cells:|;', \ 'ec:s': 'empty-cells:show;', \ 'ec:h': 'empty-cells:hide;', \ 'lis': 'list-style:|;', \ 'lis:n': 'list-style:none;', \ 'lisp': 'list-style-position:|;', \ 'lisp:i': 'list-style-position:inside;', \ 'lisp:o': 'list-style-position:outside;', \ 'list': 'list-style-type:|;', \ 'list:n': 'list-style-type:none;', \ 'list:d': 'list-style-type:disc;', \ 'list:c': 'list-style-type:circle;', \ 'list:s': 'list-style-type:square;', \ 'list:dc': 'list-style-type:decimal;', \ 'list:dclz': 'list-style-type:decimal-leading-zero;', \ 'list:lr': 'list-style-type:lower-roman;', \ 'list:ur': 'list-style-type:upper-roman;', \ 'lisi': 'list-style-image:|;', \ 'lisi:n': 'list-style-image:none;', \ 'q': 'quotes:|;', \ 'q:n': 'quotes:none;', \ 'q:ru': 'quotes:''\00AB'' ''\00BB'' ''\201E'' ''\201C'';', \ 'q:en': 'quotes:''\201C'' ''\201D'' ''\2018'' ''\2019'';', \ 'ct': 'content:|;', \ 'ct:n': 'content:normal;', \ 'ct:oq': 'content:open-quote;', \ 'ct:noq': 'content:no-open-quote;', \ 'ct:cq': 'content:close-quote;', \ 'ct:ncq': 'content:no-close-quote;', \ 'ct:a': 'content:attr(|);', \ 'ct:c': 'content:counter(|);', \ 'ct:cs': 'content:counters(|);', \ 'coi': 'counter-increment:|;', \ 'cor': 'counter-reset:|;', \ 'va': 'vertical-align:|;', \ 'va:sup': 'vertical-align:super;', \ 'va:t': 'vertical-align:top;', \ 'va:tt': 'vertical-align:text-top;', \ 'va:m': 'vertical-align:middle;', \ 'va:bl': 'vertical-align:baseline;', \ 'va:b': 'vertical-align:bottom;', \ 'va:tb': 'vertical-align:text-bottom;', \ 'va:sub': 'vertical-align:sub;', \ 'ta': 'text-align:|;', \ 'ta:l': 'text-align:left;', \ 'ta:c': 'text-align:center;', \ 'ta:r': 'text-align:right;', \ 'tal': 'text-align-last:|;', \ 'tal:a': 'text-align-last:auto;', \ 'tal:l': 'text-align-last:left;', \ 'tal:c': 'text-align-last:center;', \ 'tal:r': 'text-align-last:right;', \ 'td': 'text-decoration:|;', \ 'td:n': 'text-decoration:none;', \ 'td:u': 'text-decoration:underline;', \ 'td:o': 'text-decoration:overline;', \ 'td:l': 'text-decoration:line-through;', \ 'te': 'text-emphasis:|;', \ 'te:n': 'text-emphasis:none;', \ 'te:ac': 'text-emphasis:accent;', \ 'te:dt': 'text-emphasis:dot;', \ 'te:c': 'text-emphasis:circle;', \ 'te:ds': 'text-emphasis:disc;', \ 'te:b': 'text-emphasis:before;', \ 'te:a': 'text-emphasis:after;', \ 'th': 'text-height:|;', \ 'th:a': 'text-height:auto;', \ 'th:f': 'text-height:font-size;', \ 'th:t': 'text-height:text-size;', \ 'th:m': 'text-height:max-size;', \ 'ti': 'text-indent:|;', \ 'ti:-': 'text-indent:-9999px;', \ 'tj': 'text-justify:|;', \ 'tj:a': 'text-justify:auto;', \ 'tj:iw': 'text-justify:inter-word;', \ 'tj:ii': 'text-justify:inter-ideograph;', \ 'tj:ic': 'text-justify:inter-cluster;', \ 'tj:d': 'text-justify:distribute;', \ 'tj:k': 'text-justify:kashida;', \ 'tj:t': 'text-justify:tibetan;', \ 'to': 'text-outline:|;', \ 'to+': 'text-outline:0 0 #000;', \ 'to:n': 'text-outline:none;', \ 'tr': 'text-replace:|;', \ 'tr:n': 'text-replace:none;', \ 'tt': 'text-transform:|;', \ 'tt:n': 'text-transform:none;', \ 'tt:c': 'text-transform:capitalize;', \ 'tt:u': 'text-transform:uppercase;', \ 'tt:l': 'text-transform:lowercase;', \ 'tw': 'text-wrap:|;', \ 'tw:n': 'text-wrap:normal;', \ 'tw:no': 'text-wrap:none;', \ 'tw:u': 'text-wrap:unrestricted;', \ 'tw:s': 'text-wrap:suppress;', \ 'tsh': 'text-shadow:|;', \ 'tsh+': 'text-shadow:0 0 0 #000;', \ 'tsh:n': 'text-shadow:none;', \ 'lh': 'line-height:|;', \ 'whs': 'white-space:|;', \ 'whs:n': 'white-space:normal;', \ 'whs:p': 'white-space:pre;', \ 'whs:nw': 'white-space:nowrap;', \ 'whs:pw': 'white-space:pre-wrap;', \ 'whs:pl': 'white-space:pre-line;', \ 'whsc': 'white-space-collapse:|;', \ 'whsc:n': 'white-space-collapse:normal;', \ 'whsc:k': 'white-space-collapse:keep-all;', \ 'whsc:l': 'white-space-collapse:loose;', \ 'whsc:bs': 'white-space-collapse:break-strict;', \ 'whsc:ba': 'white-space-collapse:break-all;', \ 'wob': 'word-break:|;', \ 'wob:n': 'word-break:normal;', \ 'wob:k': 'word-break:keep-all;', \ 'wob:l': 'word-break:loose;', \ 'wob:bs': 'word-break:break-strict;', \ 'wob:ba': 'word-break:break-all;', \ 'wos': 'word-spacing:|;', \ 'wow': 'word-wrap:|;', \ 'wow:nm': 'word-wrap:normal;', \ 'wow:n': 'word-wrap:none;', \ 'wow:u': 'word-wrap:unrestricted;', \ 'wow:s': 'word-wrap:suppress;', \ 'lts': 'letter-spacing:|;', \ 'f': 'font:|;', \ 'f+': 'font:1em Arial,sans-serif;', \ 'fw': 'font-weight:|;', \ 'fw:n': 'font-weight:normal;', \ 'fw:b': 'font-weight:bold;', \ 'fw:br': 'font-weight:bolder;', \ 'fw:lr': 'font-weight:lighter;', \ 'fs': 'font-style:|;', \ 'fs:n': 'font-style:normal;', \ 'fs:i': 'font-style:italic;', \ 'fs:o': 'font-style:oblique;', \ 'fv': 'font-variant:|;', \ 'fv:n': 'font-variant:normal;', \ 'fv:sc': 'font-variant:small-caps;', \ 'fz': 'font-size:|;', \ 'fza': 'font-size-adjust:|;', \ 'fza:n': 'font-size-adjust:none;', \ 'ff': 'font-family:|;', \ 'ff:s': 'font-family:serif;', \ 'ff:ss': 'font-family:sans-serif;', \ 'ff:c': 'font-family:cursive;', \ 'ff:f': 'font-family:fantasy;', \ 'ff:m': 'font-family:monospace;', \ 'fef': 'font-effect:|;', \ 'fef:n': 'font-effect:none;', \ 'fef:eg': 'font-effect:engrave;', \ 'fef:eb': 'font-effect:emboss;', \ 'fef:o': 'font-effect:outline;', \ 'fem': 'font-emphasize:|;', \ 'femp': 'font-emphasize-position:|;', \ 'femp:b': 'font-emphasize-position:before;', \ 'femp:a': 'font-emphasize-position:after;', \ 'fems': 'font-emphasize-style:|;', \ 'fems:n': 'font-emphasize-style:none;', \ 'fems:ac': 'font-emphasize-style:accent;', \ 'fems:dt': 'font-emphasize-style:dot;', \ 'fems:c': 'font-emphasize-style:circle;', \ 'fems:ds': 'font-emphasize-style:disc;', \ 'fsm': 'font-smooth:|;', \ 'fsm:a': 'font-smooth:auto;', \ 'fsm:n': 'font-smooth:never;', \ 'fsm:aw': 'font-smooth:always;', \ 'fst': 'font-stretch:|;', \ 'fst:n': 'font-stretch:normal;', \ 'fst:uc': 'font-stretch:ultra-condensed;', \ 'fst:ec': 'font-stretch:extra-condensed;', \ 'fst:c': 'font-stretch:condensed;', \ 'fst:sc': 'font-stretch:semi-condensed;', \ 'fst:se': 'font-stretch:semi-expanded;', \ 'fst:e': 'font-stretch:expanded;', \ 'fst:ee': 'font-stretch:extra-expanded;', \ 'fst:ue': 'font-stretch:ultra-expanded;', \ 'op': 'opacity:|;', \ 'op:ie': 'filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);', \ 'op:ms': '-ms-filter:''progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'';', \ 'rz': 'resize:|;', \ 'rz:n': 'resize:none;', \ 'rz:b': 'resize:both;', \ 'rz:h': 'resize:horizontal;', \ 'rz:v': 'resize:vertical;', \ 'cur': 'cursor:|;', \ 'cur:a': 'cursor:auto;', \ 'cur:d': 'cursor:default;', \ 'cur:c': 'cursor:crosshair;', \ 'cur:ha': 'cursor:hand;', \ 'cur:he': 'cursor:help;', \ 'cur:m': 'cursor:move;', \ 'cur:p': 'cursor:pointer;', \ 'cur:t': 'cursor:text;', \ 'pgbb': 'page-break-before:|;', \ 'pgbb:au': 'page-break-before:auto;', \ 'pgbb:al': 'page-break-before:always;', \ 'pgbb:l': 'page-break-before:left;', \ 'pgbb:r': 'page-break-before:right;', \ 'pgbi': 'page-break-inside:|;', \ 'pgbi:au': 'page-break-inside:auto;', \ 'pgbi:av': 'page-break-inside:avoid;', \ 'pgba': 'page-break-after:|;', \ 'pgba:au': 'page-break-after:auto;', \ 'pgba:al': 'page-break-after:always;', \ 'pgba:l': 'page-break-after:left;', \ 'pgba:r': 'page-break-after:right;', \ 'orp': 'orphans:|;', \ 'wid': 'widows:|;', \ }, \ 'filters': 'fc', \ }, \ 'sass': { \ 'extends': 'css', \ 'snippets': { \ '@if': "@if {\n\t|\n}", \ '@e': "@else {\n\t|\n}", \ '@in': "@include |", \ '@ex': "@extend |", \ '@mx': "@mixin {\n\t|\n}", \ '@fn': "@function {\n\t|\n}", \ '@r': "@return |", \ }, \ }, \ 'scss': { \ 'extends': 'css', \ }, \ 'less': { \ 'extends': 'css', \ }, \ 'css.drupal': { \ 'extends': 'css', \ }, \ 'html': { \ 'snippets': { \ '!!!': "", \ '!!!4t': "", \ '!!!4s': "", \ '!!!xt': "", \ '!!!xs': "", \ '!!!xxs': "", \ 'c': "", \ 'cc:ie6': "", \ 'cc:ie': "", \ 'cc:noie': "\n\t${child}|\n", \ 'html:4t': "\n" \ ."\n" \ ."\n" \ ."\t\n" \ ."\t\n" \ ."\n" \ ."\n\t${child}|\n\n" \ ."", \ 'html:4s': "\n" \ ."\n" \ ."\n" \ ."\t\n" \ ."\t\n" \ ."\n" \ ."\n\t${child}|\n\n" \ ."", \ 'html:xt': "\n" \ ."\n" \ ."\n" \ ."\t\n" \ ."\t\n" \ ."\n" \ ."\n\t${child}|\n\n" \ ."", \ 'html:xs': "\n" \ ."\n" \ ."\n" \ ."\t\n" \ ."\t\n" \ ."\n" \ ."\n\t${child}|\n\n" \ ."", \ 'html:xxs': "\n" \ ."\n" \ ."\n" \ ."\t\n" \ ."\t\n" \ ."\n" \ ."\n\t${child}|\n\n" \ ."", \ 'html:5': "\n" \ ."\n" \ ."\n" \ ."\t\n" \ ."\t\n" \ ."\n" \ ."\n\t${child}|\n\n" \ ."", \ }, \ 'default_attributes': { \ 'a': {'href': ''}, \ 'a:link': {'href': 'http://|'}, \ 'a:mail': {'href': 'mailto:|'}, \ 'abbr': {'title': ''}, \ 'acronym': {'title': ''}, \ 'base': {'href': ''}, \ 'bdo': {'dir': ''}, \ 'bdo:r': {'dir': 'rtl'}, \ 'bdo:l': {'dir': 'ltr'}, \ 'del': {'datetime': '${datetime}'}, \ 'ins': {'datetime': '${datetime}'}, \ 'link:css': [{'rel': 'stylesheet'}, g:emmet_html5 ? {} : {'type': 'text/css'}, {'href': '|style.css'}, {'media': 'all'}], \ 'link:print': [{'rel': 'stylesheet'}, g:emmet_html5 ? {} : {'type': 'text/css'}, {'href': '|print.css'}, {'media': 'print'}], \ 'link:favicon': [{'rel': 'shortcut icon'}, {'type': 'image/x-icon'}, {'href': '|favicon.ico'}], \ 'link:touch': [{'rel': 'apple-touch-icon'}, {'href': '|favicon.png'}], \ 'link:rss': [{'rel': 'alternate'}, {'type': 'application/rss+xml'}, {'title': 'RSS'}, {'href': '|rss.xml'}], \ 'link:atom': [{'rel': 'alternate'}, {'type': 'application/atom+xml'}, {'title': 'Atom'}, {'href': 'atom.xml'}], \ 'meta:utf': [{'http-equiv': 'Content-Type'}, {'content': 'text/html;charset=UTF-8'}], \ 'meta:win': [{'http-equiv': 'Content-Type'}, {'content': 'text/html;charset=Win-1251'}], \ 'meta:compat': [{'http-equiv': 'X-UA-Compatible'}, {'content': 'IE=7'}], \ 'style': g:emmet_html5 ? {} : {'type': 'text/css'}, \ 'script': g:emmet_html5 ? {} : {'type': 'text/javascript'}, \ 'script:src': g:emmet_html5 ? {'src': ''} : [{'type': 'text/javascript'}, {'src': ''}], \ 'img': [{'src': ''}, {'alt': ''}], \ 'iframe': [{'src': ''}, {'frameborder': '0'}], \ 'embed': [{'src': ''}, {'type': ''}], \ 'object': [{'data': ''}, {'type': ''}], \ 'param': [{'name': ''}, {'value': ''}], \ 'map': {'name': ''}, \ 'area': [{'shape': ''}, {'coords': ''}, {'href': ''}, {'alt': ''}], \ 'area:d': [{'shape': 'default'}, {'href': ''}, {'alt': ''}], \ 'area:c': [{'shape': 'circle'}, {'coords': ''}, {'href': ''}, {'alt': ''}], \ 'area:r': [{'shape': 'rect'}, {'coords': ''}, {'href': ''}, {'alt': ''}], \ 'area:p': [{'shape': 'poly'}, {'coords': ''}, {'href': ''}, {'alt': ''}], \ 'link': [{'rel': 'stylesheet'}, {'href': ''}], \ 'form': {'action': ''}, \ 'form:get': {'action': '', 'method': 'get'}, \ 'form:post': {'action': '', 'method': 'post'}, \ 'form:upload': {'action': '', 'method': 'post', 'enctype': 'multipart/form-data'}, \ 'label': {'for': ''}, \ 'input': {'type': ''}, \ 'input:hidden': [{'type': 'hidden'}, {'name': ''}], \ 'input:h': [{'type': 'hidden'}, {'name': ''}], \ 'input:text': [{'type': 'text'}, {'name': ''}, {'id': ''}], \ 'input:t': [{'type': 'text'}, {'name': ''}, {'id': ''}], \ 'input:search': [{'type': 'search'}, {'name': ''}, {'id': ''}], \ 'input:email': [{'type': 'email'}, {'name': ''}, {'id': ''}], \ 'input:url': [{'type': 'url'}, {'name': ''}, {'id': ''}], \ 'input:password': [{'type': 'password'}, {'name': ''}, {'id': ''}], \ 'input:p': [{'type': 'password'}, {'name': ''}, {'id': ''}], \ 'input:datetime': [{'type': 'datetime'}, {'name': ''}, {'id': ''}], \ 'input:date': [{'type': 'date'}, {'name': ''}, {'id': ''}], \ 'input:datetime-local': [{'type': 'datetime-local'}, {'name': ''}, {'id': ''}], \ 'input:month': [{'type': 'month'}, {'name': ''}, {'id': ''}], \ 'input:week': [{'type': 'week'}, {'name': ''}, {'id': ''}], \ 'input:time': [{'type': 'time'}, {'name': ''}, {'id': ''}], \ 'input:number': [{'type': 'number'}, {'name': ''}, {'id': ''}], \ 'input:color': [{'type': 'color'}, {'name': ''}, {'id': ''}], \ 'input:checkbox': [{'type': 'checkbox'}, {'name': ''}, {'id': ''}], \ 'input:c': [{'type': 'checkbox'}, {'name': ''}, {'id': ''}], \ 'input:radio': [{'type': 'radio'}, {'name': ''}, {'id': ''}], \ 'input:r': [{'type': 'radio'}, {'name': ''}, {'id': ''}], \ 'input:range': [{'type': 'range'}, {'name': ''}, {'id': ''}], \ 'input:file': [{'type': 'file'}, {'name': ''}, {'id': ''}], \ 'input:f': [{'type': 'file'}, {'name': ''}, {'id': ''}], \ 'input:submit': [{'type': 'submit'}, {'value': ''}], \ 'input:s': [{'type': 'submit'}, {'value': ''}], \ 'input:image': [{'type': 'image'}, {'src': ''}, {'alt': ''}], \ 'input:i': [{'type': 'image'}, {'src': ''}, {'alt': ''}], \ 'input:reset': [{'type': 'reset'}, {'value': ''}], \ 'input:button': [{'type': 'button'}, {'value': ''}], \ 'input:b': [{'type': 'button'}, {'value': ''}], \ 'select': [{'name': ''}, {'id': ''}], \ 'option': {'value': ''}, \ 'textarea': [{'name': ''}, {'id': ''}, {'cols': '30'}, {'rows': '10'}], \ 'menu:context': {'type': 'context'}, \ 'menu:c': {'type': 'context'}, \ 'menu:toolbar': {'type': 'toolbar'}, \ 'menu:t': {'type': 'toolbar'}, \ 'video': {'src': ''}, \ 'audio': {'src': ''}, \ 'html:xml': [{'xmlns': 'http://www.w3.org/1999/xhtml'}, {'xml:lang': '${lang}'}], \ }, \ 'aliases': { \ 'link:*': 'link', \ 'meta:*': 'meta', \ 'area:*': 'area', \ 'bdo:*': 'bdo', \ 'form:*': 'form', \ 'input:*': 'input', \ 'script:*': 'script', \ 'html:*': 'html', \ 'a:*': 'a', \ 'menu:*': 'menu', \ 'bq': 'blockquote', \ 'acr': 'acronym', \ 'fig': 'figure', \ 'ifr': 'iframe', \ 'emb': 'embed', \ 'obj': 'object', \ 'src': 'source', \ 'cap': 'caption', \ 'colg': 'colgroup', \ 'fst': 'fieldset', \ 'btn': 'button', \ 'optg': 'optgroup', \ 'opt': 'option', \ 'tarea': 'textarea', \ 'leg': 'legend', \ 'sect': 'section', \ 'art': 'article', \ 'hdr': 'header', \ 'ftr': 'footer', \ 'adr': 'address', \ 'dlg': 'dialog', \ 'str': 'strong', \ 'sty': 'style', \ 'prog': 'progress', \ 'fset': 'fieldset', \ 'datag': 'datagrid', \ 'datal': 'datalist', \ 'kg': 'keygen', \ 'out': 'output', \ 'det': 'details', \ 'cmd': 'command', \ }, \ 'expandos': { \ 'ol': 'ol>li', \ 'ul': 'ul>li', \ 'dl': 'dl>dt+dd', \ 'map': 'map>area', \ 'table': 'table>tr>td', \ 'colgroup': 'colgroup>col', \ 'colg': 'colgroup>col', \ 'tr': 'tr>td', \ 'select': 'select>option', \ 'optgroup': 'optgroup>option', \ 'optg': 'optgroup>option', \ }, \ 'empty_elements': 'area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,keygen,command', \ 'block_elements': 'address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,link,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul,h1,h2,h3,h4,h5,h6', \ 'inline_elements': 'a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var', \ 'empty_element_suffix': g:emmet_html5 ? '>' : ' />', \ }, \ 'htmldjango': { \ 'extends': 'html', \ }, \ 'html.django_template': { \ 'extends': 'html', \ }, \ 'xsl': { \ 'extends': 'html', \ 'default_attributes': { \ 'tmatch': [{'match': ''}, {'mode': ''}], \ 'tname': [{'name': ''}], \ 'xsl:when': {'test': ''}, \ 'var': [{'name': ''}, {'select': ''}], \ 'vari': {'name': ''}, \ 'if': {'test': ''}, \ 'call': {'name': ''}, \ 'attr': {'name': ''}, \ 'wp': [{'name': ''}, {'select': ''}], \ 'par': [{'name': ''}, {'select': ''}], \ 'val': {'select': ''}, \ 'co': {'select': ''}, \ 'each': {'select': ''}, \ 'ap': [{'select': ''}, {'mode': ''}] \ }, \ 'aliases': { \ 'tmatch': 'xsl:template', \ 'tname': 'xsl:template', \ 'var': 'xsl:variable', \ 'vari': 'xsl:variable', \ 'if': 'xsl:if', \ 'choose': 'xsl:choose', \ 'call': 'xsl:call-template', \ 'wp': 'xsl:with-param', \ 'par': 'xsl:param', \ 'val': 'xsl:value-of', \ 'attr': 'xsl:attribute', \ 'co' : 'xsl:copy-of', \ 'each' : 'xsl:for-each', \ 'ap' : 'xsl:apply-templates', \ }, \ 'expandos': { \ 'choose': 'xsl:choose>xsl:when+xsl:otherwise', \ } \ }, \ 'xslt': { \ 'extends': 'xsl', \ }, \ 'haml': { \ 'indentation': ' ', \ 'extends': 'html', \ 'snippets': { \ 'html:5': "!!! 5\n" \ ."%html{:lang => \"${lang}\"}\n" \ ."\t%head\n" \ ."\t\t%meta{:charset => \"${charset}\"}\n" \ ."\t\t%title\n" \ ."\t%body\n" \ ."\t\t${child}|\n", \ }, \ }, \ 'slim': { \ 'indentation': ' ', \ 'extends': 'html', \ 'snippets': { \ 'html:5': "doctype 5\n" \ ."html lang=\"${lang}\"\n" \ ."\thead\n" \ ."\t\tmeta charset=\"${charset}\"\n" \ ."\t\ttitle\n" \ ."\tbody\n" \ ."\t\t${child}|\n", \ }, \ }, \ 'xhtml': { \ 'extends': 'html' \ }, \ 'mustache': { \ 'extends': 'html' \ }, \ 'xsd': { \ 'extends': 'html', \ 'snippets': { \ 'xsd:w3c': "\n" \ ."\n" \ ."\t\n" \ ."\n" \ } \ } \} if exists('g:user_emmet_settings') call emmet#mergeConfig(s:emmet_settings, g:user_emmet_settings) endif let &cpo = s:save_cpo unlet s:save_cpo " vim:set et: ================================================ FILE: .vim/bundle/emmet-vim/doc/emmet.txt ================================================ *emmet.txt* Emmet for Vim ------------------------------------------------------- Emmet: vim plugins for HTML and CSS hi-speed coding ------------------------------------------------------- Author: Yasuhiro Matsumoto WebSite: http://mattn.kaoriya.net/ Repository: http://github.com/mattn/emmet-vim Site: http://mattn.github.com/emmet-vim License: BSD style license ============================================================================== CONTENTS *emmet-contents* Introduction |emmet-introduction| Install |emmet-install| Tutorial |emmet-tutorial| 1. Expand Abbreviation |emmet-expandabbr| 2. Wrap with Abbreviation |emmet-wrap-with-abbreviation| 3. Balance Tag Inward |emmet-balance-tag-inward| 4. Balance Tag Outward |emmet-balance-tag-outward| 5. Go to Next Edit Point |emmet-goto-next-point| |n| 6. Go to Previous Edit Point |emmet-goto-previous-point| 7. Update Size |emmet-update-image-size| 8. Merge Lines |emmet-merge-lines| 9. Remove Tag |emmet-remove-tag| 10. Split/Join Tag |emmet-split-join-tag| 11. Toggle Comment |emmet-toggle-comment| 12. Make anchor from URL |emmet-make-anchor-url| 13. Make quoted text from URL |emmet-quoted-text-url| 14. Code Pretty |emmet-code-pretty| 15. Lorem Ipsum |emmet-lorem-ipsum| Customize |emmet-customize| 1. Key Mappings |emmet-customize-keymappings| 2. Indent Size |emmet-indent-size| 3. Define Tag's Behavior |emmet-define-tags-behavior| 4. Complete Tag |emmet-complete-tag| Links |emmet-links| ToDo |emmet-todo| ============================================================================== INTRODUCTION *emmet-introduction* *emmet* |Emmet| is an editor plugin for high-speed HTML, XML, XSL (or any other structured code format) coding and editing. The core of this plugin is a powerful abbreviation engine which allows you to expand expressions?similar to CSS selectors?into HTML code: > div#page>div.logo+ul#navigation>li*5>a < ...can be expanded into: >

< Read more about current Emmet syntax http://docs.emmet.io/abbreviations/ Abbreviation engine has a modular structure which allows you to expand abbreviations into different languages. Emmet currently supports CSS, HTML, XML/XSL and HAML, Slim languages via filters. ============================================================================== INSTALL *emmet-install* Install the distributed files into Vim runtime directory which is usually ~/.vim/, or $HOME/vimfiles on Windows. If you install pathogen that provided from Tim Pope, you should extract the file into 'bundle' directory. ============================================================================== TUTORIAL *emmet-tutorial* If you are seeing this file as :help, then you can't edit this file. You should copy this section and create new buffer, paste and write as 'emmet-tutor.txt'. Formally, open the file to start tutorial. 1. Expand Abbreviation *emmet-expandabbr* *,* Type abbreviation as 'div>p#foo$*3>a' and type |,|. >

< 2. Wrap with Abbreviation *emmet-wrap-with-abbreviation* *v_,* Write as below. > test1 test2 test3 < Then do visual select(line wise) and type |,|. If you request 'Tag:', then type 'ul>li*'. >
  • test1
  • test2
  • test3
< If you type tag as 'blockquote', then you'll see as following. >
test1 test2 test3
< 3. Balance Tag Inward *emmet-balance-tag-inward* *d* To select inward of ul tag, type |d| in insert mode. >
    *
< If cursor is at '*', |d| select from begin of
    to end of
. If cursor is at first of
  • , it select
  • . 4. Balance Tag Outward *emmet-balance-tag-outward* *D* To select outward of ul tag, insert mode, type D in insert mode. >
      *
    < If cursor is at '*', |D| select from next letter of
      to previous letter of
    . If cursor is at first of
  • , it select
  • . 5. Go to Next Edit Point *emmet-goto-next-point* *n* To jump next point that need to edit, type |n| in insert mode. > *
    foo
    < If cursor is at '*', |n| move a cursor into attribute value of div specified id as 'foo'. And type again |n| move a cursor into inner of div specified id as 'bar'. 6. Go to Previous Edit Point *emmet-goto-previous-point* *N* To jump previous point that need to edit, type |N| in insert mode. >
    foo
    * < If cursor is at '*', |N| move a cursor into div specified id as 'bar'. And type again |N| move a cursor into attribute value of 'foo'. 7. Update Size *emmet-update-image-size* *i* To expand or update size of image, type |i| on img tag > < Type 'i' on img tag > < If you change image, then type it again. it will be following. > < 8. Merge Lines *emmet-merge-lines* To join multi line text like following, type |J|. >
    < If you select part of line include
  • and type |m|, it will be following. >
    < 9. Remove Tag *emmet-remove-tag* *k* To remove tag in the block, type |k|. > < Type |k| in insert mode, then >
    < And type |k| in there again, then div will be removed. 10. Split/Join Tag *emmet-split-join-tag* *j* To join block, type |j|. >
    cursor is here
    < Type |j| in insert mode. Then, >
    < And type |j| in there again. >
    < 11. Toggle Comment *emmet-toggle-comment* */* Move cursor to block >
    hello world
    < Type '/' in insert mode. > < Type '/' in there again. >
    hello world
    < 12. Make anchor from URL *emmet-make-anchor-url* *a* Move cursor to URL > http://www.google.com/ < Type |a| > Google < 13. Make quoted text from URL *emmet-quoted-text-url* *A* Move cursor to URL > http://github.com/ < Type |A| >
    Secure source code hosting and collaborative development - GitHub

    How does it work? Get up and running in seconds by forking a project, pushing an existing repository...

    http://github.com/
    < 14. Code Pretty *emmet-code-pretty* *c* Select code block, for example select following code from "int main()". >

    Writing in C language

    int main() { puts("hello world"); } < Type |c| > int main() {
      puts("hello world");
    }
    < 15. Lorem Ipsum *emmet-lorem-ipsum* To insert dummy text. > lorem < Type |,| >
    Adipisicing asperiores deleniti ipsum fuga deserunt perferendis molestiae sunt excepturi aut quo nihil! Optio accusantium corporis molestiae deserunt ab, veritatis commodi. Eius nobis ab deserunt magni iure quo laboriosam laboriosam.
    < For japanese user, put like follow into your g:user_emmet_settings: > let g:user_emmet_settings = { ... \ 'custom_expands1' : { \ '^\%(lorem\|lipsum\)\(\d*\)$' : function('emmet#lorem#ja#expand'), \ }, ... < You will get japanese dummy text. > ============================================================================== CUSTOMIZE *emmet-customize* 1. Key Mapping *emmet-customize-keymappings* To specify leading key for expanding or balance tag, or for all, Add this line in your vimrc: > > let g:user_emmet_leader_key = '' < Or if you prefer to map for each actions, then you set each variables. 'user_emmet_expandabbr_key' 'user_emmet_expandword_key' 'user_emmet_balancetaginward_key' 'user_emmet_balancetagoutward_key' 'user_emmet_next_key' 'user_emmet_prev_key' 'user_emmet_imagesize_key' 'user_emmet_togglecomment_key' 'user_emmet_splitjointag_key' 'user_emmet_removetag_key' 'user_emmet_anchorizeurl_key' 'user_emmet_anchorizesummary_key' Or if you want to use mappings EmmetExpandAbbr EmmetExpandWord EmmetBalanceTagInward EmmetBalanceTagOutward EmmetMoveNext EmmetMovePrev EmmetImageSize EmmetToggleComment EmmetSplitJoinTag EmmetRemoveTag EmmetAnchorizeURL EmmetAnchorizeSummary EmmetMergeLines EmmetCodePretty So you can make the mapping affected only for a filetype you want. > autocmd FileType css imap (EmmetExpandAbbr) < 2. Indent Size *emmet-indent-size* To change indent size of html, add this code in your vimrc. > let g:user_emmet_settings = { \ 'html' : { \ 'indentation' : ' ' \ }, \} < If you prefer to change global indent size then add this. > let g:user_emmet_settings = { \ 'indentation' : ' ' \} < 3. Define Tag's Behavior *emmet-define-tags-behavior* Emmet.vim can change behavior of expanding abbreviation for each filetypes as |Dictionary|. For details, see official site of Emmet. for example, vimmer can add following. > let g:user_emmet_settings = { \ 'lang' : 'ja', \ 'html' : { \ 'filters' : 'html', \ 'indentation' : ' ' \ }, \ 'perl' : { \ 'indentation' : ' ', \ 'aliases' : { \ 'req' : "require '|'" \ }, \ 'snippets' : { \ 'use' : "use strict\nuse warnings\n\n", \ 'w' : "warn \"${cursor}\";", \ }, \ }, \ 'php' : { \ 'extends' : 'html', \ 'filters' : 'html,c', \ }, \ 'css' : { \ 'filters' : 'fc', \ }, \ 'javascript' : { \ 'snippets' : { \ 'jq' : "$(function() {\n\t${cursor}${child}\n});", \ 'jq:each' : "$.each(arr, function(index, item)\n\t${child}\n});", \ 'fn' : "(function() {\n\t${cursor}\n})();", \ 'tm' : "setTimeout(function() {\n\t${cursor}\n}, 100);", \ }, \ }, \ 'java' : { \ 'indentation' : ' ', \ 'snippets' : { \ 'main': "public static void main(String[] args) {\n\t|\n}", \ 'println': "System.out.println(\"|\");", \ 'class': "public class | {\n}\n", \ }, \ }, \} < 4. Complete Tag *emmet-complete-tag* If you want to complete tags using |omnifunc| then add this. > let g:use_emmet_complete_tag = 1 < 5. Enable functions in different mode If you want to use Emmet only in some modes, set an mode option: let g:user_emmet_mode='n' "only enable normal mode functions, or let g:user_emmet_mode='inv' "enable all functions, which is equal to let g:user_emmet_mode='a' "enable all function in all mode. ============================================================================== LINKS *emmet-links* Emmet official site: http://emmet.io/ zen-coding official site: http://code.google.com/p/zen-coding/ zen-coding official site: http://code.google.com/p/zen-coding/ zencoding.vim: http://mattn.github.com/zencoding-vim development repository: https://github.com/mattn/zencoding-vim my blog posts about zencoding-vim: http://mattn.kaoriya.net/software/vim/20100222103327.htm http://mattn.kaoriya.net/software/vim/20100306021632.htm Japanese blog posts about zencoding-vim: http://d.hatena.ne.jp/idesaku/20100424/1272092255 http://d.hatena.ne.jp/griefworker/20110118/vim_zen_coding http://d.hatena.ne.jp/sakurako_s/20110126/1295988873 http://looxu.blogspot.jp/2010/02/zencodingvimhtml.html tutorial translated in Chinese: http://www.zfanw.com/blog/zencoding-vim-tutorial-chinese.html ============================================================================== TODO *emmet-todo* * wrapping inline selected. * more documents. * more contributor. * more time to improve emmet.vim. ============================================================================== vim:tw=78:ts=8:ft=help:norl:noet:fen:fdl=0: ================================================ FILE: .vim/bundle/emmet-vim/emmet.vim.vimup ================================================ script_name: Emmet.vim script_id: '2981' script_type: utility script_package: emmet-vim.zip script_version: '0.83' required_vim_version: '7.0' summary: vim plugins for HTML and CSS hi-speed coding. detailed_description: | This is vim script support expanding abbreviation like emmet. ref: http://emmet.io/ There is a movie using emmet.vim ref: http://mattn.github.com/emmet-vim Source Repository. ref: http://github.com/mattn/emmet-vim Type abbreviation +------------------------------------- | html:5_ +------------------------------------- "_" is a cursor position. and type "," (Ctrl + y and Comma) NOTE: Don't worry about key map. you can change it easily. +------------------------------------- | | | | | | | | _ | | +------------------------------------- Type following +------------------------------------- | div#foo$*2>div.bar +------------------------------------- And type "," +------------------------------------- |
    |
    _
    |
    |
    |
    |
    | _ +------------------------------------- Tutorial: http://github.com/mattn/emmet-vim/raw/master/TUTORIAL How work this: http://mattn.github.com/emmet-vim Tips: You can customize behavior of expanding with overriding config. This configuration will be merged at loading plugin. let g:user_emmet_settings = { \ 'indentation' : ' ', \ 'perl' : { \ 'aliases' : { \ 'req' : 'require ' \ }, \ 'snippets' : { \ 'use' : "use strict\nuse warnings\n\n", \ 'warn' : "warn \"|\";", \ } \ } \} let g:user_emmet_expandabbr_key = '' let g:use_emmet_complete_tag = 1 You can set language attribute in html using emmet_settings['lang']. install_details: | # cd ~/.vim # unzip emmet-vim.zip or if you install pathogen.vim: # cd ~/.vim/bundle # or make directory # unzip /path/to/emmet-vim.zip if you get sources from repository: # cd ~/.vim/bundle # or make directory # git clone http://github.com/mattn/emmet-vim.git versions: - '0.83': | This is an upgrade for Emmet.vim: lot of bug fixes. - '0.82': | This is an upgrade for Emmet.vim: many bug fixes. - '0.81': | Release of Emmet.vim: renamed from ZenCoding.vim. - '0.80': | This is an upgrade for ZenCoding.vim: add emmet features. - '0.74': | This is an upgrade for ZenCoding.vim: many bug fixes. - '0.73': | This is an upgrade for ZenCoding.vim: many bug fixes. and support slim format (experimental). - '0.72': | This is an upgrade for ZenCoding.vim: [fix] fix finding tokens. - '0.71': | This is an upgrade for ZenCoding.vim: [fix] fix finding begin of tokens. - '0.70': | This is an upgrade for ZenCoding.vim: [mod] Changed behavior of expanding. "div div>a|" should keep first div element. [add] Supported slim formatter. - '0.60': | This is an upgrade for ZenCoding.vim: [fix] fixed expanding {{}}. - '0.59': | This is an upgrade for ZenCoding.vim: [fix] fixed toggleComment and mny bugs. - '0.58': | This is an upgrade for ZenCoding.vim: [fix] fixed 'foo+' style expandos. - '0.57': | This is an upgrade for ZenCoding.vim: [fix] fixed expandos that don't work 'choose' in xsl. - '0.56': | This is an upgrade for ZenCoding.vim: [fix] fixed contents parser. - '0.55': | uploaded again: sorry, files was old. - '0.54': | [add] support sass, xsd. [fix] expanding with html tag. uploaded again: sorry, fileformat was DOS. - '0.53': | [fix] gif width/height was swapped. - '0.52': | [fix] broken wrap expanding. - '0.51': | This is an upgrade for ZenCoding.vim: [fix] wrap expanding with '&'. [fix] expand .content to class="content". [fix] haml expanding. [fix] bg+ snippet - '0.50': | This is an upgrade for ZenCoding.vim: [fix] fixed parsing '#{{foo}}' and '.{{bar}}'. - '0.49': | This is an upgrade for ZenCoding.vim: [doc] add help manual. - '0.48': | This is an upgrade for ZenCoding.vim: [fix] install mappings to global. - '0.47': | This is an upgrade for ZenCoding.vim: [drastic changes] enable autoload. you should whole replace older files. package was empty. upload again. - '0.46': | This is an upgrade for ZenCoding.vim: [drastic changes] enable autoload. you should whole replace older files. - '0.45': | This is an upgrade for ZenCoding.vim: fixed attribute parsing like: a[href="hello', world" rel]. - '0.44': | This is an upgrade for ZenCoding.vim: fixed checking whether have mapping using maparg() / hasmapto(). - '0.43': | This is an upgrade for ZenCoding.vim: fixed behavior for nested block. like "html:5>#page>(header#globalHeader>(hgroup>h1+h2)+(nav>ul>li*3>a)+(form>p.siteSearch>input+input[type=button]))+(#contents>(#main>(section>h2+p*5)+p.pagetop>a[href=#page])+(#sub>p+(nav>ul>li>a)))+(footer#globalFoooter>(ul>li>a)+(p.copyright>small))" - '0.42': | This is an upgrade for ZenCoding.vim: fixed select/option indent. - '0.41': | This is an upgrade for ZenCoding.vim: fixed default filter. when using 'e' filter, output become empty. - '0.40': | This is an upgrade for ZenCoding.vim: add the pure vimscript code for 'get image size'. you can use it without perl interface just now. change key assign of ZenCodingExpandWord from ',' to ';'. it don't effect to most users. - '0.39': | This is an upgrade for ZenCoding.vim: fixed problem about 'selection'. see http://github.com/mattn/zencoding-vim/issues/#issue/2 - '0.38': | This is an upgrade for ZenCoding.vim: use v7h"_s instead of v7hs for backspace. - '0.37': | This is an upgrade for ZenCoding.vim: fixed problem that won't working with some 'backspace' options. - '0.36': | This is an upgrade for ZenCoding.vim: fixed problem that filter does not work. - '0.35': | This is an upgrade for ZenCoding.vim: enable zencoding for other languages. (meaning php also) - '0.34': | This is an upgrade for ZenCoding.vim: enable zencoding for xsl. (you should add ~/.vim/ftplugin/xslt/zencoding.vim) - '0.33': | This is an upgrade for ZenCoding.vim: fixed problem breaking multibyte when cursor is in a part of line. enabled zencoding for javascript in html. - '0.32': | This is an upgrade for ZenCoding.vim: fixed indentation. supported extends so that you can enable zencoding for php/xhtml/haml other's section 14 in http://github.com/mattn/zencoding-vim/raw/master/TUTORIAL - '0.31': | This is an upgrade for ZenCoding.vim: fixed indentation and $$$ problem. fixed about missing support multiple classes. - '0.30': | This is an upgrade for ZenCoding.vim: Fixed key assign. - '0.29': | This is an upgrade for ZenCoding.vim: Changed leading key to '' from ''. - '0.28': | This is an upgrade for ZenCoding.vim: supported 'Balance Tag Inward/Outward', 'Go to Next/Previous Edit Point', 'Update Size', 'Remove Tag', 'Split/Join Tag', 'Toggle Comment' - '0.27': | This is an upgrade for ZenCoding.vim: fixed problem that can't work on the part of multibyte characters. fixed inline elements behavior. - '0.26': | This is an upgrade for ZenCoding.vim: The count of '(((a#foo + a#bar)*2)*3)' should be 12. - '0.25': | This is an upgrade for ZenCoding.vim: store undo before working. good luck about 'table>(tr>td*3)*4'. - '0.24': | This is an upgrade for ZenCoding.vim: fixed behavior of parsing area of visual selection. - '0.23': | This is an upgrade for ZenCoding.vim: pre-expand '#header>li<#content' to 'div#header>lili'. fix undo ring. support visual selection. when type trigger key on visual select, it request you leader like 'ul>li'. if you give 'ul>li*' as leader, you'll get each separate 'ul>li' tags. and when you give 'blockquote' as leader, you'll get blocked text. - '0.21': | This is an upgrade for ZenCoding.vim: treat xhtml as html. - '0.20': | This is an upgrade for ZenCoding.vim: add option use_zen_complete_tag for complete abbr. - '0.19': | This is an upgrade for ZenCoding.vim: fixed problem that couldn't expand 'link:css' correctly. - '0.18': | This is an upgrade for ZenCoding.vim: ignore duplicate key map. - '0.17': | This is an upgrade for ZenCoding.vim: fixed key map. - '0.16': | This is an upgrade for ZenCoding.vim: fixed problem 'endless loop'. - '0.15': | This is an upgrade for ZenCoding.vim: set default filetype to 'html'. - '0.14': | This is an upgrade for ZenCoding.vim: fixed tag name like 'fs:n' in 'css'. - '0.14': | This is an upgrade for ZenCoding.vim: indentation for each languages. - '0.13': | This is an upgrade for ZenCoding.vim: user key map. - '0.12': | This is an upgrade for ZenCoding.vim: few extensive notation. - '0.11': | This is an upgrade for ZenCoding.vim: fixed indent. - '0.10': | This is an upgrade for ZenCoding.vim: fixed behavior of '+' operator - '0.9': | This is an upgrade for ZenCoding.vim: fixed single line behavior - '0.8': | This is an upgrade for ZenCoding.vim: support 'a[href=http://www.google.com]{Google}' - '0.7': | This is an upgrade for ZenCoding.vim: fixed behavior in 'a+b'. - '0.6': | This is an upgrade for ZenCoding.vim: fixed strange behavior about 'b_'. - '0.5': | This is an upgrade for ZenCoding.vim: recover rest part in line. - '0.4': | This is an upgrade for ZenCoding.vim: fixed cursor position. fixed ${lang} replacement. - '0.3': | This is an upgrade for ZenCoding.vim: fixed line expanding. - '0.2': | This is an upgrade for ZenCoding.vim: fixed problem that moving cursor with expanding. - '0.1': | Initial upload # __END__ # vim: filetype=yaml ================================================ FILE: .vim/bundle/emmet-vim/plugin/emmet.vim ================================================ "============================================================================= " File: emmet.vim " Author: Yasuhiro Matsumoto " Last Change: 28-Nov-2013. " Version: 0.83 " WebPage: http://github.com/mattn/emmet-vim " Description: vim plugins for HTML and CSS hi-speed coding. " SeeAlso: http://emmet.io/ " Usage: " " This is vim script support expanding abbreviation like emmet. " ref: http://emmet.io/ " " Type abbreviation " +------------------------------------- " | html:5_ " +------------------------------------- " "_" is a cursor position. and type "," (Ctrl+y and Comma) " NOTE: Don't worry about key map. you can change it easily. " +------------------------------------- " | " | " | " | " | " | " | " | _ " | " | " +------------------------------------- " Type following " +------------------------------------- " | div#foo$*2>div.bar " +------------------------------------- " And type "," " +------------------------------------- " |
    " |
    _
    " |
    " |
    " |
    " |
    " +------------------------------------- " " Tips: " " You can customize behavior of expanding with overriding config. " This configuration will be marged at loading plugin. " " let g:user_emmet_settings = { " \ 'indentation' : ' ', " \ 'perl' : { " \ 'aliases' : { " \ 'req' : 'require ' " \ }, " \ 'snippets' : { " \ 'use' : "use strict\nuse warnings\n\n", " \ 'warn' : "warn \"|\";", " \ } " \ } " \} " " You can set language attribute in html using 'emmet_settings.lang'. " " GetLatestVimScripts: 2981 1 :AutoInstall: emmet.vim " script type: plugin if &cp || v:version < 702 || (exists('g:loaded_emmet_vim') && g:loaded_emmet_vim) finish endif let g:loaded_emmet_vim = 1 let s:save_cpo = &cpo set cpo&vim if !exists('g:emmet_html5') let g:emmet_html5 = 1 endif if !exists('g:emmet_docroot') let g:emmet_docroot = {} endif if !exists('g:emmet_debug') let g:emmet_debug = 0 endif if !exists('g:emmet_curl_command') let g:emmet_curl_command = 'curl -s -L -A Mozilla/5.0' endif if exists('g:user_emmet_complete_tag') && g:user_emmet_complete_tag setlocal omnifunc=emmet#completeTag endif if !exists('g:user_emmet_leader_key') let g:user_emmet_leader_key = '' endif function! s:install_plugin(mode, buffer) let buffer = a:buffer ? '' : '' for item in [ \ {'mode': 'i', 'var': 'user_emmet_expandabbr_key', 'key': ',', 'plug': 'EmmetExpandAbbr', 'func': '=emmet#util#closePopup()=emmet#expandAbbr(0,"")'}, \ {'mode': 'n', 'var': 'user_emmet_expandabbr_key', 'key': ',', 'plug': 'EmmetExpandAbbr', 'func': ':call emmet#expandAbbr(3,"")'}, \ {'mode': 'v', 'var': 'user_emmet_expandabbr_key', 'key': ',', 'plug': 'EmmetExpandAbbr', 'func': ':call emmet#expandAbbr(2,"")'}, \ {'mode': 'i', 'var': 'user_emmet_expandword_key', 'key': ';', 'plug': 'EmmetExpandWord', 'func': '=emmet#util#closePopup()=emmet#expandAbbr(1,"")'}, \ {'mode': 'n', 'var': 'user_emmet_expandword_key', 'key': ';', 'plug': 'EmmetExpandWord', 'func': ':call emmet#expandAbbr(1,"")'}, \ {'mode': 'i', 'var': 'user_emmet_balancetaginward_key', 'key': 'd', 'plug': 'EmmetBalanceTagInward', 'func': ':call emmet#balanceTag(1)'}, \ {'mode': 'n', 'var': 'user_emmet_balancetaginward_key', 'key': 'd', 'plug': 'EmmetBalanceTagInward', 'func': ':call emmet#balanceTag(1)'}, \ {'mode': 'v', 'var': 'user_emmet_balancetaginward_key', 'key': 'd', 'plug': 'EmmetBalanceTagInward', 'func': ':call emmet#balanceTag(2)'}, \ {'mode': 'i', 'var': 'user_emmet_balancetagoutward_key', 'key': 'D', 'plug': 'EmmetBalanceTagOutward', 'func': ':call emmet#balanceTag(-1)'}, \ {'mode': 'n', 'var': 'user_emmet_balancetagoutward_key', 'key': 'D', 'plug': 'EmmetBalanceTagOutward', 'func': ':call emmet#balanceTag(-1)'}, \ {'mode': 'v', 'var': 'user_emmet_balancetagoutward_key', 'key': 'D', 'plug': 'EmmetBalanceTagOutward', 'func': ':call emmet#balanceTag(-2)'}, \ {'mode': 'i', 'var': 'user_emmet_next_key', 'key': 'n', 'plug': 'EmmetMoveNext', 'func': ':call emmet#moveNextPrev(0)'}, \ {'mode': 'n', 'var': 'user_emmet_next_key', 'key': 'n', 'plug': 'EmmetMoveNext', 'func': ':call emmet#moveNextPrev(0)'}, \ {'mode': 'i', 'var': 'user_emmet_prev_key', 'key': 'N', 'plug': 'EmmetMovePrev', 'func': ':call emmet#moveNextPrev(1)'}, \ {'mode': 'n', 'var': 'user_emmet_prev_key', 'key': 'N', 'plug': 'EmmetMovePrev', 'func': ':call emmet#moveNextPrev(1)'}, \ {'mode': 'i', 'var': 'user_emmet_imagesize_key', 'key': 'i', 'plug': 'EmmetImageSize', 'func': '=emmet#util#closePopup()=emmet#imageSize()'}, \ {'mode': 'n', 'var': 'user_emmet_imagesize_key', 'key': 'i', 'plug': 'EmmetImageSize', 'func': ':call emmet#imageSize()'}, \ {'mode': 'i', 'var': 'user_emmet_togglecomment_key', 'key': '/', 'plug': 'EmmetToggleComment', 'func': '=emmet#util#closePopup()=emmet#toggleComment()'}, \ {'mode': 'n', 'var': 'user_emmet_togglecomment_key', 'key': '/', 'plug': 'EmmetToggleComment', 'func': ':call emmet#toggleComment()'}, \ {'mode': 'i', 'var': 'user_emmet_splitjointag_key', 'key': 'j', 'plug': 'EmmetSplitJoinTag', 'func': ':call emmet#splitJoinTag()'}, \ {'mode': 'n', 'var': 'user_emmet_splitjointag_key', 'key': 'j', 'plug': 'EmmetSplitJoinTag', 'func': ':call emmet#splitJoinTag()'}, \ {'mode': 'i', 'var': 'user_emmet_removetag_key', 'key': 'k', 'plug': 'EmmetRemoveTag', 'func': '=emmet#util#closePopup()=emmet#removeTag()'}, \ {'mode': 'n', 'var': 'user_emmet_removetag_key', 'key': 'k', 'plug': 'EmmetRemoveTag', 'func': ':call emmet#removeTag()'}, \ {'mode': 'i', 'var': 'user_emmet_anchorizeurl_key', 'key': 'a', 'plug': 'EmmetAnchorizeURL', 'func': '=emmet#util#closePopup()=emmet#anchorizeURL(0)'}, \ {'mode': 'n', 'var': 'user_emmet_anchorizeurl_key', 'key': 'a', 'plug': 'EmmetAnchorizeURL', 'func': ':call emmet#anchorizeURL(0)'}, \ {'mode': 'i', 'var': 'user_emmet_anchorizesummary_key', 'key': 'A', 'plug': 'EmmetAnchorizeSummary', 'func': '=emmet#util#closePopup()=emmet#anchorizeURL(1)'}, \ {'mode': 'n', 'var': 'user_emmet_anchorizesummary_key', 'key': 'A', 'plug': 'EmmetAnchorizeSummary', 'func': ':call emmet#anchorizeURL(1)'}, \ {'mode': 'v', 'var': 'user_emmet_mergelines_key', 'key': 'm', 'plug': 'EmmetMergeLines', 'func': ':call emmet#mergeLines()'}, \ {'mode': 'v', 'var': 'user_emmet_codepretty_key', 'key': 'c', 'plug': 'EmmetCodePretty', 'func': ':call emmet#codePretty()'}, \] if a:mode != 'a' && stridx(a:mode, item.mode) == -1 continue endif if !hasmapto('(' . item.plug . ')', item.mode) exe item.mode . 'noremap '. buffer .' (' . item.plug . ') ' . item.func endif if exists('g:' . item.var) let key = eval('g:' . item.var) else let key = g:user_emmet_leader_key . item.key endif if len(maparg(key, item.mode)) == 0 exe item.mode . 'map ' . buffer . ' ' . key . ' (' . item.plug . ')' endif endfor endfunction command! -nargs=0 EmmetInstall call install_plugin(get(g:, 'user_emmet_mode', 'a'), 1) if get(g:, 'user_emmet_install_global', 1) call s:install_plugin(get(g:, 'user_emmet_mode', 'a'), 0) endif if get(g:, 'user_emmet_install_command', 1) command! -nargs=1 Emmet call emmet#expandAbbr(4, ) endif let &cpo = s:save_cpo unlet s:save_cpo " vim:set et: ================================================ FILE: .vim/bundle/emmet-vim/unittest.vim ================================================ " {{{ let s:sfile = expand('') function! s:reload(d) exe "so" a:d."/plugin/emmet.vim" for f in split(globpath(a:d, 'autoload/**/*.vim'), "\n") silent! exe "so" f endfor endfunction function! s:show_type(type) echohl Search | echon "[" a:type "]\n" | echohl None echo "\r" endfunction function! s:show_category(category) echohl MatchParen | echon "[" a:category "]\n" | echohl None echo "\r" endfunction function! s:show_pass(pass) echohl Title | echo "pass".a:pass."\n" | echohl None endfunction function! s:show_done() echohl IncSearch | echo "done" | echohl None endfunction function! s:escape(str) let str = a:str let str = substitute(str, "\n", '\\n', 'g') let str = substitute(str, "\t", '\\t', 'g') return str endfunction function! s:show_title(no, title) let title = s:escape(a:title) let width = &columns - 23 echohl MoreMsg | echon "\rtesting #".printf("%03d", a:no) echohl None | echon ": " . (len(title) < width ? (title.repeat(' ', width-len(title))) : strpart(title, 0, width)) . ' ... ' endfunction function! s:show_skip(no, title) let title = s:escape(a:title) let width = &columns - 23 echohl WarningMsg | echon "\rskipped #".printf("%03d", a:no) echohl None | echon ": " . (len(title) < width ? (title.repeat(' ', width-len(title))) : strpart(title, 0, width)) . ' ... ' echo "" endfunction function! s:show_ok() echohl Title | echon "ok\n" | echohl None echo "" endfunction function! s:show_ng(no, expect, got) echohl WarningMsg | echon "ng\n" | echohl None echohl ErrorMsg | echo "failed test #".a:no | echohl None set more echohl WarningMsg | echo printf("expect(%d):", len(a:expect)) | echohl None echo join(split(a:expect, "\n", 1), "|\n") echohl WarningMsg | echo printf("got(%d):", len(a:got)) | echohl None echo join(split(a:got, "\n", 1), "|\n") let cs = split(a:expect, '\zs') for c in range(len(cs)) if c < len(a:got) if a:expect[c] != a:got[c] echohl WarningMsg | echo "differ at:" | echohl None echo a:expect[c :-1] break endif endif endfor echo "" throw "stop" endfunction function! s:test(...) let type = get(a:000, 0, '') let name = get(a:000, 1, '') let index = get(a:000, 2, '') let testgroups = eval(join(filter(split(substitute(join(readfile(s:sfile), "\n"), '.*\nfinish\n', '', ''), '\n', 1), "v:val !~ '^\"'"))) for testgroup in testgroups if len(type) > 0 && testgroup.type != type | continue | endif call s:show_type(testgroup.type) for category in testgroup.categories if len(name) > 0 && substitute(category.name,' ','_','g') != name | continue | endif call s:show_category(category.name) let tests = category.tests let start = reltime() for n in range(len(tests)) if len(index) > 0 && n != index | continue | endif let query = tests[n].query let options = has_key(tests[n], 'options') ? tests[n].options : {} let result = tests[n].result if has_key(tests[n], 'skip') && tests[n].skip != 0 call s:show_skip(n+1, query) continue endif let oldoptions = {} for opt in keys(options) if has_key(g:, opt) let oldoptions[opt] = get(g:, opt) endif let g:[opt] = options[opt] endfor if stridx(query, '$$$$') != -1 silent! 1new silent! exe "setlocal ft=".testgroup.type silent! let key = matchstr(query, '.*\$\$\$\$\zs.*\ze\$\$\$\$') if len(key) > 0 exe printf('let key = "%s"', key) else let key = "\," endif silent! let query = substitute(query, '\$\$\$\$.*\$\$\$\$', '$$$$', '') silent! call setline(1, split(query, "\n")) let cmd = "normal gg0/\\$\\$\\$\\$\ri\\\\".key if stridx(result, '$$$$') != -1 let cmd .= '$$$$' endif silent! exe cmd unlet! res | let res = join(getline(1, line('$')), "\n") silent! bw! call s:show_title(n+1, query) else call s:show_title(n+1, query) unlet! res | let res = emmet#expandWord(query, testgroup.type, 0) endif for opt in keys(options) if has_key(oldoptions, opt) let g:[opt] = oldoptions[opt] else call remove(g:, opt) endif endfor if stridx(result, '$$$$') != -1 if res ==# result call s:show_ok() else call s:show_ng(n+1, result, res) endif else if res ==# result call s:show_ok() else call s:show_ng(n+1, result, res) endif endif endfor call s:show_pass(reltimestr(reltime(start))) endfor endfor endfunction function! s:do_tests(...) try if exists('g:user_emmet_settings') let s:old_user_emmet_settings = g:user_emmet_settings endif let g:user_emmet_settings = { 'indentation': "\t" } let oldmore = &more call s:reload(fnamemodify(s:sfile, ':h')) let &more = 0 call call('s:test', a:000) call s:show_done() catch echohl ErrorMsg | echomsg v:exception | echohl None finally let &more=oldmore if exists('s:old_user_emmet_settings') let g:user_emmet_settings = s:old_user_emmet_settings endif endtry endfunction function! g:emmet_unittest_complete(arglead, cmdline, cmdpos) let args = split(a:cmdline, '\s\+', 1) let testgroups = eval(join(filter(split(substitute(join(readfile(s:sfile), "\n"), '.*\nfinish\n', '', ''), '\n', 1), "v:val !~ '^\"'"))) try if len(args) == 2 return filter(map(testgroups, 'v:val.type'), 'stridx(v:val,args[1])!=-1') elseif len(args) == 3 return map(filter(testgroups, 'v:val.type==args[1]')[0].categories, 'substitute(v:val.name," ","_","g")') endif catch endtry return [] endfunction command! -nargs=* -complete=customlist,g:emmet_unittest_complete EmmetUnitTest call s:do_tests() if s:sfile == expand('%:p') EmmetUnitTest endif " }}} finish [ { 'test-html': "{{{", 'type': "html", 'categories': [ { 'name': 'expand abbreviation', 'tests': [ { 'query': "div", 'result': "
    \n", }, { 'query': "div#wrapper", 'result': "
    \n", }, { 'query': "div.box", 'result': "
    \n", }, { 'query': "a[title=TITLE]", 'result': "\n", }, { 'query': "div#wrapper.box", 'result': "
    \n", }, { 'query': "div#wrapper.box.current", 'result': "
    \n", }, { 'query': "div#wrapper.box.current[title=TITLE rel]", 'result': "
    \n", }, { 'query': "div#main+div#sub", 'result': "
    \n
    \n", }, { 'query': "div#main>div#sub", 'result': "
    \n\t
    \n
    \n", }, { 'query': "html:xt>div#header>div#logo+ul#nav>li.item-$*5>a", 'result': "\n\n\n\t\n\t\n\n\n\t
    \n\t\t
    \n\t\t
      \n\t\t\t
    • \n\t\t\t
    • \n\t\t\t
    • \n\t\t\t
    • \n\t\t\t
    • \n\t\t
    \n\t
    \n\t\n\n", }, { 'query': "ol>li*2", 'result': "
      \n\t
    1. \n\t
    2. \n
    \n", }, { 'query': "a", 'result': "\n", }, { 'query': "obj", 'result': "\n", }, { 'query': "cc:ie6>p+blockquote#sample$.so.many.classes*2", 'result': "", }, { 'query': "html:4t>div#wrapper>div#header+div#contents+div#footer", 'result': "\n\n\n\t\n\t\n\n\n\t
    \n\t\t
    \n\t\t
    \n\t\t
    \n\t
    \n\t\n\n", }, { 'query': "a[href=http://www.google.com/].foo#hoge", 'result': "\n", }, { 'query': "a[href=http://www.google.com/]{Google}", 'result': "Google\n", }, { 'query': "{Emmet}", 'result': "Emmet", }, { 'query': "a+b", 'result': "\n\n", }, { 'query': "a>b>i\n", }, { 'query': "a>b>i^b", 'result': "\n", }, { 'query': "a>b>i<\n\n", }, { 'query': "a>b>i^^b", 'result': "\n\n", }, { 'query': "blockquote>b>i<
  • \n\n", }, { 'query': "blockquote>b>i^^b", 'result': "
    \n\n", }, { 'query': "a[href=foo][class=bar]", 'result': "\n", }, { 'query': "a[a=b][b=c=d][e]{foo}*2", 'result': "foo\nfoo\n", }, { 'query': "a[a=b][b=c=d][e]*2{foo}", 'result': "\n\nfoo", }, { 'query': "a*2{foo}a", 'result': "\n\nfoo\n", }, { 'query': "a{foo}*2>b", 'result': "foo\nfoo\n", }, { 'query': "a*2{foo}>b", 'result': "\n\nfoo", }, { 'query': "table>tr>td.name#foo+td*3", 'result': "\n\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\n
    \n", }, { 'query': "div#header + div#footer", 'result': "
    \n
    \n", }, { 'query': "#header + div#footer", 'result': "
    \n
    \n", }, { 'query': "#header > ul > li < p{Footer}", 'result': "
    \n\t
      \n\t\t
    • \n\t
    \n\t

    Footer

    \n
    \n", }, { 'query': "#header > ul > li ^ p{Footer}", 'result': "
    \n\t
      \n\t\t
    • \n\t
    \n\t

    Footer

    \n
    \n", }, { 'query': "a#foo$$$*3", 'result': "\n\n\n", }, { 'query': "ul+", 'result': "
      \n\t
    • \n
    \n", }, { 'query': "table+", 'result': "\n\t\n\t\t\n\t\n
    \n", }, { 'query': "#header>li<#content", 'result': "
    \n\t
  • \n
    \n
    \n", }, { 'query': "#header>li^#content", 'result': "
    \n\t
  • \n
    \n
    \n", }, { 'query': "(#header>li)<#content", 'result': "
    \n\t
  • \n
    \n
    \n", }, { 'query': "(#header>li)^#content", 'result': "
    \n\t
  • \n
    \n
    \n", }, { 'query': "a>b>i<\n
    \n", }, { 'query': "a>b>i^^div", 'result': "\n
    \n", }, { 'query': "(#header>h1)+#content+#footer", 'result': "
    \n\t

    \n
    \n
    \n
    \n", }, { 'query': "(#header>h1)+(#content>(#main>h2+div#entry$.section*5>(h3>a)+div>p*3+ul+)+(#utilities))+(#footer>address)", 'result': "
    \n\t

    \n
    \n
    \n\t
    \n\t\t

    \n\t\t
    \n\t\t\t

    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t
      \n\t\t\t\t\t
    • \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t
      \n\t\t\t\t\t
    • \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t
      \n\t\t\t\t\t
    • \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t
      \n\t\t\t\t\t
    • \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t

    \n\t\t\t\t
      \n\t\t\t\t\t
    • \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t
    \n
    \n
    \n\t
    \n
    \n", }, { 'query': "(div>(ul*2)*2)+(#utilities)", 'result': "
    \n\t
      \n\t
        \n\t
          \n\t
            \n
            \n
            \n", }, { 'query': "table>(tr>td*3)*4", 'result': "\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n
            \n", }, { 'query': "(((a#foo+a#bar)*2)*3)", 'result': "\n\n\n\n\n\n\n\n\n\n\n\n", }, { 'query': "div#box$*3>h3+p*2", 'result': "
            \n\t

            \n\t

            \n\t

            \n
            \n
            \n\t

            \n\t

            \n\t

            \n
            \n
            \n\t

            \n\t

            \n\t

            \n
            \n" }, { 'query': "div#box.foo$$$.bar$$$*3", 'result': "
            \n
            \n
            \n", }, { 'query': "div#box$*3>h3+p.bar*2|e", 'result': "<div id=\"box1\">\n\t<h3></h3>\n\t<p class=\"bar\"></p>\n\t<p class=\"bar\"></p>\n</div>\n<div id=\"box2\">\n\t<h3></h3>\n\t<p class=\"bar\"></p>\n\t<p class=\"bar\"></p>\n</div>\n<div id=\"box3\">\n\t<h3></h3>\n\t<p class=\"bar\"></p>\n\t<p class=\"bar\"></p>\n</div>\n", }, { 'query': "div>div#page>p.title+p|c", 'result': "
            \n\t\n\t
            \n\t\t\n\t\t

            \n\t\t\n\t\t

            \n\t
            \n\t\n
            \n", }, { 'query': "link:css", 'result': "\n", }, { 'query': "a[title=\"Hello', world\" rel]", 'result': "\n", }, { 'query': "div>a#foo{bar}", 'result': "\n", }, { 'query': ".content{Hello!}", 'result': "
            Hello!
            \n", }, { 'query': "div.logo+(div#navigation)+(div#links)", 'result': "
            \n
            \n
            \n", }, { 'query': "h1{header}+{Text}+a[href=http://link.org]{linktext}+{again some text}+a[href=http://anoterlink.org]{click me!}+{some final text}", 'result': "

            header

            \nTextlinktext\nagain some textclick me!\nsome final text", }, { 'query': "a{&}+div{&&}", 'result': "&\n
            &&
            \n", }, { 'query': "span$$$$\\,$$$$", 'result': "", }, { 'query': "foo span$$$$\\,$$$$", 'result': "foo ", }, { 'query': "foo span$$$$\\,$$$$ bar", 'result': "foo bar", }, { 'query': "foo $$$$\\ve\\,p\\$$$$bar baz", 'result': "foo

            bar

            baz", }, { 'query': "foo $$$$\\vee\\,p\\$$$$bar baz", 'result': "foo

            bar baz

            ", }, { 'query': "f div.boxes>article.box2>header>(hgroup>h2{aaa}+h3{bbb})+p{ccc}$$$$", 'result': "f
            \n\t
            \n\t\t
            \n\t\t\t
            \n\t\t\t\t

            aaa

            \n\t\t\t\t

            bbb

            \n\t\t\t
            \n\t\t\t

            ccc

            \n\t\t
            \n\t
            \n
            ", }, { 'query': "div.boxes>(div.box2>section>h2{a}+p{b})+(div.box1>section>h2{c}+p{d}+p{e}+(bq>h2{f}+h3{g})+p{h})", 'result': "
            \n\t
            \n\t\t
            \n\t\t\t

            a

            \n\t\t\t

            b

            \n\t\t
            \n\t
            \n\t
            \n\t\t
            \n\t\t\t

            c

            \n\t\t\t

            d

            \n\t\t\t

            e

            \n\t\t\t
            \n\t\t\t\t

            f

            \n\t\t\t\t

            g

            \n\t\t\t
            \n\t\t\t

            h

            \n\t\t
            \n\t
            \n
            \n", }, { 'query': "(div>(label+input))+div", 'result': "
            \n\t\n\t\n
            \n
            \n", }, { 'query': "test1\ntest2\ntest3$$$$\\ggVG\\,ul>li>span*>a\\$$$$", 'result': "", }, { 'query': "test1\ntest2\ntest3$$$$\\ggVG\\,input[type=input value=$#]*\\$$$$", 'result': "\n\n", }, { 'query': "div#id-$*5>div#id2-$", 'result': "
            \n\t
            \n
            \n
            \n\t
            \n
            \n
            \n\t
            \n
            \n
            \n\t
            \n
            \n
            \n\t
            \n
            \n", }, { 'query': "{test case $ }*3", 'result': "test case 1 test case 2 test case 3 ", }, { 'query': "{test case $${nr}}*3", 'result': "test case 1\ntest case 2\ntest case 3\n", }, { 'query': "{test case \\$ }*3", 'result': "test case $ test case $ test case $ ", }, { 'query': "{test case $$$ }*3", 'result': "test case 001 test case 002 test case 003 ", }, { 'query': "a[title=$#]{foo}", 'result': "foo\n", }, { 'query': "span.item$*2>{item $}", 'result': "item 1\nitem 2\n", }, { 'query': "\t
            \n\t\tnav link\n\t
            $$$$\\ggVG\\,div\\$$$$", 'result': "\t
            \n\t\t
            \n\t\t\tnav link\n\t\t
            \n\t
            ", }, ], }, { 'name': 'split join tag', 'tests': [ { 'query': "
            \n\t$$$$\\j$$$$\n
            ", 'result': "
            \n\t\n
            ", }, { 'query': "
            \n\tj$$$$/>\n
            ", 'result': "
            \n\t\n
            ", }, ], }, { 'name': 'toggle comment', 'tests': [ { 'query': "
            \n\t$$$$\\/$$$$\n
            ", 'result': "
            \n\t\n
            ", }, { 'query': "
            \n\t\n
            ", 'result': "
            \n\t\n
            ", }, ], }, { 'name': 'image size', 'tests': [ { 'query': "img[src=http://mattn.kaoriya.net/images/logo.png]$$$$\\,\\i$$$$", 'result': "\"\"", }, { 'query': "img[src=/logo.png]$$$$\\,\\i$$$$", 'result': "\"\"", }, { 'query': "img[src=http://mattn.kaoriya.net/images/logo.png width=foo height=bar]$$$$\\,\\i$$$$", 'result': "\"\"", }, ], }, { 'name': 'move next prev', 'tests': [ { 'query': "foo+bar+baz[dankogai=\"\"]$$$$\\,\\gg0\\n\\n\\n\\Byw:%d _\\p$$$$", 'result': "dankogai", }, ], }, { 'name': 'contains dash in attributes', 'tests': [ { 'query': "div[foo-bar=\"baz\"]", 'result': "
            \n", }, ], }, { 'name': 'default attributes', 'tests': [ { 'query': "p.title>a[/hoge/]", 'result': "

            \n", }, { 'query': "script[jquery.js]", 'result': "\n", }, ], }, { 'name': 'multiple group', 'tests': [ { 'query': ".outer$*3>.inner$*2", 'result': "
            \n\t
            \n\t
            \n
            \n
            \n\t
            \n\t
            \n
            \n
            \n\t
            \n\t
            \n
            \n", }, ], }, { 'name': 'group itemno', 'tests': [ { 'query': "dl>(dt{$}+dd)*3", 'result': "
            \n\t
            1
            \n\t
            \n\t
            2
            \n\t
            \n\t
            3
            \n\t
            \n
            \n", }, { 'query': "(div[attr=$]*3)*3", 'result': "
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n", }, ], }, ], 'dummy': "}}}"}, { 'test-css': '{{{', 'type': 'css', 'categories': [ { 'name': 'expand abbreviation', 'tests': [ { 'query': "{fs:n$$$$}", 'result': "{font-style: normal;}", }, { 'query': "{fl:l|fc$$$$}", 'result': "{float: left;}", }, { 'query': "{bg+$$$$}", 'result': "{background: #FFF url($$$$) 0 0 no-repeat;}", }, { 'query': "{bg+!$$$$}", 'result': "{background: #FFF url($$$$) 0 0 no-repeat !important;}", }, { 'query': "{m$$$$}", 'result': "{margin: $$$$;}", }, { 'query': "{m0.1p$$$$}", 'result': "{margin: 0.1%;}", }, { 'query': "{m1.0$$$$}", 'result': "{margin: 1.0em;}", }, { 'query': "{m2$$$$}", 'result': "{margin: 2px;}", }, { 'query': "{bdrs10$$$$}", 'result': "{border-radius: 10px;}", }, { 'query': "{-bdrs20$$$$}", 'result': "{-webkit-border-radius: 20px;\n-moz-border-radius: 20px;\nborder-radius: 20px;}", }, { 'query': "{lg(top,#fff,#000)$$$$}", 'result': "{background-image: -webkit-gradient(top, 0 0, 0 100, from(#fff), to(#000));\nbackground-image: -webkit-linear-gradient(#fff, #000);\nbackground-image: -moz-linear-gradient(#fff, #000);\nbackground-image: -o-linear-gradient(#fff, #000);\nbackground-image: linear-gradient(#fff, #000);\n}", }, { 'query': "{m10-5-0$$$$}", 'result': "{margin: 10px 5px 0;}", }, { 'query': "{m-10--5$$$$}", 'result': "{margin: -10px -5px;}", }, { 'query': "{m10-auto$$$$}", 'result': "{margin: 10px auto;}", }, { 'query': "{w100p$$$$}", 'result': "{width: 100%;}", }, { 'query': "{h50e$$$$}", 'result': "{height: 50em;}", }, { 'query': "{(bg+)+c$$$$}", 'result': "{background: #FFF url($$$$) 0 0 no-repeat;\ncolor: #000;}", }, { 'query': "{m0+bgi+bg++p0$$$$}", 'result': "{margin: 0;\nbackground-image: url($$$$);\nbackground: #FFF url() 0 0 no-repeat;\npadding: 0;}", }, { 'query': "{borle$$$$}", 'result': "{border-left: $$$$;}", }, ], }, ], 'dummy': "}}}"}, { 'test-haml': '{{{', 'type': 'haml', 'categories': [ { 'name': 'expand abbreviation', 'tests': [ { 'query': "div>p+ul#foo>li.bar$[foo=bar][bar=baz]*3>{baz}", 'result': "%div\n %p\n %ul#foo\n %li.bar1{ :foo => \"bar\", :bar => \"baz\" } baz\n %li.bar2{ :foo => \"bar\", :bar => \"baz\" } baz\n %li.bar3{ :foo => \"bar\", :bar => \"baz\" } baz\n", }, { 'query': "div>p+ul#foo>li.bar$[foo=bar][bar=baz]*3>{baz}|haml", 'result': "%div\n %p\n %ul#foo\n %li.bar1{ :foo => \"bar\", :bar => \"baz\" } baz\n %li.bar2{ :foo => \"bar\", :bar => \"baz\" } baz\n %li.bar3{ :foo => \"bar\", :bar => \"baz\" } baz\n", }, { 'query': "a*3|haml", 'result': "%a{ :href => \"\" }\n%a{ :href => \"\" }\n%a{ :href => \"\" }\n", }, { 'query': ".content{Hello!}|haml", 'result': "%div.content Hello!\n", }, { 'query': "a[title=$#]{foo}", 'result': "%a{ :href => \"\", :title => \"foo\" } foo\n", }, ], }, { 'name': 'expand abbreviation', 'tests': [ { 'query': "%a foo\n bar$$$$\\j$$$$", 'result': "%a ", }, { 'query': "$$$$\\j$$$$%a ", 'result': "%a $$$$", }, ], }, { 'name': 'toggle comment', 'tests': [ { 'query': "%a{ :href => \"http://www.google.com\"$$$$\\/$$$$ } hello", 'result': "-# %a{ :href => \"http://www.google.com\" } hello", }, { 'query': "-# %a{ :href => \"http://www.google.com\"$$$$\\/$$$$ } hello", 'result': "%a{ :href => \"http://www.google.com\" } hello", }, ], }, ], 'dummy': "}}}"}, { 'test-slim': "{{{", 'type': 'slim', 'categories': [ { 'name': 'expand abbreviation', 'tests': [ { 'query': "div>p+ul#foo>li.bar$[foo=bar][bar=baz]*3>{baz}", 'result': "div\n p\n ul id=\"foo\"\n li class=\"bar1\" foo=\"bar\" bar=\"baz\"\n | baz\n li class=\"bar2\" foo=\"bar\" bar=\"baz\"\n | baz\n li class=\"bar3\" foo=\"bar\" bar=\"baz\"\n | baz\n", }, { 'query': "div>p+ul#foo>li.bar$[foo=bar][bar=baz]*3>{baz}|slim", 'result': "div\n p\n ul id=\"foo\"\n li class=\"bar1\" foo=\"bar\" bar=\"baz\"\n | baz\n li class=\"bar2\" foo=\"bar\" bar=\"baz\"\n | baz\n li class=\"bar3\" foo=\"bar\" bar=\"baz\"\n | baz\n", }, { 'query': "a*3|slim", 'result': "a href=\"\"\na href=\"\"\na href=\"\"\n", }, { 'query': ".content{Hello!}|slim", 'result': "div class=\"content\"\n | Hello!\n", }, { 'query': "a[title=$#]{foo}", 'result': "a href=\"\" title=\"foo\"\n | foo\n", }, ], }, { 'name': 'split join tag', 'tests': [ { 'query': "a\n | foo$$$$\\j$$$$", 'result': "a", }, { 'query': "a$$$$\\j$$$$", 'result': "a\n | $$$$", }, ], }, { 'name': 'toggle comment', 'tests': [ { 'query': "a href=\"http://www.google.com\"$$$$\\/$$$$\n | hello", 'result': "/a href=\"http://www.google.com\"\n | hello", }, { 'query': "/a href=\"http://www.google.com\"$$$$\\/$$$$\n | hello", 'result': "a href=\"http://www.google.com\"\n | hello", }, ], }, ], 'dummy': "}}}"}, { 'test-xsl': "{{{", 'type': 'xsl', 'categories': [ { 'name': 'expand abbreviation', 'tests': [ { 'query': "vari", 'result': "\n", }, { 'query': "ap>wp", 'result': "\n\t\n\n", }, ], }, ], 'dummy': "}}}"}, { 'test-xsd': "{{{", 'type': 'xsd', 'categories': [ { 'name': 'expand abbreviation', 'tests': [ { 'query': "xsd:w3c", 'result': "\n\n\t\n", }, ], }, ], 'dummy': "}}}"}, { 'test-mustache': "{{{", 'type': 'mustache', 'categories': [ { 'name': 'expand abbreviation', 'tests': [ { 'query': "div#{{foo}}", 'result': "
            \n", }, { 'query': "div.{{foo}}", 'result': "
            \n", }, ], }, ], 'dummy': "}}}"}, { 'test-sass': "{{{", 'type': 'sass', 'categories': [ { 'name': 'expand abbreviation', 'tests': [ { 'query': "@i$$$$", 'result': "@import url()", }, { 'query': "fs:n", 'result': "font-style: normal", }, { 'query': "fl:l|fc", 'result': "float: left", }, { 'query': "bg+$$$$", 'result': "background: #FFF url($$$$) 0 0 no-repeat", }, { 'query': "bg+!$$$$", 'result': "background: #FFF url($$$$) 0 0 no-repeat !important", }, { 'query': "m$$$$", 'result': "margin: $$$$", }, { 'query': "m0.1p$$$$", 'result': "margin: 0.1%", }, { 'query': "m1.0$$$$", 'result': "margin: 1.0em", }, { 'query': "m2$$$$", 'result': "margin: 2px", }, { 'query': "bdrs10$$$$", 'result': "border-radius: 10px", }, { 'query': "-bdrs20$$$$", 'result': "-webkit-border-radius: 20px\n-moz-border-radius: 20px\nborder-radius: 20px", }, { 'query': "lg(top,#fff,#000)$$$$", 'result': "background-image: -webkit-gradient(top, 0 0, 0 100, from(#fff), to(#000))\nbackground-image: -webkit-linear-gradient(#fff, #000)\nbackground-image: -moz-linear-gradient(#fff, #000)\nbackground-image: -o-linear-gradient(#fff, #000)\nbackground-image: linear-gradient(#fff, #000)\n", }, { 'query': "m10-5-0$$$$", 'result': "margin: 10px 5px 0", }, { 'query': "m-10--5$$$$", 'result': "margin: -10px -5px", }, { 'query': "m10-auto$$$$", 'result': "margin: 10px auto", }, { 'query': "w100p$$$$", 'result': "width: 100%", }, { 'query': "h50e$$$$", 'result': "height: 50em", }, { 'query': "(bg+)+c$$$$", 'result': "background: #FFF url($$$$) 0 0 no-repeat\ncolor: #000", }, { 'query': ".first>.second>.third$$$$", 'result': "div.first\n\tdiv.second\n\t\tdiv.third$$$$", }, ], }, ], 'dummy': "}}}"}, ] " vim:set et fdm=marker: ================================================ FILE: .vim/bundle/gruvbox/README.md ================================================ gruvbox ======= Retro groove color scheme for Vim. Gruvbox is heavily inspired by [badwolf][], [jellybeans][] and [solarized][]. Designed as a bright theme with pastel 'retro groove' colors and light/dark mode switching in the way of [solarized][]. The main focus when developing Gruvbox is to keep colors easily distinguishable, contrast enough and still pleasant for the eyes. [badwolf]: https://github.com/sjl/badwolf [jellybeans]: https://github.com/nanotech/jellybeans.vim [solarized]: http://ethanschoonover.com/solarized Screenshots ----------- Refer [Gallery][] for more syntax-specific screenshots. [Gallery]: https://github.com/morhetz/gruvbox/wiki/Gallery ### Dark mode ![Screenshot](http://i.imgur.com/2870c.png) ### Light mode ![Screenshot](http://i.imgur.com/oS9I3.png) Documentation ------------- Please check [wiki][] for installation details, terminal-specific setup, troubleshooting, configuration options and others. [wiki]: https://github.com/morhetz/gruvbox/wiki Features -------- * Lots of style-customization options (contrast, color invertion, italics usage etc.) * Extended filetype highlighting: Html, Xml, Vim, Clojure, C, Python, JavaScript, CoffeeScript, Ruby, Objective-C, Go, Lua, MoonScript, Java * Supported plugins: [EasyMotion][], [vim-sneak][], [Indent Guides][], [indentLine][], [Rainbow Parentheses][], [Airline][], [GitGutter][], [Signify][], [ShowMarks][], [Signature][], [Syntastic][], [CtrlP][], [Startify][] [EasyMotion]: https://github.com/Lokaltog/vim-easymotion [vim-sneak]: https://github.com/justinmk/vim-sneak [Indent Guides]: https://github.com/nathanaelkane/vim-indent-guides [indentLine]: https://github.com/Yggdroot/indentLine [Rainbow Parentheses]: https://github.com/kien/rainbow_parentheses.vim [Airline]: https://github.com/bling/vim-airline [GitGutter]: https://github.com/airblade/vim-gitgutter [Signify]: https://github.com/mhinz/vim-signify [ShowMarks]: http://www.vim.org/scripts/script.php?script_id=152 [Signature]: https://github.com/kshenoy/vim-signature [Syntastic]: https://github.com/scrooloose/syntastic [CtrlP]: https://github.com/kien/ctrlp.vim [Startify]: https://github.com/mhinz/vim-startify Contributions ------------- See [gruvbox-generalized][] repo for contributions, ports and extras. [gruvbox-generalized]: https://github.com/morhetz/gruvbox-generalized ToDo ---- * Filetype syntax highlighting (R, TeX and I'm still dissatisfied with CSS) * Plugin support (MiniBufExplorer, Tagbar) * Airline theme Self-Promotion -------------- If you like gruvbox follow the repository on [GitHub](https://github.com/morhetz/gruvbox) and vote for it on [vim.org](http://www.vim.org/scripts/script.php?script_id=4349). License ------- [MIT/X11][] [MIT/X11]: https://en.wikipedia.org/wiki/MIT_License ================================================ FILE: .vim/bundle/gruvbox/autoload/gruvbox.vim ================================================ " ----------------------------------------------------------------------------- " File: gruvbox.vim " Description: Retro groove color scheme for Vim " Author: morhetz " Source: https://github.com/morhetz/gruvbox " Last Modified: 09 Apr 2014 " ----------------------------------------------------------------------------- function! gruvbox#invert_signs_toggle() if g:gruvbox_invert_signs == 0 let g:gruvbox_invert_signs=1 else let g:gruvbox_invert_signs=0 endif colorscheme gruvbox endfunction " Search Highlighting {{{ function! gruvbox#hls_show() set hlsearch call GruvboxHlsShowCursor() endfunction function! gruvbox#hls_hide() set nohlsearch call GruvboxHlsHideCursor() endfunction function! gruvbox#hls_toggle() if &hlsearch call gruvbox#hls_hide() else call gruvbox#hls_show() endif endfunction " }}} " vim: set sw=3 ts=3 sts=3 noet tw=80 ft=vim fdm=marker: ================================================ FILE: .vim/bundle/gruvbox/colors/gruvbox.vim ================================================ " ----------------------------------------------------------------------------- " File: gruvbox.vim " Description: Retro groove color scheme for Vim " Author: morhetz " Source: https://github.com/morhetz/gruvbox " Last Modified: 11 Mar 2014 " ----------------------------------------------------------------------------- " Supporting code ------------------------------------------------------------- " Initialisation: {{{ if version > 580 hi clear if exists("syntax_on") syntax reset endif endif let g:colors_name='gruvbox' if !has('gui_running') && &t_Co != 256 finish endif " }}} " Global Settings: {{{ if !exists('g:gruvbox_bold') let g:gruvbox_bold=1 endif if !exists('g:gruvbox_italic') let g:gruvbox_italic=1 endif if !exists('g:gruvbox_undercurl') let g:gruvbox_undercurl=1 endif if !exists('g:gruvbox_underline') let g:gruvbox_underline=1 endif if !exists('g:gruvbox_italicize_comments') let g:gruvbox_italicize_comments=1 endif if !exists('g:gruvbox_italicize_strings') let g:gruvbox_italicize_strings=0 endif if !exists('g:gruvbox_termcolors') let g:gruvbox_termcolors=256 endif if !exists('g:gruvbox_invert_indent_guides') let g:gruvbox_invert_indent_guides=0 endif if !exists('g:gruvbox_hls_cursor') let g:gruvbox_hls_cursor='orange' endif if !exists('g:gruvbox_sign_column') let g:gruvbox_sign_column='dark1' endif if !exists('g:gruvbox_invert_signs') let g:gruvbox_invert_signs=0 endif if !exists('g:gruvbox_invert_selection') let g:gruvbox_invert_selection=1 endif if !exists('g:gruvbox_contrast') let g:gruvbox_contrast='medium' endif let s:is_dark=(&background == 'dark') " }}} " Palette: {{{ let s:gb = {} if s:is_dark let s:gb.dark0 = ['282828', 235] " 40-40-40 let s:gb.dark1 = ['3c3836', 237] " 60-56-54 let s:gb.dark2 = ['504945', 239] " 80-73-69 let s:gb.dark3 = ['665c54', 241] " 102-92-84 let s:gb.dark4 = ['7c6f64', 243] " 124-111-100 let s:gb.medium = ['928374', 245] " 146-131-116 let s:gb.light0 = ['fdf4c1', 229] " 253-244-193 let s:gb.light1 = ['ebdbb2', 223] " 235-219-178 let s:gb.light2 = ['d5c4a1', 250] " 213-196-161 let s:gb.light3 = ['bdae93', 248] " 189-174-147 let s:gb.light4 = ['a89984', 246] " 168-153-132 let s:gb.light4_256 = ['a89984', 246] " 168-153-132 let s:gb.red = ['fb4934', 167] " 251-73-52 let s:gb.green = ['b8bb26', 142] " 184-187-38 let s:gb.yellow = ['fabd2f', 214] " 250-189-47 let s:gb.blue = ['83a598', 109] " 131-165-152 let s:gb.purple = ['d3869b', 175] " 211-134-155 let s:gb.aqua = ['8ec07c', 108] " 142-192-124 let s:gb.orange = ['fe8019', 208] " 254-128-25 if g:gruvbox_termcolors == 16 let s:gb.dark0 = ['282828', 0] let s:gb.light4 = ['a89984', 7] let s:gb.medium = ['928374', 8] let s:gb.red = ['fb4934', 9] let s:gb.green = ['b8bb26', 10] let s:gb.yellow = ['fabd2f', 11] let s:gb.blue = ['83a598', 12] let s:gb.purple = ['d3869b', 13] let s:gb.aqua = ['8ec07c', 14] let s:gb.light1 = ['ebdbb2', 15] endif if g:gruvbox_contrast == 'soft' let s:gb.dark0 = ['32302f', 236] " 50-48-47 endif if g:gruvbox_contrast == 'hard' let s:gb.dark0 = ['1d2021', 234] " 29-32-33 endif else let s:gb.dark0 = ['fdf4c1', 229] " 253-244-193 let s:gb.dark1 = ['ebdbb2', 223] " 235-219-178 let s:gb.dark2 = ['d5c4a1', 250] " 213-196-161 let s:gb.dark3 = ['bdae93', 248] " 189-174-147 let s:gb.dark4 = ['a89984', 246] " 168-153-132 let s:gb.medium = ['928374', 244] " 146-131-116 let s:gb.light0 = ['282828', 235] " 40-40-40 let s:gb.light1 = ['3c3836', 237] " 60-56-54 let s:gb.light2 = ['504945', 239] " 80-73-69 let s:gb.light3 = ['665c54', 241] " 102-92-84 let s:gb.light4 = ['7c6f64', 243] " 124-111-100 let s:gb.light4_256 = ['7c6f64', 243] " 124-111-100 let s:gb.red = ['9d0006', 88] " 157-0-6 let s:gb.green = ['79740e', 100] " 121-116-14 let s:gb.yellow = ['b57614', 136] " 181-118-20 let s:gb.blue = ['076678', 24] " 7-102-120 let s:gb.purple = ['8f3f71', 96] " 143-63-113 let s:gb.aqua = ['427b58', 66] " 66-123-88 let s:gb.orange = ['af3a03', 130] " 175-58-3 if g:gruvbox_termcolors == 16 let s:gb.dark0 = ['fdf4c1', 0] let s:gb.light4 = ['7c6f64', 7] let s:gb.medium = ['928374', 8] let s:gb.red = ['9d0006', 9] let s:gb.green = ['79740e', 10] let s:gb.yellow = ['b57614', 11] let s:gb.blue = ['076678', 12] let s:gb.purple = ['8f3f71', 13] let s:gb.aqua = ['427b58', 14] let s:gb.light1 = ['3c3836', 15] endif if g:gruvbox_contrast == 'soft' let s:gb.dark0 = ['f4e8ba', 228] " 244-232-186 endif if g:gruvbox_contrast == 'hard' let s:gb.dark0 = ['ffffc8', 230] " 255-255-200 endif endif " }}} " Highlighting Function: {{{ function! s:HL(group, fg, ...) " Arguments: group, guifg, guibg, gui, guisp let histring = 'hi ' . a:group . ' ' if strlen(a:fg) if a:fg == 'fg' let histring .= 'guifg=fg ctermfg=fg ' elseif a:fg == 'bg' let histring .= 'guifg=bg ctermfg=bg ' elseif a:fg == 'none' let histring .= 'guifg=NONE ctermfg=NONE ' else let c = get(s:gb, a:fg) let histring .= 'guifg=#' . c[0] . ' ctermfg=' . c[1] . ' ' endif endif if a:0 >= 1 && strlen(a:1) if a:1 == 'bg' let histring .= 'guibg=bg ctermbg=bg ' elseif a:fg == 'fg' let histring .= 'guibg=fg ctermbg=fg ' elseif a:1 == 'none' let histring .= 'guibg=NONE ctermbg=NONE ' else let c = get(s:gb, a:1) let histring .= 'guibg=#' . c[0] . ' ctermbg=' . c[1] . ' ' endif else let histring .= 'guibg=NONE ctermbg=NONE ' endif " Hotfixing #24; " TODO: get rid of this spaghetti if a:0 >= 2 && strlen(a:2) if a:2 == 'none' let histring .= 'gui=NONE cterm=NONE ' elseif a:2 == 'italic' && g:gruvbox_italic == 0 let histring .= 'gui=NONE cterm=NONE ' elseif a:2 == 'bold' && g:gruvbox_bold == 0 let histring .= 'gui=NONE cterm=NONE ' elseif a:2 == 'bold,inverse' && g:gruvbox_bold == 0 let histring .= 'gui=inverse cterm=inverse ' elseif a:2 == 'undercurl' && g:gruvbox_undercurl == 0 let histring .= 'gui=NONE cterm=NONE ' elseif a:2 == 'underline' && g:gruvbox_underline == 0 let histring .= 'gui=NONE cterm=NONE ' elseif a:2 == 'bold,italic' if g:gruvbox_italic == 0 && g:gruvbox_bold == 0 let histring .= 'gui=NONE cterm=NONE ' elseif g:gruvbox_italic == 0 let histring .= 'gui=bold cterm=bold ' elseif g:gruvbox_bold == 0 let histring .= 'gui=italic cterm=italic ' else let histring .= 'gui=' . a:2 . ' cterm=' . a:2 . ' ' endif elseif a:2 == 'bold,underline' if g:gruvbox_underline == 0 && g:gruvbox_bold == 0 let histring .= 'gui=NONE cterm=NONE ' elseif g:gruvbox_underline == 0 let histring .= 'gui=bold cterm=bold ' elseif g:gruvbox_bold == 0 let histring .= 'gui=underline cterm=underline ' else let histring .= 'gui=' . a:2 . ' cterm=' . a:2 . ' ' endif elseif a:2 == 'underline,italic' if g:gruvbox_underline == 0 && g:gruvbox_italic == 0 let histring .= 'gui=NONE cterm=NONE ' elseif g:gruvbox_underline == 0 let histring .= 'gui=italic cterm=italic ' elseif g:gruvbox_italic == 0 let histring .= 'gui=underline cterm=underline ' else let histring .= 'gui=' . a:2 . ' cterm=' . a:2 . ' ' endif elseif a:2 == 'bold,underline,italic' if g:gruvbox_italic == 0 && g:gruvbox_bold == 0 let histring .= 'gui=underline cterm=underline ' elseif g:gruvbox_italic == 0 let histring .= 'gui=bold,underline cterm=bold,underline ' elseif g:gruvbox_bold == 0 let histring .= 'gui=italic,underline cterm=italic,underline ' else let histring .= 'gui=' . a:2 . ' cterm=' . a:2 . ' ' endif else let histring .= 'gui=' . a:2 . ' cterm=' . a:2 . ' ' endif else let histring .= 'gui=NONE cterm=NONE ' endif if a:0 >= 3 && strlen(a:3) if a:3 == 'none' let histring .= 'guisp=NONE ' else let c = get(s:gb, a:3) let histring .= 'guisp=#' . c[0] . ' ' endif endif execute histring endfunction " }}} " Vanilla colorscheme --------------------------------------------------------- " General UI: {{{ " Normal text call s:HL('Normal', 'light1', 'dark0') " Correct background (see issue #7): " --- Problem with changing between dark and light on 256 color terminal " --- https://github.com/morhetz/gruvbox/issues/7 if s:is_dark set background=dark else set background=light endif if version >= 700 " Screen line that the cursor is call s:HL('CursorLine', 'none', 'dark1') " Screen column that the cursor is call s:HL('CursorColumn', 'none', 'dark1') " Tab pages line filler call s:HL('TabLineFill', 'dark4', 'bg') " Active tab page label call s:HL('TabLineSel', 'bg', 'dark4', 'bold') " Not active tab page label call s:HL('TabLine', 'dark4', 'bg') " Match paired bracket under the cursor call s:HL('MatchParen', 'none', 'dark3', 'bold') endif if version >= 703 " Highlighted screen columns call s:HL('ColorColumn', 'none', 'dark1') " Concealed element: \lambda → λ call s:HL('Conceal', 'blue', 'none') " Line number of CursorLine call s:HL('CursorLineNr', 'yellow', 'dark1') endif call s:HL('NonText', 'dark2') call s:HL('SpecialKey', 'dark2') if g:gruvbox_invert_selection == 0 call s:HL('Visual', 'none', 'dark2') call s:HL('VisualNOS', 'none', 'dark2') else call s:HL('Visual', 'none', 'dark3', 'inverse') call s:HL('VisualNOS', 'none', 'dark3', 'inverse') endif call s:HL('Search', 'dark0', 'yellow') call s:HL('IncSearch', 'dark0', g:gruvbox_hls_cursor) call s:HL('Underlined', 'blue', 'none', 'underline') call s:HL('StatusLine', 'dark4', 'dark0', 'bold,inverse') call s:HL('StatusLineNC', 'dark2', 'light4', 'bold,inverse') " The column separating vertically split windows call s:HL('VertSplit', 'light4', 'dark2') " Current match in wildmenu completion call s:HL('WildMenu', 'blue', 'dark2', 'bold') " Directory names, special names in listing call s:HL('Directory', 'green', 'none', 'bold') " Titles for output from :set all, :autocmd, etc. call s:HL('Title', 'green', 'none', 'bold') " Error messages on the command line call s:HL('ErrorMsg', 'bg', 'red', 'bold') " More prompt: -- More -- call s:HL('MoreMsg', 'yellow', 'none', 'bold') " Current mode message: -- INSERT -- call s:HL('ModeMsg', 'yellow', 'none', 'bold') " 'Press enter' prompt and yes/no questions call s:HL('Question', 'orange', 'none', 'bold') " Warning messages call s:HL('WarningMsg', 'red', 'none', 'bold') " }}} " Gutter: {{{ " Line number for :number and :# commands call s:HL('LineNr', 'dark4') " Column where signs are displayed call s:HL('SignColumn', 'none', g:gruvbox_sign_column) " Line used for closed folds call s:HL('Folded', 'medium', 'dark1', 'italic') " Column where folds are displayed call s:HL('FoldColumn', 'medium', 'dark1') " }}} " Cursor: {{{ " Character under cursor call s:HL('Cursor', 'none', 'none', 'inverse') " Visual mode cursor, selection call s:HL('vCursor', 'none', 'none', 'inverse') " Input moder cursor call s:HL('iCursor', 'none', 'none', 'inverse') " Language mapping cursor call s:HL('lCursor', 'none', 'none', 'inverse') " }}} " Syntax Highlighting: {{{ call s:HL('Special', 'orange') if g:gruvbox_italicize_comments == 0 call s:HL('Comment', 'medium', 'none') else call s:HL('Comment', 'medium', 'none', 'italic') endif call s:HL('Todo', 'fg', 'bg', 'bold') call s:HL('Error', 'bg', 'red', 'bold') " Generic statement call s:HL('Statement', 'red') " if, then, else, endif, swicth, etc. call s:HL('Conditional', 'red') " for, do, while, etc. call s:HL('Repeat', 'red') " case, default, etc. call s:HL('Label', 'red') " try, catch, throw call s:HL('Exception', 'red') " sizeof, "+", "*", etc. hi! link Operator Normal " Any other keyword call s:HL('Keyword', 'red') " Variable name call s:HL('Identifier', 'blue') " Function name call s:HL('Function', 'green', 'none', 'bold') " Generic preprocessor call s:HL('PreProc', 'aqua') " Preprocessor #include call s:HL('Include', 'aqua') " Preprocessor #define call s:HL('Define', 'aqua') " Same as Define call s:HL('Macro', 'aqua') " Preprocessor #if, #else, #endif, etc. call s:HL('PreCondit', 'aqua') " Generic constant call s:HL('Constant', 'purple') " Character constant: 'c', '/n' call s:HL('Character', 'purple') " String constant: "this is a string" if g:gruvbox_italicize_strings == 0 call s:HL('String', 'green') else call s:HL('String', 'green', 'none', 'italic') endif " Boolean constant: TRUE, false call s:HL('Boolean', 'purple') " Number constant: 234, 0xff call s:HL('Number', 'purple') " Floating point constant: 2.3e10 call s:HL('Float', 'purple') " Generic type call s:HL('Type', 'yellow') " static, register, volatile, etc call s:HL('StorageClass', 'orange') " struct, union, enum, etc. call s:HL('Structure', 'aqua') " typedef call s:HL('Typedef', 'yellow') " }}} " Completion Menu: {{{ if version >= 700 " Popup menu: normal item call s:HL('Pmenu', 'light1', 'dark2') " Popup menu: selected item call s:HL('PmenuSel', 'dark2', 'blue', 'bold') " Popup menu: scrollbar call s:HL('PmenuSbar', 'none', 'dark2') " Popup menu: scrollbar thumb call s:HL('PmenuThumb', 'none', 'dark4') endif " }}} " Diffs: {{{ call s:HL('DiffDelete', 'dark0', 'red') call s:HL('DiffAdd', 'dark0', 'green') "call s:HL('DiffChange', 'dark0', 'blue') "call s:HL('DiffText', 'dark0', 'yellow') " Alternative setting call s:HL('DiffChange', 'dark0', 'aqua') call s:HL('DiffText', 'dark0', 'yellow') " }}} " Spelling: {{{ if has("spell") " Not capitalised word call s:HL('SpellCap', 'none', 'none', 'undercurl', 'red') " Not recognized word call s:HL('SpellBad', 'none', 'none', 'undercurl', 'blue') " Wrong spelling for selected region call s:HL('SpellLocal', 'none', 'none', 'undercurl', 'aqua') " Rare word call s:HL('SpellRare', 'none', 'none', 'undercurl', 'purple') endif " }}} " Plugin specific ------------------------------------------------------------- " EasyMotion: {{{ hi! link EasyMotionTarget Search hi! link EasyMotionShade Comment " }}} " Sneak: {{{ hi! link SneakPluginTarget Search hi! link SneakStreakTarget Search call s:HL('SneakStreakMask', 'yellow', 'yellow') hi! link SneakStreakStatusLine Search " }}} " Indent Guides: {{{ let g:indent_guides_auto_colors = 0 if g:gruvbox_invert_indent_guides == 0 call s:HL('IndentGuidesOdd', 'bg', 'dark2') call s:HL('IndentGuidesEven', 'bg', 'dark1') else call s:HL('IndentGuidesOdd', 'bg', 'dark2', 'inverse') call s:HL('IndentGuidesEven', 'bg', 'dark3', 'inverse') endif " }}} " IndentLine: {{{ let g:indentLine_color_term = s:gb.dark2[1] let g:indentLine_color_gui = '#' . s:gb.dark2[0] " }}} " Rainbow Parentheses: {{{ let g:rbpt_colorpairs = \ [ \ ['brown', '#458588'], ['Darkblue', '#b16286'], \ ['darkgray', '#cc241d'], ['darkgreen', '#d65d0e'], \ ['darkcyan', '#458588'], ['darkred', '#b16286'], \ ['darkmagenta', '#cc241d'], ['brown', '#d65d0e'], \ ['gray', '#458588'], ['black', '#b16286'], \ ['darkmagenta', '#cc241d'], ['Darkblue', '#d65d0e'], \ ['darkgreen', '#458588'], ['darkcyan', '#b16286'], \ ['darkred', '#cc241d'], ['red', '#d65d0e'], \ ] let g:rainbow_guifgs = \ [ \ '#458588', '#b16286', '#cc241d', '#d65d0e', \ '#458588', '#b16286', '#cc241d', '#d65d0e', \ '#458588', '#b16286', '#cc241d', '#d65d0e', \ '#458588', '#b16286', '#cc241d', '#d65d0e' \ ] let g:rainbow_ctermfgs = \ [ \ 'brown', 'Darkblue', 'darkgray', 'darkgreen', \ 'darkcyan', 'darkred', 'darkmagenta', 'brown', \ 'gray', 'black', 'darkmagenta', 'Darkblue', \ 'darkgreen', 'darkcyan', 'darkred', 'red', \ ] "}}} " Airline: {{{ if !exists('g:airline_theme_map') let g:airline_theme_map = { 'gruvbox.*': 'tomorrow' } else let g:airline_theme_map['gruvbox.*'] = 'tomorrow' endif " }}} " GitGutter: {{{ if g:gruvbox_invert_signs == 0 call s:HL('GitGutterAdd', 'green', g:gruvbox_sign_column) call s:HL('GitGutterChange', 'aqua', g:gruvbox_sign_column) call s:HL('GitGutterDelete', 'red', g:gruvbox_sign_column) call s:HL('GitGutterChangeDelete', 'aqua', g:gruvbox_sign_column) else call s:HL('GitGutterAdd', 'green', g:gruvbox_sign_column, 'inverse') call s:HL('GitGutterChange', 'aqua', g:gruvbox_sign_column, 'inverse') call s:HL('GitGutterDelete', 'red', g:gruvbox_sign_column, 'inverse') call s:HL('GitGutterChangeDelete', 'aqua', g:gruvbox_sign_column, 'inverse') endif " }}} " Signify: {{{ if g:gruvbox_invert_signs == 0 call s:HL('SignifySignAdd', 'green', g:gruvbox_sign_column) call s:HL('SignifySignChange ', 'aqua', g:gruvbox_sign_column) call s:HL('SignifySignDelete', 'red', g:gruvbox_sign_column) else call s:HL('SignifySignAdd', 'green', g:gruvbox_sign_column, 'inverse') call s:HL('SignifySignChange ', 'aqua', g:gruvbox_sign_column, 'inverse') call s:HL('SignifySignDelete', 'red', g:gruvbox_sign_column, 'inverse') endif " }}} " Syntastic: {{{ call s:HL('SyntasticError', 'none', 'none', 'undercurl', 'red') call s:HL('SyntasticWarning', 'none', 'none', 'undercurl', 'yellow') if g:gruvbox_invert_signs == 0 call s:HL('SyntasticErrorSign', 'red', g:gruvbox_sign_column) call s:HL('SyntasticWarningSign', 'yellow', g:gruvbox_sign_column) else call s:HL('SyntasticErrorSign', 'red', g:gruvbox_sign_column, 'inverse') call s:HL('SyntasticWarningSign', 'yellow', g:gruvbox_sign_column, 'inverse') endif " }}} " Signature: {{{ if g:gruvbox_invert_signs == 0 call s:HL('SignatureMarkerText', 'purple', g:gruvbox_sign_column) call s:HL('SignatureMarkText', 'blue', g:gruvbox_sign_column) else call s:HL('SignatureMarkerText', 'purple', g:gruvbox_sign_column, 'inverse') call s:HL('SignatureMarkText', 'blue', g:gruvbox_sign_column, 'inverse') endif let g:SignatureMarkerTextHL='SignatureMarkerText' let g:SignatureMarkTextHL='SignatureMarkText' " }}} " ShowMarks: {{{ if g:gruvbox_invert_signs == 0 call s:HL('ShowMarksHLl', 'blue', g:gruvbox_sign_column) call s:HL('ShowMarksHLu', 'blue', g:gruvbox_sign_column) call s:HL('ShowMarksHLo', 'blue', g:gruvbox_sign_column) call s:HL('ShowMarksHLm', 'blue', g:gruvbox_sign_column) else call s:HL('ShowMarksHLl', 'blue', g:gruvbox_sign_column, 'inverse') call s:HL('ShowMarksHLu', 'blue', g:gruvbox_sign_column, 'inverse') call s:HL('ShowMarksHLo', 'blue', g:gruvbox_sign_column, 'inverse') call s:HL('ShowMarksHLm', 'blue', g:gruvbox_sign_column, 'inverse') endif " }}} " CtrlP: {{{ call s:HL('CtrlPMatch', 'yellow') call s:HL('CtrlPNoEntries', 'red') call s:HL('CtrlPPrtBase', 'dark2') call s:HL('CtrlPPrtCursor', 'blue') call s:HL('CtrlPLinePre', 'dark2') call s:HL('CtrlPMode1', 'blue', 'dark2', 'bold') call s:HL('CtrlPMode2', 'dark0', 'blue', 'bold') call s:HL('CtrlPStats', 'light4', 'dark2', 'bold') " }}} " Startify: {{{ call s:HL('StartifyBracket', 'light3') call s:HL('StartifyFile', 'light0') call s:HL('StartifyNumber', 'blue') call s:HL('StartifyPath', 'medium') call s:HL('StartifySlash', 'medium') call s:HL('StartifySection', 'yellow') call s:HL('StartifySpecial', 'dark2') call s:HL('StartifyHeader', 'orange') call s:HL('StartifyFooter', 'dark2') " }}} " Vimshell: {{{ let g:vimshell_escape_colors = map(split( \ 'dark4 red green yellow blue purple aqua light4 ' . \ 'dark0 red green orange blue purple aqua light0' \ ), '"#" . s:gb[v:val][0]') " }}} " Filetype specific ----------------------------------------------------------- " Diff: {{{ call s:HL('diffAdded', 'green') call s:HL('diffRemoved', 'red') call s:HL('diffChanged', 'aqua') call s:HL('diffFile', 'orange') call s:HL('diffNewFile', 'yellow') call s:HL('diffLine', 'blue') " }}} " Html: {{{ call s:HL('htmlTag', 'blue') call s:HL('htmlEndTag', 'blue') call s:HL('htmlTagName', 'aqua', 'none', 'bold') call s:HL('htmlArg', 'aqua') call s:HL('htmlScriptTag', 'purple') call s:HL('htmlTagN', 'light1') call s:HL('htmlSpecialTagName', 'aqua', 'none', 'bold') call s:HL('htmlLink', 'light4', 'none', 'underline') call s:HL('htmlSpecialChar', 'orange') call s:HL('htmlBold', 'fg', 'bg', 'bold') call s:HL('htmlBoldUnderline', 'fg', 'bg', 'bold,underline') call s:HL('htmlBoldItalic', 'fg', 'bg', 'bold,italic') call s:HL('htmlBoldUnderlineItalic', 'fg', 'bg', 'bold,underline,italic') call s:HL('htmlUnderline', 'fg', 'bg', 'underline') call s:HL('htmlUnderlineItalic', 'fg', 'bg', 'underline,italic') call s:HL('htmlItalic', 'fg', 'bg', 'italic') " }}} " Xml: {{{ call s:HL('xmlTag', 'blue') call s:HL('xmlEndTag', 'blue') call s:HL('xmlTagName', 'blue') call s:HL('xmlEqual', 'blue') call s:HL('docbkKeyword', 'aqua', 'none', 'bold') call s:HL('xmlDocTypeDecl', 'medium') call s:HL('xmlDocTypeKeyword', 'purple') call s:HL('xmlCdataStart', 'medium') call s:HL('xmlCdataCdata', 'purple') call s:HL('dtdFunction', 'medium') call s:HL('dtdTagName', 'purple') call s:HL('xmlAttrib', 'aqua') call s:HL('xmlProcessingDelim', 'medium') call s:HL('dtdParamEntityPunct', 'medium') call s:HL('dtdParamEntityDPunct', 'medium') call s:HL('xmlAttribPunct', 'medium') call s:HL('xmlEntity', 'orange') call s:HL('xmlEntityPunct', 'orange') " }}} " Vim: {{{ if g:gruvbox_italicize_comments == 0 call s:HL('vimCommentTitle', 'light4_256', 'none', 'bold') else call s:HL('vimCommentTitle', 'light4_256', 'none', 'bold,italic') endif call s:HL('vimNotation', 'orange') call s:HL('vimBracket', 'orange') call s:HL('vimMapModKey', 'orange') call s:HL('vimFuncSID', 'light3') call s:HL('vimSetSep', 'light3') call s:HL('vimSep', 'light3') call s:HL('vimContinue', 'light3') " }}} " Clojure: {{{ call s:HL('clojureKeyword', 'blue') call s:HL('clojureCond', 'orange') call s:HL('clojureSpecial', 'orange') call s:HL('clojureDefine', 'orange') call s:HL('clojureFunc', 'yellow') call s:HL('clojureRepeat', 'yellow') call s:HL('clojureCharacter', 'aqua') call s:HL('clojureStringEscape', 'aqua') call s:HL('clojureException', 'red') call s:HL('clojureRegexp', 'aqua') call s:HL('clojureRegexpEscape', 'aqua') call s:HL('clojureRegexpCharClass', 'light3', 'none', 'bold') call s:HL('clojureRegexpMod', 'light3', 'none', 'bold') call s:HL('clojureRegexpQuantifier', 'light3', 'none', 'bold') call s:HL('clojureParen', 'light3') call s:HL('clojureAnonArg', 'yellow') call s:HL('clojureVariable', 'blue') call s:HL('clojureMacro', 'orange') call s:HL('clojureMeta', 'yellow') call s:HL('clojureDeref', 'yellow') call s:HL('clojureQuote', 'yellow') call s:HL('clojureUnquote', 'yellow') " }}} " C: {{{ call s:HL('cOperator', 'purple') call s:HL('cStructure', 'orange') " }}} " Python: {{{ call s:HL('pythonBuiltin', 'orange') call s:HL('pythonBuiltinObj', 'orange') call s:HL('pythonBuiltinFunc', 'orange') call s:HL('pythonFunction', 'aqua') call s:HL('pythonDecorator', 'red') call s:HL('pythonInclude', 'blue') call s:HL('pythonImport', 'blue') call s:HL('pythonRun', 'blue') call s:HL('pythonCoding', 'blue') call s:HL('pythonOperator', 'red') call s:HL('pythonExceptions', 'purple') call s:HL('pythonBoolean', 'purple') call s:HL('pythonDot', 'light3') " }}} " CSS: {{{ call s:HL('cssBraces', 'blue') call s:HL('cssFunctionName', 'yellow') call s:HL('cssIdentifier', 'orange') call s:HL('cssClassName', 'green') call s:HL('cssColor', 'blue') call s:HL('cssSelectorOp', 'blue') call s:HL('cssSelectorOp2', 'blue') call s:HL('cssImportant', 'green') call s:HL('cssVendor', 'light1') call s:HL('cssTextProp', 'aqua') call s:HL('cssAnimationProp', 'aqua') call s:HL('cssUIProp', 'yellow') call s:HL('cssTransformProp', 'aqua') call s:HL('cssTransitionProp', 'aqua') call s:HL('cssPrintProp', 'aqua') call s:HL('cssPositioningProp', 'yellow') call s:HL('cssBoxProp', 'aqua') call s:HL('cssFontDescriptorProp', 'aqua') call s:HL('cssFlexibleBoxProp', 'aqua') call s:HL('cssBorderOutlineProp', 'aqua') call s:HL('cssBackgroundProp', 'aqua') call s:HL('cssMarginProp', 'aqua') call s:HL('cssListProp', 'aqua') call s:HL('cssTableProp', 'aqua') call s:HL('cssFontProp', 'aqua') call s:HL('cssPaddingProp', 'aqua') call s:HL('cssDimensionProp', 'aqua') call s:HL('cssRenderProp', 'aqua') call s:HL('cssColorProp', 'aqua') call s:HL('cssGeneratedContentProp', 'aqua') " }}} " JavaScript: {{{ call s:HL('javaScriptBraces', 'orange') call s:HL('javaScriptFunction', 'aqua') call s:HL('javaScriptIdentifier', 'red') call s:HL('javaScriptMember', 'blue') call s:HL('javaScriptNumber', 'purple') call s:HL('javaScriptNull', 'purple') call s:HL('javaScriptParens', 'light3') " }}} " CoffeeScript: {{{ call s:HL('coffeeExtendedOp', 'light3') call s:HL('coffeeSpecialOp', 'light3') call s:HL('coffeeCurly', 'orange') call s:HL('coffeeParen', 'light3') call s:HL('coffeeBracket', 'orange') " }}} " Ruby: {{{ call s:HL('rubyStringDelimiter', 'green') call s:HL('rubyInterpolationDelimiter', 'aqua') " }}} " ObjectiveC: {{{ call s:HL('objcTypeModifier', 'red') call s:HL('objcDirective', 'blue') " }}} " Go: {{{ call s:HL('goDirective', 'aqua') call s:HL('goConstants', 'purple') call s:HL('goDeclaration', 'red') call s:HL('goDeclType', 'blue') call s:HL('goBuiltins', 'orange') " }}} " Lua: {{{ call s:HL('luaIn', 'red') call s:HL('luaFunction', 'aqua') call s:HL('luaTable', 'orange') " }}} " MoonScript: {{{ call s:HL('moonSpecialOp', 'light3') call s:HL('moonExtendedOp', 'light3') call s:HL('moonFunction', 'light3') call s:HL('moonObject', 'yellow') " }}} " Java: {{{ call s:HL('javaAnnotation', 'blue') call s:HL('javaDocTags', 'aqua') hi! link javaCommentTitle vimCommentTitle call s:HL('javaParen', 'light3') call s:HL('javaParen1', 'light3') call s:HL('javaParen2', 'light3') call s:HL('javaParen3', 'light3') call s:HL('javaParen4', 'light3') call s:HL('javaParen5', 'light3') call s:HL('javaOperator', 'orange') call s:HL('javaVarArg', 'green') " }}} " Functions ------------------------------------------------------------------- " Search Highlighting Cursor {{{ function! GruvboxHlsShowCursor() call s:HL('Cursor', 'dark0', g:gruvbox_hls_cursor) call s:HL('vCursor', 'dark0', g:gruvbox_hls_cursor) call s:HL('iCursor', 'dark0', g:gruvbox_hls_cursor) call s:HL('lCursor', 'dark0', g:gruvbox_hls_cursor) endfunction function! GruvboxHlsHideCursor() call s:HL('Cursor', 'none', 'none', 'inverse') call s:HL('vCursor', 'none', 'none', 'inverse') call s:HL('iCursor', 'none', 'none', 'inverse') call s:HL('lCursor', 'none', 'none', 'inverse') endfunction " }}} " vim: set sw=3 ts=3 sts=3 noet tw=80 ft=vim fdm=marker: ================================================ FILE: .vim/bundle/gruvbox/gruvbox_256palette.sh ================================================ #!/bin/sh if [ "${TERM%%-*}" = "screen" ]; then if [ -n "$TMUX" ]; then printf "\033Ptmux;\033\033]4;236;rgb:32/30/2f\007\033\\" printf "\033Ptmux;\033\033]4;234;rgb:1d/20/21\007\033\\" printf "\033Ptmux;\033\033]4;235;rgb:28/28/28\007\033\\" printf "\033Ptmux;\033\033]4;237;rgb:3c/38/36\007\033\\" printf "\033Ptmux;\033\033]4;239;rgb:50/49/45\007\033\\" printf "\033Ptmux;\033\033]4;241;rgb:66/5c/54\007\033\\" printf "\033Ptmux;\033\033]4;243;rgb:7c/6f/64\007\033\\" printf "\033Ptmux;\033\033]4;244;rgb:92/83/74\007\033\\" printf "\033Ptmux;\033\033]4;245;rgb:92/83/74\007\033\\" printf "\033Ptmux;\033\033]4;228;rgb:f4/e8/ba\007\033\\" printf "\033Ptmux;\033\033]4;230;rgb:ff/ff/c8\007\033\\" printf "\033Ptmux;\033\033]4;229;rgb:fd/f4/c1\007\033\\" printf "\033Ptmux;\033\033]4;223;rgb:eb/db/b2\007\033\\" printf "\033Ptmux;\033\033]4;250;rgb:d5/c4/a1\007\033\\" printf "\033Ptmux;\033\033]4;248;rgb:bd/ae/93\007\033\\" printf "\033Ptmux;\033\033]4;246;rgb:a8/99/84\007\033\\" printf "\033Ptmux;\033\033]4;167;rgb:fb/49/34\007\033\\" printf "\033Ptmux;\033\033]4;142;rgb:b8/bb/26\007\033\\" printf "\033Ptmux;\033\033]4;214;rgb:fa/bd/2f\007\033\\" printf "\033Ptmux;\033\033]4;109;rgb:83/a5/98\007\033\\" printf "\033Ptmux;\033\033]4;175;rgb:d3/86/9b\007\033\\" printf "\033Ptmux;\033\033]4;108;rgb:8e/c0/7c\007\033\\" printf "\033Ptmux;\033\033]4;208;rgb:fe/80/19\007\033\\" printf "\033Ptmux;\033\033]4;88;rgb:9d/00/06\007\033\\" printf "\033Ptmux;\033\033]4;100;rgb:79/74/0e\007\033\\" printf "\033Ptmux;\033\033]4;136;rgb:b5/76/14\007\033\\" printf "\033Ptmux;\033\033]4;24;rgb:07/66/78\007\033\\" printf "\033Ptmux;\033\033]4;96;rgb:8f/3f/71\007\033\\" printf "\033Ptmux;\033\033]4;66;rgb:42/7b/58\007\033\\" printf "\033Ptmux;\033\033]4;130;rgb:af/3a/03\007\033\\" else printf "\033P\033]4;236;rgb:32/30/2f\007\033\\" printf "\033P\033]4;234;rgb:1d/20/21\007\033\\" printf "\033P\033]4;235;rgb:28/28/28\007\033\\" printf "\033P\033]4;237;rgb:3c/38/36\007\033\\" printf "\033P\033]4;239;rgb:50/49/45\007\033\\" printf "\033P\033]4;241;rgb:66/5c/54\007\033\\" printf "\033P\033]4;243;rgb:7c/6f/64\007\033\\" printf "\033P\033]4;244;rgb:92/83/74\007\033\\" printf "\033P\033]4;245;rgb:92/83/74\007\033\\" printf "\033P\033]4;228;rgb:f4/e8/ba\007\033\\" printf "\033P\033]4;230;rgb:ff/ff/c8\007\033\\" printf "\033P\033]4;229;rgb:fd/f4/c1\007\033\\" printf "\033P\033]4;223;rgb:eb/db/b2\007\033\\" printf "\033P\033]4;250;rgb:d5/c4/a1\007\033\\" printf "\033P\033]4;248;rgb:bd/ae/93\007\033\\" printf "\033P\033]4;246;rgb:a8/99/84\007\033\\" printf "\033P\033]4;167;rgb:fb/49/34\007\033\\" printf "\033P\033]4;142;rgb:b8/bb/26\007\033\\" printf "\033P\033]4;214;rgb:fa/bd/2f\007\033\\" printf "\033P\033]4;109;rgb:83/a5/98\007\033\\" printf "\033P\033]4;175;rgb:d3/86/9b\007\033\\" printf "\033P\033]4;108;rgb:8e/c0/7c\007\033\\" printf "\033P\033]4;208;rgb:fe/80/19\007\033\\" printf "\033P\033]4;88;rgb:9d/00/06\007\033\\" printf "\033P\033]4;100;rgb:79/74/0e\007\033\\" printf "\033P\033]4;136;rgb:b5/76/14\007\033\\" printf "\033P\033]4;24;rgb:07/66/78\007\033\\" printf "\033P\033]4;96;rgb:8f/3f/71\007\033\\" printf "\033P\033]4;66;rgb:42/7b/58\007\033\\" printf "\033P\033]4;130;rgb:af/3a/03\007\033\\" fi else printf "\033]4;236;rgb:32/30/2f\033\\" printf "\033]4;234;rgb:1d/20/21\033\\" printf "\033]4;235;rgb:28/28/28\033\\" printf "\033]4;237;rgb:3c/38/36\033\\" printf "\033]4;239;rgb:50/49/45\033\\" printf "\033]4;241;rgb:66/5c/54\033\\" printf "\033]4;243;rgb:7c/6f/64\033\\" printf "\033]4;244;rgb:92/83/74\033\\" printf "\033]4;245;rgb:92/83/74\033\\" printf "\033]4;228;rgb:f4/e8/ba\033\\" printf "\033]4;230;rgb:ff/ff/c8\033\\" printf "\033]4;229;rgb:fd/f4/c1\033\\" printf "\033]4;223;rgb:eb/db/b2\033\\" printf "\033]4;250;rgb:d5/c4/a1\033\\" printf "\033]4;248;rgb:bd/ae/93\033\\" printf "\033]4;246;rgb:a8/99/84\033\\" printf "\033]4;167;rgb:fb/49/34\033\\" printf "\033]4;142;rgb:b8/bb/26\033\\" printf "\033]4;214;rgb:fa/bd/2f\033\\" printf "\033]4;109;rgb:83/a5/98\033\\" printf "\033]4;175;rgb:d3/86/9b\033\\" printf "\033]4;108;rgb:8e/c0/7c\033\\" printf "\033]4;208;rgb:fe/80/19\033\\" printf "\033]4;88;rgb:9d/00/06\033\\" printf "\033]4;100;rgb:79/74/0e\033\\" printf "\033]4;136;rgb:b5/76/14\033\\" printf "\033]4;24;rgb:07/66/78\033\\" printf "\033]4;96;rgb:8f/3f/71\033\\" printf "\033]4;66;rgb:42/7b/58\033\\" printf "\033]4;130;rgb:af/3a/03\033\\" fi ================================================ FILE: .vim/bundle/gruvbox/gruvbox_256palette_osx.sh ================================================ #!/bin/sh if [ "${TERM%%-*}" = "screen" ]; then if [ -n "$TMUX" ]; then printf "\033Ptmux;\033\033]4;236;rgb:26/24/23\007\033\\" printf "\033Ptmux;\033\033]4;234;rgb:16/18/19\007\033\\" printf "\033Ptmux;\033\033]4;235;rgb:1e/1e/1e\007\033\\" printf "\033Ptmux;\033\033]4;237;rgb:2e/2a/29\007\033\\" printf "\033Ptmux;\033\033]4;239;rgb:3f/39/35\007\033\\" printf "\033Ptmux;\033\033]4;241;rgb:53/4a/42\007\033\\" printf "\033Ptmux;\033\033]4;243;rgb:68/5c/51\007\033\\" printf "\033Ptmux;\033\033]4;244;rgb:7f/70/61\007\033\\" printf "\033Ptmux;\033\033]4;245;rgb:7f/70/61\007\033\\" printf "\033Ptmux;\033\033]4;228;rgb:f1/e4/ac\007\033\\" printf "\033Ptmux;\033\033]4;230;rgb:ff/ff/bc\007\033\\" printf "\033Ptmux;\033\033]4;229;rgb:fc/f3/b4\007\033\\" printf "\033Ptmux;\033\033]4;223;rgb:e6/d4/a3\007\033\\" printf "\033Ptmux;\033\033]4;250;rgb:cb/b8/90\007\033\\" printf "\033Ptmux;\033\033]4;248;rgb:af/9f/81\007\033\\" printf "\033Ptmux;\033\033]4;246;rgb:97/87/71\007\033\\" printf "\033Ptmux;\033\033]4;167;rgb:f7/30/28\007\033\\" printf "\033Ptmux;\033\033]4;142;rgb:aa/b0/1e\007\033\\" printf "\033Ptmux;\033\033]4;214;rgb:f7/b1/25\007\033\\" printf "\033Ptmux;\033\033]4;109;rgb:71/95/86\007\033\\" printf "\033Ptmux;\033\033]4;175;rgb:c7/70/89\007\033\\" printf "\033Ptmux;\033\033]4;108;rgb:7d/b6/69\007\033\\" printf "\033Ptmux;\033\033]4;208;rgb:fb/6a/16\007\033\\" printf "\033Ptmux;\033\033]4;88;rgb:89/00/09\007\033\\" printf "\033Ptmux;\033\033]4;100;rgb:66/62/0d\007\033\\" printf "\033Ptmux;\033\033]4;136;rgb:a5/63/11\007\033\\" printf "\033Ptmux;\033\033]4;24;rgb:0e/53/65\007\033\\" printf "\033Ptmux;\033\033]4;96;rgb:7b/2b/5e\007\033\\" printf "\033Ptmux;\033\033]4;66;rgb:35/6a/46\007\033\\" printf "\033Ptmux;\033\033]4;130;rgb:9d/28/07\007\033\\" else printf "\033P\033]4;236;rgb:26/24/23\007\033\\" printf "\033P\033]4;234;rgb:16/18/19\007\033\\" printf "\033P\033]4;235;rgb:1e/1e/1e\007\033\\" printf "\033P\033]4;237;rgb:2e/2a/29\007\033\\" printf "\033P\033]4;239;rgb:3f/39/35\007\033\\" printf "\033P\033]4;241;rgb:53/4a/42\007\033\\" printf "\033P\033]4;243;rgb:68/5c/51\007\033\\" printf "\033P\033]4;244;rgb:7f/70/61\007\033\\" printf "\033P\033]4;245;rgb:7f/70/61\007\033\\" printf "\033P\033]4;228;rgb:f1/e4/ac\007\033\\" printf "\033P\033]4;230;rgb:ff/ff/bc\007\033\\" printf "\033P\033]4;229;rgb:fc/f3/b4\007\033\\" printf "\033P\033]4;223;rgb:e6/d4/a3\007\033\\" printf "\033P\033]4;250;rgb:cb/b8/90\007\033\\" printf "\033P\033]4;248;rgb:af/9f/81\007\033\\" printf "\033P\033]4;246;rgb:97/87/71\007\033\\" printf "\033P\033]4;167;rgb:f7/30/28\007\033\\" printf "\033P\033]4;142;rgb:aa/b0/1e\007\033\\" printf "\033P\033]4;214;rgb:f7/b1/25\007\033\\" printf "\033P\033]4;109;rgb:71/95/86\007\033\\" printf "\033P\033]4;175;rgb:c7/70/89\007\033\\" printf "\033P\033]4;108;rgb:7d/b6/69\007\033\\" printf "\033P\033]4;208;rgb:fb/6a/16\007\033\\" printf "\033P\033]4;88;rgb:89/00/09\007\033\\" printf "\033P\033]4;100;rgb:66/62/0d\007\033\\" printf "\033P\033]4;136;rgb:a5/63/11\007\033\\" printf "\033P\033]4;24;rgb:0e/53/65\007\033\\" printf "\033P\033]4;96;rgb:7b/2b/5e\007\033\\" printf "\033P\033]4;66;rgb:35/6a/46\007\033\\" printf "\033P\033]4;130;rgb:9d/28/07\007\033\\" fi else printf "\033]4;236;rgb:26/24/23\033\\" printf "\033]4;234;rgb:16/18/19\033\\" printf "\033]4;235;rgb:1e/1e/1e\033\\" printf "\033]4;237;rgb:2e/2a/29\033\\" printf "\033]4;239;rgb:3f/39/35\033\\" printf "\033]4;241;rgb:53/4a/42\033\\" printf "\033]4;243;rgb:68/5c/51\033\\" printf "\033]4;244;rgb:7f/70/61\033\\" printf "\033]4;245;rgb:7f/70/61\033\\" printf "\033]4;228;rgb:f1/e4/ac\033\\" printf "\033]4;230;rgb:ff/ff/bc\033\\" printf "\033]4;229;rgb:fc/f3/b4\033\\" printf "\033]4;223;rgb:e6/d4/a3\033\\" printf "\033]4;250;rgb:cb/b8/90\033\\" printf "\033]4;248;rgb:af/9f/81\033\\" printf "\033]4;246;rgb:97/87/71\033\\" printf "\033]4;167;rgb:f7/30/28\033\\" printf "\033]4;142;rgb:aa/b0/1e\033\\" printf "\033]4;214;rgb:f7/b1/25\033\\" printf "\033]4;109;rgb:71/95/86\033\\" printf "\033]4;175;rgb:c7/70/89\033\\" printf "\033]4;108;rgb:7d/b6/69\033\\" printf "\033]4;208;rgb:fb/6a/16\033\\" printf "\033]4;88;rgb:89/00/09\033\\" printf "\033]4;100;rgb:66/62/0d\033\\" printf "\033]4;136;rgb:a5/63/11\033\\" printf "\033]4;24;rgb:0e/53/65\033\\" printf "\033]4;96;rgb:7b/2b/5e\033\\" printf "\033]4;66;rgb:35/6a/46\033\\" printf "\033]4;130;rgb:9d/28/07\033\\" fi ================================================ FILE: .vim/bundle/html5.vim/CHANGES.markdown ================================================ # html5.vim ## Change Log ### Version 0.27 - Added inline SVG ### Version 0.26 - Support multi-value attributes (Most of them are WAI-ARIA attributes) - Some old complete function bug fix ### Version 0.25 - WAI-ARIA support bug fix - WAI-ARIA complete supports all doctypes now ### Version 0.2 - attributes now must match from beginning - fix some attr(\w*on\w*) will use jscomplete for their value - add vim-makefile ### Version 0.1 - First Version - Add html5 dictionary file and doctype support ================================================ FILE: .vim/bundle/html5.vim/Makefile ================================================ # vim:filetype=make:foldmethod=marker:fdl=0: # # Makefile: install/uninstall/link vim plugin files. # Author: Cornelius # Date: 一 3/15 22:49:26 2010 # Version: 1.0 # # PLEASE DO NOT EDIT THIS FILE. THIS FILE IS AUTO-GENERATED FROM Makefile.tpl # LICENSE {{{ # Copyright (c) 2010 # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following # conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # }}} # VIM RECORD FORMAT: {{{ # { # version => 0.2, # record spec version # generated_by => 'Vimana-' . $Vimana::VERSION, # install_type => 'auto', # auto , make , rake ... etc # package => $self->package_name, # files => \@e, # } # }}} # INTERNAL VARIABLES {{{ RECORD_FILE=.record PWD=`pwd` README_FILES=`ls -1 | grep -i readme` WGET_OPT=-c -nv CURL_OPT= RECORD_SCRIPT=.mkrecord TAR=tar czvf GIT_SOURCES= # INTERNAL FUNCTIONS {{{ record_file = \ PTYPE=`cat $(1) | perl -nle 'print $$1 if /^"\s*script\s*type:\s*(\S*)$$/i'` ;\ echo $(VIMRUNTIME)/$$PTYPE/$(1) >> $(2) # }}} # PUBLIC FUNCTIONS {{{ GIT_SOURCES= DEPEND_DIR=/tmp/vim-deps # Usage: # # $(call install_git_sources) # install_git_source = \ PWD=$(PWD) ; \ mkdir -p $(DEPEND_DIR) ; \ cd $(DEPEND_DIR) ; \ for git_uri in $(GIT_SOURCES) ; do \ OUTDIR=$$(echo $$git_uri | perl -pe 's{^.*/}{}') ;\ echo $$OUTDIR ; \ if [[ -e $$OUTDIR ]] ; then \ cd $$OUTDIR ; \ git pull origin master && \ make install && cd .. ; \ else \ git clone $$git_uri $$OUTDIR && \ cd $$OUTDIR && \ make install && cd .. ; \ fi; \ done ; # install file by inspecting content install_file = \ PTYPE=`cat $(1) | perl -nle 'print $$1 if /^"\s*script\s*type:\s*(\S*)$$/i'` ;\ cp -v $(1) $(VIMRUNTIME)/$$PTYPE/$(1) link_file = \ PTYPE=`cat $(1) | perl -nle 'print $$1 if /^"\s*script\s*type:\s*(\S*)$$/i'` ;\ cp -v $(1) $(VIMRUNTIME)/$$PTYPE/$(1) unlink_file = \ PTYPE=`cat $(1) | perl -nle 'print $$1 if /^"\s*script\s*type:\s*(\S*)$$/i'` ;\ rm -fv $(VIMRUNTIME)/$$PTYPE/$(1) # fetch script from an url fetch_url = \ @if [[ -e $(2) ]] ; then \ exit \ ; fi \ ; echo " => $(2)" \ ; if [[ ! -z `which curl` ]] ; then \ curl $(CURL_OPT) $(1) -o $(2) ; \ ; elif [[ ! -z `which wget` ]] ; then \ wget $(WGET_OPT) $(1) -O $(2) \ ; fi \ ; echo $(2) >> .bundlefiles install_source = \ for git_uri in $(GIT_SOURCES) ; do \ OUTDIR=$$(echo $$git_uri | perl -pe 's{^.*/}{}') ;\ echo $$OUTDIR ; \ done # fetch script from github fetch_github = \ @if [[ -e $(5) ]] ; then \ exit \ ; fi \ ; echo " => $(5)" \ ; if [[ ! -z `which curl` ]] ; then \ curl $(CURL_OPT) http://github.com/$(1)/$(2)/raw/$(3)/$(4) -o $(5) \ ; elif [[ ! -z `which wget` ]] ; then \ wget $(WGET_OPT) http://github.com/$(1)/$(2)/raw/$(3)/$(4) -O $(5) \ ; fi \ ; echo $(5) >> .bundlefiles # fetch script from local file fetch_local = @cp -v $(1) $(2) \ ; @echo $(2) >> .bundlefiles # 1: NAME , 2: URI dep_from_git = \ D=/tmp/$(1)-$$RANDOM ; git clone $(2) $$D ; cd $$D ; make install ; dep_from_svn = \ D=/tmp/$(1)-$$RANDOM ; svn checkout $(2) $$D ; cd $$D ; make install ; # }}} # }}} # ======= DEFAULT CONFIG ======= {{{ # Default plugin name NAME=`basename \`pwd\`` VERSION=0.1 # Files to add to tarball: DIRS=`ls -1F | grep / | sed -e 's/\///'` # Runtime path to install: VIMRUNTIME=~/.vim # Other Files to be added: FILES=`ls -1 | grep '.vim$$'` MKFILES=Makefile `ls -1 | grep '.mk$$'` # ======== USER CONFIG ======= {{{ # please write config in config.mk # this will override default config # # Custom Name: # # NAME=[plugin name] # # Custom dir list: # # DIRS=autoload after doc syntax plugin # # Files to add to tarball: # # FILES= # # Bundle dependent scripts: # # bundle-deps: # $(call fetch_github,[account id],[project],[branch],[source path],[target path]) # $(call fetch_url,[file url],[target path]) # $(call fetch_local,[from],[to]) SHELL=bash CONFIG_FILE=config.mk -include ~/.vimauthor.mk -include $(CONFIG_FILE) # }}} # }}} # ======= SECTIONS ======= {{{ -include ext.mk all: install-deps install install-deps: # check required binaries [[ -n $$(which git) ]] [[ -n $$(which bash) ]] [[ -n $$(which vim) ]] [[ -n $$(which wget) || -n $$(which curl) ]] $(call install_git_sources) check-require: @if [[ -n `which wget` || -n `which curl` || -n `which fetch` ]]; then echo "wget|curl|fetch: OK" ; else echo "wget|curl|fetch: NOT OK" ; fi @if [[ -n `which vim` ]] ; then echo "vim: OK" ; else echo "vim: NOT OK" ; fi config: @rm -f $(CONFIG_FILE) @echo "NAME=" >> $(CONFIG_FILE) @echo "VERSION=" >> $(CONFIG_FILE) @echo "#DIRS=" @echo "#FILES=" @echo "" >> $(CONFIG_FILE) @echo "bundle-deps:" >> $(CONFIG_FILE) @echo "\t\t\$$(call fetch_github,ID,REPOSITORY,BRANCH,PATH,TARGET_PATH)" >> $(CONFIG_FILE) @echo "\t\t\$$(call fetch_url,FILE_URL,TARGET_PATH)" >> $(CONFIG_FILE) init-author: @echo "AUTHOR=" > ~/.vimauthor.mk bundle-deps: bundle: bundle-deps dist: bundle mkfilelist @$(TAR) $(NAME)-$(VERSION).tar.gz --exclude '*.svn' --exclude '.git' $(DIRS) $(README_FILES) $(FILES) $(MKFILES) @echo "$(NAME)-$(VERSION).tar.gz is ready." init-runtime: @mkdir -vp $(VIMRUNTIME) @mkdir -vp $(VIMRUNTIME)/record @if [[ -n "$(DIRS)" ]] ; then find $(DIRS) -type d | while read dir ; do \ mkdir -vp $(VIMRUNTIME)/$$dir ; done ; fi release: if [[ -n `which vimup` ]] ; then \ fi pure-install: @echo "Using Shell:" $(SHELL) @echo "Installing" @if [[ -n "$(DIRS)" ]] ; then find $(DIRS) -type f | while read file ; do \ cp -v $$file $(VIMRUNTIME)/$$file ; done ; fi @echo "$(FILES)" | while read vimfile ; do \ if [[ -n $$vimfile ]] ; then \ $(call install_file,$$vimfile) ; fi ; done install: init-runtime bundle pure-install record uninstall-files: @echo "Uninstalling" @if [[ -n "$(DIRS)" ]] ; then find $(DIRS) -type f | while read file ; do \ rm -fv $(VIMRUNTIME)/$$file ; done ; fi @echo "$(FILES)" | while read vimfile ; do \ if [[ -n $$vimfile ]] ; then \ $(call unlink_file,$$vimfile) ; fi ; done uninstall: uninstall-files rmrecord link: init-runtime @echo "Linking" @if [[ -n "$(DIRS)" ]]; then find $(DIRS) -type f | while read file ; do \ ln -sfv $(PWD)/$$file $(VIMRUNTIME)/$$file ; done ; fi @echo "$(FILES)" | while read vimfile ; do \ if [[ -n $$vimfile ]] ; then \ $(call link_file,$$vimfile) ; fi ; done mkfilelist: @echo $(NAME) > $(RECORD_FILE) @echo $(VERSION) >> $(RECORD_FILE) @if [[ -n "$(DIRS)" ]] ; then find $(DIRS) -type f | while read file ; do \ echo $(VIMRUNTIME)/$$file >> $(RECORD_FILE) ; done ; fi @echo "$(FILES)" | while read vimfile ; do \ if [[ -n $$vimfile ]] ; then \ $(call record_file,$$vimfile,$(RECORD_FILE)) ; fi ; done vimball-edit: find $(DIRS) -type f > .tmp_list vim .tmp_list vim .tmp_list -c ":%MkVimball $(NAME)-$(VERSION) ." -c "q" @rm -vf .tmp_list @echo "$(NAME)-$(VERSION).vba is ready." vimball: find $(DIRS) -type f > .tmp_list vim .tmp_list -c ":%MkVimball $(NAME)-$(VERSION) ." -c "q" @rm -vf .tmp_list @echo "$(NAME)-$(VERSION).vba is ready." mkrecordscript: @echo "" > $(RECORD_SCRIPT) @echo "fun! s:mkmd5(file)" >> $(RECORD_SCRIPT) @echo " if executable('md5')" >> $(RECORD_SCRIPT) @echo " return system('cat ' . a:file . ' | md5')" >> $(RECORD_SCRIPT) @echo " else" >> $(RECORD_SCRIPT) @echo " return \"\"" >> $(RECORD_SCRIPT) @echo " endif" >> $(RECORD_SCRIPT) @echo "endf" >> $(RECORD_SCRIPT) @echo "let files = readfile('.record')" >> $(RECORD_SCRIPT) @echo "let package_name = remove(files,0)" >> $(RECORD_SCRIPT) @echo "let script_version = remove(files,0)" >> $(RECORD_SCRIPT) @echo "let record = { 'version' : 0.3 , 'generated_by': 'Vim-Makefile' , 'script_version': script_version , 'install_type' : 'makefile' , 'package' : package_name , 'files': [ ] }" >> $(RECORD_SCRIPT) @echo "for file in files " >> $(RECORD_SCRIPT) @echo " let md5 = s:mkmd5(file)" >> $(RECORD_SCRIPT) @echo " cal add( record.files , { 'checksum': md5 , 'file': file } )" >> $(RECORD_SCRIPT) @echo "endfor" >> $(RECORD_SCRIPT) @echo "redir => output" >> $(RECORD_SCRIPT) @echo "silent echon record" >> $(RECORD_SCRIPT) @echo "redir END" >> $(RECORD_SCRIPT) @echo "let content = join(split(output,\"\\\\n\"),'')" >> $(RECORD_SCRIPT) @echo "let record_file = expand('~/.vim/record/' . package_name )" >> $(RECORD_SCRIPT) @echo "cal writefile( [content] , record_file )" >> $(RECORD_SCRIPT) @echo "cal delete('.record')" >> $(RECORD_SCRIPT) @echo "echo \"Done\"" >> $(RECORD_SCRIPT) record: mkfilelist mkrecordscript vim --noplugin -V10install.log -c "so $(RECORD_SCRIPT)" -c "q" @echo "Vim script record making log: install.log" # @rm -vf $(RECORD_FILE) rmrecord: @echo "Removing Record" @rm -vf $(VIMRUNTIME)/record/$(NAME) clean: clean-bundle-deps @rm -vf $(RECORD_FILE) @rm -vf $(RECORD_SCRIPT) @rm -vf install.log @rm -vf *.tar.gz clean-bundle-deps: @echo "Removing Bundled scripts..." @if [[ -e .bundlefiles ]] ; then \ rm -fv `echo \`cat .bundlefiles\``; \ fi @rm -fv .bundlefiles update: @echo "Updating Makefile..." @URL=http://github.com/c9s/vim-makefile/raw/master/Makefile ; \ if [[ -n `which curl` ]]; then \ curl $$URL -o Makefile ; \ if [[ -n `which wget` ]]; then \ wget -c $$URL ; \ elif [[ -n `which fetch` ]]; then \ fetch $$URL ; \ fi version: @echo version - $(MAKEFILE_VERSION) # }}} ================================================ FILE: .vim/bundle/html5.vim/README.md ================================================ # html5.vim HTML5 + inline SVG omnicomplete funtion, indent and syntax for Vim. Based on the default htmlcomplete.vim. ## Feature - Support all new elements and attribute. - Support all SVG elements - Support [microdata][microdata]. - Support [RDFa][RDFa]. - Support [WAI-ARIA][aria]. ## Install Use [Vundle][] or [pathogen.vim][] is recommended. [Vundle]:https://github.com/gmarik/vundle [pathogen.vim]:https://github.com/tpope/vim-pathogen ## Configure Disable event-handler attributes support: let g:html5_event_handler_attributes_complete = 0 Disable RDFa attributes support: let g:html5_rdfa_attributes_complete = 0 Disable microdata attributes support: let g:html5_microdata_attributes_complete = 0 Disable WAI-ARIA attribute support: let g:html5_aria_attributes_complete = 0 ## Change Log ### Version 0.27 - Support inline SVG ## License Copyright (c) 2010-2013 Wei-Ko Kao, 2012 HT de Beer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ## References 1. [HTML5 Spec][1] 2. [HTML5 Markup][2] 3. [Custom Data Attributes][3] 4. [microdata][4] 5. [RDFa 1.0 Rec][5] 6. [RDFa 1.1 Core WD][6] 7. [WAI-ARIA][7] 8. [IANA Language Sub Tags][8] 9. [IANA Charset][9] 10. [SVG Spec][10] [html5.vim]:http://www.vim.org/scripts/script.php?script_id=3236 [microdata]:http://dev.w3.org/html5/md/ [RDFa]:http://www.w3.org/TR/rdfa-syntax/ [aria]:http://www.w3.org/TR/wai-aria/ [1]:http://dev.w3.org/html5/spec/ [2]:http://dev.w3.org/html5/markup/ [3]:http://dev.w3.org/html5/spec/Overview.html#custom-data-attribute [4]:http://dev.w3.org/html5/md/ [5]:http://www.w3.org/TR/rdfa-syntax/#a_xhtmlrdfa_dtd [6]:http://www.w3.org/TR/rdfa-core/ [7]:http://www.w3.org/TR/wai-aria/ [8]:http://www.iana.org/assignments/language-subtag-registry [9]:http://www.iana.org/assignments/character-sets [10]:http://www.w3.org/TR/SVG/ ================================================ FILE: .vim/bundle/html5.vim/autoload/htmlcomplete.vim ================================================ " Vim completion script " Language: HTML and XHTML " Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) " Last Change: 2006 Oct 19 " Modified: othree " Changes: Add HTML5, WAI-ARIA support " Last Change: 2010 Sep 25 if !exists('g:aria_attributes_complete') let g:aria_attributes_complete = 1 endif function! htmlcomplete#CompleteTags(findstart, base) if a:findstart " locate the start of the word let line = getline('.') let start = col('.') - 1 let curline = line('.') let compl_begin = col('.') - 2 while start >= 0 && line[start - 1] =~ '\(\k\|[!:.-]\)' let start -= 1 endwhile " Handling of entities {{{ if start >= 0 && line[start - 1] =~ '&' let b:entitiescompl = 1 let b:compl_context = '' return start endif " }}} " Handling of ' if 0 < searchpair(css, '', csse, 'nWb') \ && 0 < searchpair(css, '', csse, 'nW') " we're inside style if getline(lnum) !~ css && getline(a:lnum) !~ csse if restore_ic == 0 setlocal noic endif if s:cssindent == '' return cindent(a:lnum) else execute 'let ind = ' . s:cssindent return ind endif endif if getline(a:lnum) =~ csse return indent(searchpair(css, '', csse, 'nWb')) endif endif if getline(lnum) =~ '\c' " line before the current line a:lnum contains " a closing . --> search for line before " starting
             to restore the indent.
                    let preline = prevnonblank(search('\c
            ', 'bW') - 1)
                    if preline > 0
                        if restore_ic == 0
                          setlocal noic
                        endif
            
                        if 0 == match(getline(a:lnum), '^\s*HtmlIndentSum(lnum, -1)
                let ind = ind + HtmlIndentSum(a:lnum, 0)
            
                " Fix for conditional comment
                if getline(a:lnum) =~ '\c'
                    let ind = ind - 1
                endif
            
                let lind = indent(lnum)
            
                " for tags in s:omittable
                  " let tags_exp = '<\(' . join(tags, '\|') . '\)>'
                  " let close_tags_exp = ''
                  " if getline(a:lnum) =~ tags_exp
                    " let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S'  , 'bnW')
                    " let prev_tag = search(tags_exp, 'bW', block_start)
                    " let prev_closetag = search(close_tags_exp, 'W', a:lnum)
                    " if prev_tag && !prev_closetag
                      " let ind = ind - 1
                    " endif
                  " endif
            
                  " if getline(a:lnum) =~ ''
                    " let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S'  , 'bnW')
                    " let prev_tag = search(tags_exp, 'bW', block_start)
                    " let prev_closetag = search(close_tags_exp, 'W', a:lnum)
                    " if prev_tag && !prev_closetag
                      " let ind = ind - 1
                    " endif
                  " endif
                " endfor
            
                if restore_ic == 0
                    setlocal noic
                endif
            
                return lind + (&sw * ind)
            endfun
            
            let &cpo = s:cpo_save
            unlet s:cpo_save
            
            " [-- EOF /indent/html.vim --]
            
            
            ================================================
            FILE: .vim/bundle/html5.vim/syntax/html/aria.vim
            ================================================
            " Vim syntax file
            " Language:	    WAI-ARIA
            " Maintainer:	othree 
            " URL:		    http://github.com/othree/html5-syntax.vim
            " Last Change:  2010-09-25
            " License:      MIT
            " Changes:      update to Draft 16 September 2010
            
            setlocal iskeyword+=-
            
            " WAI-ARIA States and Properties
            " http://www.w3.org/TR/wai-aria/states_and_properties
            syn keyword  htmlArg contained role
            
            " Global States and Properties
            syn keyword  htmlArg contained aria-atomic aria-busy aria-controls aria-describedby
            syn keyword  htmlArg contained aria-disabled aria-dropeffect aria-flowto aria-grabbed
            syn keyword  htmlArg contained aria-haspopup aria-hidden aria-invalid aria-label
            syn keyword  htmlArg contained aria-labelledby aria-live aria-owns aria-relevant
            
            " Widget Attributes
            syn keyword  htmlArg contained aria-autocomplete aria-checked aria-disabled aria-expanded
            syn keyword  htmlArg contained aria-haspopup aria-hidden aria-invalid aria-label
            syn keyword  htmlArg contained aria-level aria-multiline aria-multiselectable aria-orientation
            syn keyword  htmlArg contained aria-pressed aria-readonly aria-required aria-selected
            syn keyword  htmlArg contained aria-sort aria-valuemax aria-valuemin aria-valuenow aria-valuetext
            
            " Live Region Attributes
            syn keyword  htmlArg contained aria-atomic aria-busy aria-live aria-relevant
            
            " Drag-and-Drop attributes
            syn keyword  htmlArg contained aria-dropeffect aria-grabbed
            
            " Relationship Attributes
            syn keyword  htmlArg contained aria-activedescendant aria-controls aria-describedby aria-flowto
            syn keyword  htmlArg contained aria-labelledby aria-owns aria-posinset aria-setsize
            
            
            
            ================================================
            FILE: .vim/bundle/html5.vim/syntax/html/rdfa.vim
            ================================================
            " Vim syntax file
            " Language:     RDFa
            " Maintainer:   othree 
            " URL:          http://github.com/othree/html5-syntax.vim
            " Last Change:  2012-06-08
            " License:      MIT
            " Changes:      update to Rec 07 June 2012
            
            " RDFa
            " http://www.w3.org/TR/rdfa-syntax/#s_syntax
            syn keyword htmlArg contained about content datatype href inlist prefix property rel resource rev src typeof vocab
            
            
            ================================================
            FILE: .vim/bundle/html5.vim/syntax/html.vim
            ================================================
            " Vim syntax file
            " Language:	HTML (version 5)
            " Maintainer:	Rodrigo Machado 
            " URL:		http://rm.blog.br/vim/syntax/html.vim
            " Last Change:  2009 Aug 19
            " License:      Public domain
            "               (but let me know if you like :) )
            "
            " Note: This file just adds the new tags from HTML 5
            "       and don't replace default html.vim syntax file
            "
            " Modified:     othree 
            " Changes:      update to Draft 13 January 2011
            "               add complete new attributes
            "               add microdata Attributes
            "               add bdi element
            " Modified:     htdebeer 
            " Changes:      add common SVG elements and attributes for inline SVG
            
            " HTML 5 tags
            syn keyword htmlTagName contained article aside audio canvas command
            syn keyword htmlTagName contained datalist details dialog embed figcaption figure footer
            syn keyword htmlTagName contained header hgroup keygen main mark meter menu nav output
            syn keyword htmlTagName contained progress ruby rt rp section source summary time track video data
            syn keyword htmlTagName contained template content shadow
            syn keyword htmlTagName contained wbr bdi
            
            " SVG tags
            " http://www.w3.org/TR/SVG/
            " as found in http://www.w3.org/TR/SVG/eltindex.html
            syn keyword htmlTagName contained svg 
            syn keyword htmlTagName contained altGlyph altGlyphDef altGlyphItem 
            syn keyword htmlTagName contained animate animateColor animateMotion animateTransform 
            syn keyword htmlTagName contained circle ellipse rect line polyline polygon image path
            syn keyword htmlTagName contained clipPath color-profile cursor 
            syn keyword htmlTagName contained defs desc g symbol view use switch foreignObject
            syn keyword htmlTagName contained filter feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence 
            syn keyword htmlTagName contained font font-face font-face-format font-face-name font-face-src font-face-uri 
            syn keyword htmlTagName contained glyph glyphRef hkern 
            syn keyword htmlTagName contained linearGradient marker mask pattern radialGradient set stop
            syn keyword htmlTagName contained missing-glyph mpath 
            syn keyword htmlTagName contained text textPath tref tspan vkern
            
            " Custom Element
            syn match htmlTagName contained "\<[a-z_]\+\(\-[a-z_]\+\)\+\>"
            
            " HTML 5 arguments
            " Core Attributes
            syn keyword htmlArg contained accesskey class contenteditable contextmenu dir 
            syn keyword htmlArg contained draggable hidden id is lang spellcheck style tabindex title translate
            " Event-handler Attributes
            syn keyword htmlArg contained onabort onblur oncanplay oncanplaythrough onchange
            syn keyword htmlArg contained onclick oncontextmenu ondblclick ondrag ondragend ondragenter ondragleave ondragover 
            syn keyword htmlArg contained ondragstart ondrop ondurationchange onemptied onended onerror onfocus onformchange 
            syn keyword htmlArg contained onforminput oninput oninvalid onkeydown onkeypress onkeyup onload onloadeddata 
            syn keyword htmlArg contained onloadedmetadata onloadstart onmousedown onmousemove onmouseout onmouseover onmouseup
            syn keyword htmlArg contained onmousewheel onpause onplay onplaying onprogress onratechange onreadystatechange 
            syn keyword htmlArg contained onscroll onseeked onseeking onselect onshow onstalled onsubmit onsuspend ontimeupdate 
            syn keyword htmlArg contained onvolumechange onwaiting
            " XML Attributes
            syn keyword htmlArg contained xml:lang xml:space xml:base xmlns
            " new features
            " 
            syn keyword htmlArg contained onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload 
            syn keyword htmlArg contained onmessage onoffline ononline onpopstate onredo onresize onstorage onundo onunload
            " 
            ' " line before the current line a:lnum contains " a closing
            . --> search for line before " starting
             to restore the indent.
                    let preline = prevnonblank(search('\c
            ', 'bW') - 1)
                    if preline > 0
                        if restore_ic == 0
                          setlocal noic
                        endif
            
                        if 0 == match(getline(a:lnum), '^\s*HtmlIndentSum(lnum, -1)
                let ind = ind + HtmlIndentSum(a:lnum, 0)
            
                " Fix for conditional comment
                if getline(a:lnum) =~ '\c'
                    let ind = ind - 1
                endif
            
                let lind = indent(lnum)
            
                " for tags in s:omittable
                  " let tags_exp = '<\(' . join(tags, '\|') . '\)>'
                  " let close_tags_exp = ''
                  " if getline(a:lnum) =~ tags_exp
                    " let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S'  , 'bnW')
                    " let prev_tag = search(tags_exp, 'bW', block_start)
                    " let prev_closetag = search(close_tags_exp, 'W', a:lnum)
                    " if prev_tag && !prev_closetag
                      " let ind = ind - 1
                    " endif
                  " endif
            
                  " if getline(a:lnum) =~ ''
                    " let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S'  , 'bnW')
                    " let prev_tag = search(tags_exp, 'bW', block_start)
                    " let prev_closetag = search(close_tags_exp, 'W', a:lnum)
                    " if prev_tag && !prev_closetag
                      " let ind = ind - 1
                    " endif
                  " endif
                " endfor
            
                if restore_ic == 0
                    setlocal noic
                endif
            
                return lind + (&sw * ind)
            endfun
            
            let &cpo = s:cpo_save
            unlet s:cpo_save
            
            " [-- EOF /indent/html.vim --]
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/jade.vim
            ================================================
            " Vim indent file
            " Language: Jade
            " Maintainer: Joshua Borton
            " Credits: Tim Pope (vim-jade)
            " Last Change: 2010 Sep 22
            
            if exists("b:did_indent")
              finish
            endif
            
            unlet! b:did_indent
            let b:did_indent = 1
            
            setlocal autoindent
            setlocal indentexpr=GetJadeIndent()
            setlocal indentkeys=o,O,*,},],0),!^F
            
            " Only define the function once.
            if exists("*GetJadeIndent")
              finish
            endif
            
            let s:attributes = '\%((.\{-\})\)'
            let s:tag = '\([%.#][[:alnum:]_-]\+\|'.s:attributes.'\)*[<>]*'
            
            if !exists('g:jade_self_closing_tags')
              let g:jade_self_closing_tags = 'meta|link|img|hr|br|input'
            endif
            
            setlocal formatoptions+=r
            setlocal comments+=n:\|
            
            function! GetJadeIndent()
              let lnum = prevnonblank(v:lnum-1)
              if lnum == 0
                return 0
              endif
              let line = substitute(getline(lnum),'\s\+$','','')
              let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','')
              let lastcol = strlen(line)
              let line = substitute(line,'^\s\+','','')
              let indent = indent(lnum)
              let cindent = indent(v:lnum)
              let increase = indent + &sw
              if indent == indent(lnum)
                let indent = cindent <= indent ? -1 : increase
              endif
            
              let group = synIDattr(synID(lnum,lastcol,1),'name')
            
              if line =~ '^!!!'
                return indent
              elseif line =~ '^/\%(\[[^]]*\]\)\=$'
                return increase
              elseif line =~ '^\%(if\|else\|unless\|for\|each\|block\|mixin\|append\|case\|when\)'
                return increase
              elseif line =~ '^'.s:tag.'[&!]\=[=~-].*,\s*$'
                return increase
              elseif line == '-#'
                return increase
              elseif line =~? '^\v%('.g:jade_self_closing_tags.')>'
                return indent
              elseif group =~? '\v^%(jadeAttributesDelimiter|jadeClass|jadeId|htmlTagName|htmlSpecialTagName|jadeFilter)$'
                return increase
              else
                return indent
              endif
            endfunction
            
            " vim:set sw=2:
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/javascript.vim
            ================================================
            " Vim indent file
            " Language: Javascript
            " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org
            
            " 0. Initialization {{{1
            " =================
            
            " Only load this indent file when no other was loaded.
            if exists("b:did_indent")
              finish
            endif
            let b:did_indent = 1
            
            setlocal nosmartindent
            
            " Now, set up our indentation expression and keys that trigger it.
            setlocal indentexpr=GetJavascriptIndent()
            setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e
            
            " Only define the function once.
            if exists("*GetJavascriptIndent")
              finish
            endif
            
            let s:cpo_save = &cpo
            set cpo&vim
            
            " 1. Variables {{{1
            " ============
            
            let s:js_keywords = '^\s*\(break\|case\|catch\|continue\|debugger\|default\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)'
            
            " Regex of syntax group names that are or delimit string or are comments.
            let s:syng_strcom = 'string\|regex\|comment\c'
            
            " Regex of syntax group names that are strings.
            let s:syng_string = 'regex\c'
            
            " Regex of syntax group names that are strings or documentation.
            let s:syng_multiline = 'comment\c'
            
            " Regex of syntax group names that are line comment.
            let s:syng_linecom = 'linecomment\c'
            
            " Expression used to check whether we should skip a match with searchpair().
            let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'"
            
            let s:line_term = '\s*\%(\%(\/\/\).*\)\=$'
            
            " Regex that defines continuation lines, not including (, {, or [.
            let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@[^{;]*' . s:line_term
            
            " Regex that defines blocks.
            let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term
            
            let s:var_stmt = '^\s*var'
            
            let s:comma_first = '^\s*,'
            let s:comma_last = ',\s*$'
            
            let s:ternary = '^\s\+[?|:]'
            let s:ternary_q = '^\s\+?'
            
            " 2. Auxiliary Functions {{{1
            " ======================
            
            " Check if the character at lnum:col is inside a string, comment, or is ascii.
            function s:IsInStringOrComment(lnum, col)
              return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
            endfunction
            
            " Check if the character at lnum:col is inside a string.
            function s:IsInString(lnum, col)
              return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string
            endfunction
            
            " Check if the character at lnum:col is inside a multi-line comment.
            function s:IsInMultilineComment(lnum, col)
              return !s:IsLineComment(a:lnum, a:col) && synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_multiline
            endfunction
            
            " Check if the character at lnum:col is a line comment.
            function s:IsLineComment(lnum, col)
              return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_linecom
            endfunction
            
            " Find line above 'lnum' that isn't empty, in a comment, or in a string.
            function s:PrevNonBlankNonString(lnum)
              let in_block = 0
              let lnum = prevnonblank(a:lnum)
              while lnum > 0
                " Go in and out of blocks comments as necessary.
                " If the line isn't empty (with opt. comment) or in a string, end search.
                let line = getline(lnum)
                if line =~ '/\*'
                  if in_block
                    let in_block = 0
                  else
                    break
                  endif
                elseif !in_block && line =~ '\*/'
                  let in_block = 1
                elseif !in_block && line !~ '^\s*\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line)))
                  break
                endif
                let lnum = prevnonblank(lnum - 1)
              endwhile
              return lnum
            endfunction
            
            " Find line above 'lnum' that started the continuation 'lnum' may be part of.
            function s:GetMSL(lnum, in_one_line_scope)
              " Start on the line we're at and use its indent.
              let msl = a:lnum
              let lnum = s:PrevNonBlankNonString(a:lnum - 1)
              while lnum > 0
                " If we have a continuation line, or we're in a string, use line as MSL.
                " Otherwise, terminate search as we have found our MSL already.
                let line = getline(lnum)
                let col = match(line, s:msl_regex) + 1
                if (col > 0 && !s:IsInStringOrComment(lnum, col)) || s:IsInString(lnum, strlen(line))
                  let msl = lnum
                else
                  " Don't use lines that are part of a one line scope as msl unless the
                  " flag in_one_line_scope is set to 1
                  "
                  if a:in_one_line_scope
                    break
                  end
                  let msl_one_line = s:Match(lnum, s:one_line_scope_regex)
                  if msl_one_line == 0
                    break
                  endif
                endif
                let lnum = s:PrevNonBlankNonString(lnum - 1)
              endwhile
              return msl
            endfunction
            
            function s:RemoveTrailingComments(content)
              let single = '\/\/\(.*\)\s*$'
              let multi = '\/\*\(.*\)\*\/\s*$'
              return substitute(substitute(a:content, single, '', ''), multi, '', '')
            endfunction
            
            " Find if the string is inside var statement (but not the first string)
            function s:InMultiVarStatement(lnum)
              let lnum = s:PrevNonBlankNonString(a:lnum - 1)
            
            "  let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name')
            
              " loop through previous expressions to find a var statement
              while lnum > 0
                let line = getline(lnum)
            
                " if the line is a js keyword
                if (line =~ s:js_keywords)
                  " check if the line is a var stmt
                  " if the line has a comma first or comma last then we can assume that we
                  " are in a multiple var statement
                  if (line =~ s:var_stmt)
                    return lnum
                  endif
            
                  " other js keywords, not a var
                  return 0
                endif
            
                let lnum = s:PrevNonBlankNonString(lnum - 1)
              endwhile
            
              " beginning of program, not a var
              return 0
            endfunction
            
            " Find line above with beginning of the var statement or returns 0 if it's not
            " this statement
            function s:GetVarIndent(lnum)
              let lvar = s:InMultiVarStatement(a:lnum)
              let prev_lnum = s:PrevNonBlankNonString(a:lnum - 1)
            
              if lvar
                let line = s:RemoveTrailingComments(getline(prev_lnum))
            
                " if the previous line doesn't end in a comma, return to regular indent
                if (line !~ s:comma_last)
                  return indent(prev_lnum) - &sw
                else
                  return indent(lvar) + &sw
                endif
              endif
            
              return -1
            endfunction
            
            
            " Check if line 'lnum' has more opening brackets than closing ones.
            function s:LineHasOpeningBrackets(lnum)
              let open_0 = 0
              let open_2 = 0
              let open_4 = 0
              let line = getline(a:lnum)
              let pos = match(line, '[][(){}]', 0)
              while pos != -1
                if !s:IsInStringOrComment(a:lnum, pos + 1)
                  let idx = stridx('(){}[]', line[pos])
                  if idx % 2 == 0
                    let open_{idx} = open_{idx} + 1
                  else
                    let open_{idx - 1} = open_{idx - 1} - 1
                  endif
                endif
                let pos = match(line, '[][(){}]', pos + 1)
              endwhile
              return (open_0 > 0) . (open_2 > 0) . (open_4 > 0)
            endfunction
            
            function s:Match(lnum, regex)
              let col = match(getline(a:lnum), a:regex) + 1
              return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0
            endfunction
            
            function s:IndentWithContinuation(lnum, ind, width)
              " Set up variables to use and search for MSL to the previous line.
              let p_lnum = a:lnum
              let lnum = s:GetMSL(a:lnum, 1)
              let line = getline(lnum)
            
              " If the previous line wasn't a MSL and is continuation return its indent.
              " TODO: the || s:IsInString() thing worries me a bit.
              if p_lnum != lnum
                if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line))
                  return a:ind
                endif
              endif
            
              " Set up more variables now that we know we aren't continuation bound.
              let msl_ind = indent(lnum)
            
              " If the previous line ended with [*+/.-=], start a continuation that
              " indents an extra level.
              if s:Match(lnum, s:continuation_regex)
                if lnum == p_lnum
                  return msl_ind + a:width
                else
                  return msl_ind
                endif
              endif
            
              return a:ind
            endfunction
            
            function s:InOneLineScope(lnum)
              let msl = s:GetMSL(a:lnum, 1)
              if msl > 0 && s:Match(msl, s:one_line_scope_regex)
                return msl
              endif
              return 0
            endfunction
            
            function s:ExitingOneLineScope(lnum)
              let msl = s:GetMSL(a:lnum, 1)
              if msl > 0
                " if the current line is in a one line scope ..
                if s:Match(msl, s:one_line_scope_regex)
                  return 0
                else
                  let prev_msl = s:GetMSL(msl - 1, 1)
                  if s:Match(prev_msl, s:one_line_scope_regex)
                    return prev_msl
                  endif
                endif
              endif
              return 0
            endfunction
            
            " 3. GetJavascriptIndent Function {{{1
            " =========================
            
            function GetJavascriptIndent()
              " 3.1. Setup {{{2
              " ----------
            
              " Set up variables for restoring position in file.  Could use v:lnum here.
              let vcol = col('.')
            
              " 3.2. Work on the current line {{{2
              " -----------------------------
            
              let ind = -1
              " Get the current line.
              let line = getline(v:lnum)
              " previous nonblank line number
              let prevline = prevnonblank(v:lnum - 1)
            
              " If we got a closing bracket on an empty line, find its match and indent
              " according to it.  For parentheses we indent to its column - 1, for the
              " others we indent to the containing line's MSL's level.  Return -1 if fail.
              let col = matchend(line, '^\s*[],})]')
              if col > 0 && !s:IsInStringOrComment(v:lnum, col)
                call cursor(v:lnum, col)
            
                let lvar = s:InMultiVarStatement(v:lnum)
                if lvar
                  let prevline_contents = s:RemoveTrailingComments(getline(prevline))
            
                  " check for comma first
                  if (line[col - 1] =~ ',')
                    " if the previous line ends in comma or semicolon don't indent
                    if (prevline_contents =~ '[;,]\s*$')
                      return indent(s:GetMSL(line('.'), 0))
                    " get previous line indent, if it's comma first return prevline indent
                    elseif (prevline_contents =~ s:comma_first)
                      return indent(prevline)
                    " otherwise we indent 1 level
                    else
                      return indent(lvar) + &sw
                    endif
                  endif
                endif
            
            
                let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
                if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
                  if line[col-1]==')' && col('.') != col('$') - 1
                    let ind = virtcol('.')-1
                  else
                    let ind = indent(s:GetMSL(line('.'), 0))
                  endif
                endif
                return ind
              endif
            
              " If the line is comma first, dedent 1 level
              if (getline(prevline) =~ s:comma_first)
                return indent(prevline) - &sw
              endif
            
              if (line =~ s:ternary)
                if (getline(prevline) =~ s:ternary_q)
                  return indent(prevline)
                else
                  return indent(prevline) + &sw
                endif
              endif
            
              " If we are in a multi-line comment, cindent does the right thing.
              if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1)
                return cindent(v:lnum)
              endif
            
              " Check for multiple var assignments
            "  let var_indent = s:GetVarIndent(v:lnum)
            "  if var_indent >= 0
            "    return var_indent
            "  endif
            
              " 3.3. Work on the previous line. {{{2
              " -------------------------------
            
              " If the line is empty and the previous nonblank line was a multi-line
              " comment, use that comment's indent. Deduct one char to account for the
              " space in ' */'.
              if line =~ '^\s*$' && s:IsInMultilineComment(prevline, 1)
                return indent(prevline) - 1
              endif
            
              " Find a non-blank, non-multi-line string line above the current line.
              let lnum = s:PrevNonBlankNonString(v:lnum - 1)
            
              " If the line is empty and inside a string, use the previous line.
              if line =~ '^\s*$' && lnum != prevline
                return indent(prevnonblank(v:lnum))
              endif
            
              " At the start of the file use zero indent.
              if lnum == 0
                return 0
              endif
            
              " Set up variables for current line.
              let line = getline(lnum)
              let ind = indent(lnum)
            
              " If the previous line ended with a block opening, add a level of indent.
              if s:Match(lnum, s:block_regex)
                return indent(s:GetMSL(lnum, 0)) + &sw
              endif
            
              " If the previous line contained an opening bracket, and we are still in it,
              " add indent depending on the bracket type.
              if line =~ '[[({]'
                let counts = s:LineHasOpeningBrackets(lnum)
                if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
                  if col('.') + 1 == col('$')
                    return ind + &sw
                  else
                    return virtcol('.')
                  endif
                elseif counts[1] == '1' || counts[2] == '1'
                  return ind + &sw
                else
                  call cursor(v:lnum, vcol)
                end
              endif
            
              " 3.4. Work on the MSL line. {{{2
              " --------------------------
            
              let ind_con = ind
              let ind = s:IndentWithContinuation(lnum, ind_con, &sw)
            
              " }}}2
              "
              "
              let ols = s:InOneLineScope(lnum)
              if ols > 0
                let ind = ind + &sw
              else
                let ols = s:ExitingOneLineScope(lnum)
                while ols > 0 && ind > 0
                  let ind = ind - &sw
                  let ols = s:InOneLineScope(ols - 1)
                endwhile
              endif
            
              return ind
            endfunction
            
            " }}}1
            
            let &cpo = s:cpo_save
            unlet s:cpo_save
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/jst.vim
            ================================================
            if exists("b:did_indent")
              finish
            endif
            
            runtime! indent/javascript.vim
            unlet! b:did_indent
            setlocal indentexpr=
            
            if exists("b:jst_subtype")
              exe "runtime! indent/".b:jst_subtype.".vim"
            else
              runtime! indent/html.vim
            endif
            unlet! b:did_indent
            
            if &l:indentexpr == ''
              if &l:cindent
                let &l:indentexpr = 'cindent(v:lnum)'
              else
                let &l:indentexpr = 'indent(prevnonblank(v:lnum-1))'
              endif
            endif
            let b:jst_subtype_indentexpr = &l:indentexpr
            
            let b:did_indent = 1
            
            setlocal indentexpr=GetJstIndent()
            setlocal indentkeys=o,O,*,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when
            
            " Only define the function once.
            if exists("*GetJstIndent")
              finish
            endif
            
            function! GetJstIndent(...)
              if a:0 && a:1 == '.'
                let v:lnum = line('.')
              elseif a:0 && a:1 =~ '^\d'
                let v:lnum = a:1
              endif
              let vcol = col('.')
              call cursor(v:lnum,1)
              let injavascript = searchpair('<%','','%>','W')
              call cursor(v:lnum,vcol)
              if injavascript && getline(v:lnum) !~ '^<%\|^\s*[-=]\=%>'
                let ind = GetJavascriptIndent()
              else
                exe "let ind = ".b:jst_subtype_indentexpr
              endif
              let lnum = prevnonblank(v:lnum-1)
              let line = getline(lnum)
              let cline = getline(v:lnum)
              if cline =~# '^\s*<%[-=]\=\s*\%(}.\{-\}\)\s*\%([-=]\=%>\|$\)'
                let ind = ind - &sw
              endif
              if line =~# '\S\s*<%[-=]\=\s*\%(}\).\{-\}\s*\%([-=]\=%>\|$\)'
                let ind = ind - &sw
              endif
              if line =~# '\%({\|\'
                let ind = ind + &sw
              endif
              if line =~# '^\s*<%[=#-]\=\s*$' && cline !~# '^\s*end\>'
                let ind = ind + &sw
              endif
              if line !~# '^\s*<%' && line =~# '%>\s*$'
                let ind = ind - &sw
              endif
              if cline =~# '^\s*[-=]\=%>\s*$'
                let ind = ind - &sw
              endif
              return ind
            endfunction
            
            " vim:set sw=2 sts=2 ts=8 noet:
            
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/less.vim
            ================================================
            " Vim indent file
            " Language:            LessCSS
            " Maintainer:        Leonard Ehrenfried 
            " Last Change:        2011 Sep 26
            
            if exists("b:did_indent")
              finish
            endif
            
            runtime! indent/css.vim
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/ocaml.vim
            ================================================
            " Vim indent file
            " Language:     OCaml
            " Maintainers:  Jean-Francois Yuen   
            "               Mike Leary           
            "               Markus Mottl         
            " URL:          http://www.ocaml.info/vim/indent/ocaml.vim
            " Last Change:  2010 Sep 04 - Added an indentation improvement by Mark Weber
            "               2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
            "               2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
            
            " Only load this indent file when no other was loaded.
            if exists("b:did_indent")
             finish
            endif
            let b:did_indent = 1
            
            setlocal expandtab
            setlocal indentexpr=GetOCamlIndent()
            setlocal indentkeys+=0=and,0=class,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=initializer,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0;;,0>\],0\|\],0>},0\|,0},0\],0)
            setlocal nolisp
            setlocal nosmartindent
            setlocal textwidth=80
            
            " Comment formatting
            if !exists("no_ocaml_comments")
             if (has("comments"))
               setlocal comments=sr:(*,mb:*,ex:*)
               setlocal fo=cqort
             endif
            endif
            
            " Only define the function once.
            if exists("*GetOCamlIndent")
             finish
            endif
            
            " Define some patterns:
            let s:beflet = '^\s*\(initializer\|method\|try\)\|\(\<\(begin\|do\|else\|in\|then\|try\)\|->\|<-\|=\|;\|(\)\s*$'
            let s:letpat = '^\s*\(let\|type\|module\|class\|open\|exception\|val\|include\|external\)\>'
            let s:letlim = '\(\<\(sig\|struct\)\|;;\)\s*$'
            let s:lim = '^\s*\(exception\|external\|include\|let\|module\|open\|type\|val\)\>'
            let s:module = '\<\%(begin\|sig\|struct\|object\)\>'
            let s:obj = '^\s*\(constraint\|inherit\|initializer\|method\|val\)\>\|\<\(object\|object\s*(.*)\)\s*$'
            let s:type = '^\s*\%(class\|let\|type\)\>.*='
            
            " Skipping pattern, for comments
            function! s:GetLineWithoutFullComment(lnum)
             let lnum = prevnonblank(a:lnum - 1)
             let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
             while lline =~ '^\s*$' && lnum > 0
               let lnum = prevnonblank(lnum - 1)
               let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
             endwhile
             return lnum
            endfunction
            
            " Indent for ';;' to match multiple 'let'
            function! s:GetInd(lnum, pat, lim)
             let llet = search(a:pat, 'bW')
             let old = indent(a:lnum)
             while llet > 0
               let old = indent(llet)
               let nb = s:GetLineWithoutFullComment(llet)
               if getline(nb) =~ a:lim
                 return old
               endif
               let llet = search(a:pat, 'bW')
             endwhile
             return old
            endfunction
            
            " Indent pairs
            function! s:FindPair(pstart, pmid, pend)
             call search(a:pend, 'bW')
             return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
            endfunction
            
            " Indent 'let'
            function! s:FindLet(pstart, pmid, pend)
             call search(a:pend, 'bW')
             return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\\s*$'
               return ind + &sw + &sw
             endif
            
             let line = getline(v:lnum)
            
             " Indent if current line begins with 'end':
             if line =~ '^\s*end\>'
               return s:FindPair(s:module, '','\')
            
             " Indent if current line begins with 'done' for 'do':
             elseif line =~ '^\s*done\>'
               return s:FindPair('\', '','\')
            
             " Indent if current line begins with '}' or '>}':
             elseif line =~ '^\s*\(\|>\)}'
               return s:FindPair('{', '','}')
            
             " Indent if current line begins with ']', '|]' or '>]':
             elseif line =~ '^\s*\(\||\|>\)\]'
               return s:FindPair('\[', '','\]')
            
             " Indent if current line begins with ')':
             elseif line =~ '^\s*)'
               return s:FindPair('(', '',')')
            
             " Indent if current line begins with 'let':
             elseif line =~ '^\s*let\>'
               if lline !~ s:lim . '\|' . s:letlim . '\|' . s:beflet
                 return s:FindLet(s:type, '','\'
               if lline !~ s:lim . '\|\\)\|\<\(function\|parser\|private\|with\)\s*$'
                 call search('|', 'bW')
                 return indent(searchpair('^\s*\(match\|type\)\>\|\<\(function\|parser\|private\|with\)\s*$', '', '^\s*|', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") !~ "^\\s*|.*->"'))
               endif
            
             " Indent if current line begins with ';;':
             elseif line =~ '^\s*;;'
               if lline !~ ';;\s*$'
                 return s:GetInd(v:lnum, s:letpat, s:letlim)
               endif
            
             " Indent if current line begins with 'in':
             elseif line =~ '^\s*in\>'
               if lline !~ '^\s*\(let\|and\)\>'
                 return s:FindPair('\', '', '\')
               endif
            
             " Indent if current line begins with 'else':
             elseif line =~ '^\s*else\>'
               if lline !~ '^\s*\(if\|then\)\>'
                 return s:FindPair('\', '', '\')
               endif
            
             " Indent if current line begins with 'then':
             elseif line =~ '^\s*then\>'
               if lline !~ '^\s*\(if\|else\)\>'
                 return s:FindPair('\', '', '\')
               endif
            
             " Indent if current line begins with 'and':
             elseif line =~ '^\s*and\>'
               if lline !~ '^\s*\(and\|let\|type\)\>\|\'
               if lline !~ '^\s*\(match\|try\)\>'
                 return s:FindPair('\<\%(match\|try\)\>', '','\')
               endif
            
             " Indent if current line begins with 'exception', 'external', 'include' or
             " 'open':
             elseif line =~ '^\s*\(exception\|external\|include\|open\)\>'
               if lline !~ s:lim . '\|' . s:letlim
                 call search(line)
                 return indent(search('^\s*\(\(exception\|external\|include\|open\|type\)\>\|val\>.*:\)', 'bW'))
               endif
            
             " Indent if current line begins with 'val':
             elseif line =~ '^\s*val\>'
               if lline !~ '^\s*\(exception\|external\|include\|open\)\>\|' . s:obj . '\|' . s:letlim
                 return indent(search('^\s*\(\(exception\|include\|initializer\|method\|open\|type\|val\)\>\|external\>.*:\)', 'bW'))
               endif
            
             " Indent if current line begins with 'constraint', 'inherit', 'initializer'
             " or 'method':
             elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>'
               if lline !~ s:obj
                 return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + &sw
               endif
            
             endif
            
             " Add a 'shiftwidth' after lines ending with:
             if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|parser\|private\|sig\|struct\|then\|try\)\|\')
            
             " Back to normal indent after lines ending with 'in':
             elseif lline =~ '\'
               let ind = s:FindPair('\', '', '\')
            
             " Back to normal indent after lines ending with 'done':
             elseif lline =~ '\', '','\')
            
             " Back to normal indent after lines ending with '}' or '>}':
             elseif lline =~ '\(\|>\)}\s*$'
               let ind = s:FindPair('{', '','}')
            
             " Back to normal indent after lines ending with ']', '|]' or '>]':
             elseif lline =~ '\(\||\|>\)\]\s*$'
               let ind = s:FindPair('\[', '','\]')
            
             " Back to normal indent after comments:
             elseif lline =~ '\*)\s*$'
               call search('\*)', 'bW')
               let ind = indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
            
             " Back to normal indent after lines ending with ')':
             elseif lline =~ ')\s*$'
               let ind = s:FindPair('(', '',')')
            
             " If this is a multiline comment then align '*':
             elseif lline =~ '^\s*(\*' && line =~ '^\s*\*'
               let ind = ind + 1
            
             else
             " Don't change indentation of this line
             " for new lines (indent==0) use indentation of previous line
            
             " This is for preventing removing indentation of these args:
             "   let f x =
             "     let y = x + 1 in
             "     Printf.printf
             "       "o"           << here
             "       "oeuth"       << don't touch indentation
            
               let i = indent(v:lnum)
               return i == 0 ? ind : i
            
             endif
            
             " Subtract a 'shiftwidth' after lines matching 'match ... with parser':
             if lline =~ '\.*\\s*\ 600
              runtime! indent/c.vim
            endif
            
            let b:did_indent = 1
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/perl.vim
            ================================================
            " Vim indent file
            " Language:      Perl 5
            " Maintainer:    vim-perl 
            " Homepage:      http://github.com/vim-perl/vim-perl
            " Bugs/requests: http://github.com/vim-perl/vim-perl/issues
            " Last Change:   {{LAST_CHANGE}}
            
            " Suggestions and improvements by :
            "   Aaron J. Sherman (use syntax for hints)
            "   Artem Chuprina (play nice with folding)
            
            " TODO things that are not or not properly indented (yet) :
            " - Continued statements
            "     print "foo",
            "       "bar";
            "     print "foo"
            "       if bar();
            " - Multiline regular expressions (m//x)
            " (The following probably needs modifying the perl syntax file)
            " - qw() lists
            " - Heredocs with terminators that don't match \I\i*
            
            " Only load this indent file when no other was loaded.
            if exists("b:did_indent")
                finish
            endif
            let b:did_indent = 1
            
            " Is syntax highlighting active ?
            let b:indent_use_syntax = has("syntax")
            
            setlocal indentexpr=GetPerlIndent()
            setlocal indentkeys+=0=,0),0],0=or,0=and
            if !b:indent_use_syntax
                setlocal indentkeys+=0=EO
            endif
            
            let s:cpo_save = &cpo
            set cpo-=C
            
            function! GetPerlIndent()
            
                " Get the line to be indented
                let cline = getline(v:lnum)
            
                " Indent POD markers to column 0
                if cline =~ '^\s*=\L\@!'
                    return 0
                endif
            
                " Don't reindent comments on first column
                if cline =~ '^#.'
                    return 0
                endif
            
                " Get current syntax item at the line's first char
                let csynid = ''
                if b:indent_use_syntax
                    let csynid = synIDattr(synID(v:lnum,1,0),"name")
                endif
            
                " Don't reindent POD and heredocs
                if csynid == "perlPOD" || csynid == "perlHereDoc" || csynid =~ "^pod"
                    return indent(v:lnum)
                endif
            
                " Indent end-of-heredocs markers to column 0
                if b:indent_use_syntax
                    " Assumes that an end-of-heredoc marker matches \I\i* to avoid
                    " confusion with other types of strings
                    if csynid == "perlStringStartEnd" && cline =~ '^\I\i*$'
                        return 0
                    endif
                else
                    " Without syntax hints, assume that end-of-heredocs markers begin with EO
                    if cline =~ '^\s*EO'
                        return 0
                    endif
                endif
            
                " Now get the indent of the previous perl line.
            
                " Find a non-blank line above the current line.
                let lnum = prevnonblank(v:lnum - 1)
                " Hit the start of the file, use zero indent.
                if lnum == 0
                    return 0
                endif
                let line = getline(lnum)
                let ind = indent(lnum)
                " Skip heredocs, POD, and comments on 1st column
                if b:indent_use_syntax
                    let skippin = 2
                    while skippin
                        let synid = synIDattr(synID(lnum,1,0),"name")
                        if (synid == "perlStringStartEnd" && line =~ '^\I\i*$')
                                    \ || (skippin != 2 && synid == "perlPOD")
                                    \ || (skippin != 2 && synid == "perlHereDoc")
                                    \ || synid == "perlComment"
                                    \ || synid =~ "^pod"
                            let lnum = prevnonblank(lnum - 1)
                            if lnum == 0
                                return 0
                            endif
                            let line = getline(lnum)
                            let ind = indent(lnum)
                            let skippin = 1
                        else
                            let skippin = 0
                        endif
                    endwhile
                else
                    if line =~ "^EO"
                        let lnum = search("<<[\"']\\=EO", "bW")
                        let line = getline(lnum)
                        let ind = indent(lnum)
                    endif
                endif
            
                " Indent blocks enclosed by {}, (), or []
                if b:indent_use_syntax
                    " Find a real opening brace
                    " NOTE: Unlike Perl character classes, we do NOT need to escape the
                    " closing brackets with a backslash.  Doing so just puts a backslash
                    " in the character class and causes sorrow.  Instead, put the closing
                    " bracket as the first character in the class.
                    let braceclass = '[][(){}]'
                    let bracepos = match(line, braceclass, matchend(line, '^\s*[])}]'))
                    while bracepos != -1
                        let synid = synIDattr(synID(lnum, bracepos + 1, 0), "name")
                        " If the brace is highlighted in one of those groups, indent it.
                        " 'perlHereDoc' is here only to handle the case '&foo(<'
                    if line !~ '^\s*\(or\|and\)\>'
                        let ind = ind + &sw
                    endif
                elseif line =~ '^\s*\(or\|and\)\>'
                    let ind = ind - &sw
                endif
            
                return ind
            
            endfunction
            
            let &cpo = s:cpo_save
            unlet s:cpo_save
            
            " vim:ts=8:sts=4:sw=4:expandtab:ft=vim
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/perl6.vim
            ================================================
            " Vim indent file
            " Language:      Perl 6
            " Maintainer:    vim-perl 
            " Homepage:      http://github.com/vim-perl/vim-perl
            " Bugs/requests: http://github.com/vim-perl/vim-perl/issues
            " Last Change:   {{LAST_CHANGE}}
            " Contributors:  Andy Lester 
            "                Hinrik Örn Sigurðsson 
            "
            " Adapted from indent/perl.vim by Rafael Garcia-Suarez 
            
            " Suggestions and improvements by :
            "   Aaron J. Sherman (use syntax for hints)
            "   Artem Chuprina (play nice with folding)
            " TODO:
            " This file still relies on stuff from the Perl 5 syntax file, which Perl 6
            " does not use.
            "
            " Things that are not or not properly indented (yet) :
            " - Continued statements
            "     print "foo",
            "       "bar";
            "     print "foo"
            "       if bar();
            " - Multiline regular expressions (m//x)
            " (The following probably needs modifying the perl syntax file)
            " - qw() lists
            " - Heredocs with terminators that don't match \I\i*
            
            " Only load this indent file when no other was loaded.
            if exists("b:did_indent")
                finish
            endif
            let b:did_indent = 1
            
            " Is syntax highlighting active ?
            let b:indent_use_syntax = has("syntax")
            
            setlocal indentexpr=GetPerl6Indent()
            
            " we reset it first because the Perl 5 indent file might have been loaded due
            " to a .pl/pm file extension, and indent files don't clean up afterwards
            setlocal indentkeys&
            
            setlocal indentkeys+=0=,0),0],0>,0»,0=or,0=and
            if !b:indent_use_syntax
                setlocal indentkeys+=0=EO
            endif
            
            let s:cpo_save = &cpo
            set cpo-=C
            
            function! GetPerl6Indent()
            
                " Get the line to be indented
                let cline = getline(v:lnum)
            
                " Indent POD markers to column 0
                if cline =~ '^\s*=\L\@!'
                    return 0
                endif
            
                " Don't reindent coments on first column
                if cline =~ '^#'
                    return 0
                endif
            
                " Get current syntax item at the line's first char
                let csynid = ''
                if b:indent_use_syntax
                    let csynid = synIDattr(synID(v:lnum,1,0),"name")
                endif
            
                " Don't reindent POD and heredocs
                if csynid =~ "^p6Pod"
                    return indent(v:lnum)
                endif
            
            
                " Now get the indent of the previous perl line.
            
                " Find a non-blank line above the current line.
                let lnum = prevnonblank(v:lnum - 1)
                " Hit the start of the file, use zero indent.
                if lnum == 0
                    return 0
                endif
                let line = getline(lnum)
                let ind = indent(lnum)
                " Skip heredocs, POD, and comments on 1st column
                if b:indent_use_syntax
                    let skippin = 2
                    while skippin
                        let synid = synIDattr(synID(lnum,1,0),"name")
                        if (synid =~ "^p6Pod" || synid =~ "p6Comment")
                            let lnum = prevnonblank(lnum - 1)
                            if lnum == 0
                                return 0
                            endif
                            let line = getline(lnum)
                            let ind = indent(lnum)
                            let skippin = 1
                        else
                            let skippin = 0
                        endif
                    endwhile
                endif
            
                    if line =~ '[<«\[{(]\s*\(#[^)}\]»>]*\)\=$'
                        let ind = ind + &sw
                    endif
                    if cline =~ '^\s*[)}\]»>]'
                        let ind = ind - &sw
                    endif
            
                " Indent lines that begin with 'or' or 'and'
                if cline =~ '^\s*\(or\|and\)\>'
                    if line !~ '^\s*\(or\|and\)\>'
                        let ind = ind + &sw
                    endif
                elseif line =~ '^\s*\(or\|and\)\>'
                    let ind = ind - &sw
                endif
            
                return ind
            
            endfunction
            
            let &cpo = s:cpo_save
            unlet s:cpo_save
            
            " vim:ts=8:sts=4:sw=4:expandtab:ft=vim
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/puppet.vim
            ================================================
            " Vim indent file
            " Language:	Puppet
            " Maintainer:	Todd Zullinger 
            " Last Change:	2009 Aug 19
            " vim: set sw=4 sts=4:
            
            if exists("b:did_indent")
                finish
            endif
            let b:did_indent = 1
            
            setlocal autoindent smartindent
            setlocal indentexpr=GetPuppetIndent()
            setlocal indentkeys+=0],0)
            
            if exists("*GetPuppetIndent")
                finish
            endif
            
            " Check if a line is part of an include 'block', e.g.:
            "   include foo,
            "       bar,
            "       baz
            function! s:PartOfInclude(lnum)
                let lnum = a:lnum
                while lnum
                    let lnum = lnum - 1
                    let line = getline(lnum)
                    if line !~ ',$'
                        break
                    endif
                    if line =~ '^\s*include\s\+[^,]\+,$'
                        return 1
                    endif
                endwhile
                return 0
            endfunction
            
            function! s:OpenBrace(lnum)
                call cursor(a:lnum, 1)
                return searchpair('{\|\[\|(', '', '}\|\]\|)', 'nbW')
            endfunction
            
            function! GetPuppetIndent()
                let pnum = prevnonblank(v:lnum - 1)
                if pnum == 0
                   return 0
                endif
            
                let line = getline(v:lnum)
                let pline = getline(pnum)
                let ind = indent(pnum)
            
                if pline =~ '^\s*#'
                    return ind
                endif
            
                if pline =~ '\({\|\[\|(\|:\)$'
                    let ind += &sw
                elseif pline =~ ';$' && pline !~ '[^:]\+:.*[=+]>.*'
                    let ind -= &sw
                elseif pline =~ '^\s*include\s\+.*,$'
                    let ind += &sw
                endif
            
                if pline !~ ',$' && s:PartOfInclude(pnum)
                    let ind -= &sw
                endif
            
                " Match } }, }; ] ]: )
                if line =~ '^\s*\(}\(,\|;\)\?$\|]:\?$\|)\)'
                    let ind = indent(s:OpenBrace(v:lnum))
                endif
            
                return ind
            endfunction
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/ruby.vim
            ================================================
            " Vim indent file
            " Language:		Ruby
            " Maintainer:		Nikolai Weibull 
            " URL:			https://github.com/vim-ruby/vim-ruby
            " Release Coordinator:	Doug Kearns 
            
            " 0. Initialization {{{1
            " =================
            
            " Only load this indent file when no other was loaded.
            if exists("b:did_indent")
              finish
            endif
            let b:did_indent = 1
            
            if !exists('g:ruby_indent_access_modifier_style')
              " Possible values: "normal", "indent", "outdent"
              let g:ruby_indent_access_modifier_style = 'normal'
            endif
            
            setlocal nosmartindent
            
            " Now, set up our indentation expression and keys that trigger it.
            setlocal indentexpr=GetRubyIndent(v:lnum)
            setlocal indentkeys=0{,0},0),0],!^F,o,O,e,:,.
            setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue,==begin,==end
            setlocal indentkeys+==private,=protected,=public
            
            " Only define the function once.
            if exists("*GetRubyIndent")
              finish
            endif
            
            let s:cpo_save = &cpo
            set cpo&vim
            
            " 1. Variables {{{1
            " ============
            
            " Regex of syntax group names that are or delimit strings/symbols or are comments.
            let s:syng_strcom = '\'
            
            " Regex of syntax group names that are strings.
            let s:syng_string =
                  \ '\'
            
            " Regex of syntax group names that are strings or documentation.
            let s:syng_stringdoc =
                  \'\'
            
            " Expression used to check whether we should skip a match with searchpair().
            let s:skip_expr =
                  \ "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'"
            
            " Regex used for words that, at the start of a line, add a level of indent.
            let s:ruby_indent_keywords =
                  \ '^\s*\zs\<\%(module\|class\|if\|for' .
                  \   '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue' .
                  \   '\|\%(public\|protected\|private\)\=\s*def\):\@!\>' .
                  \ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' .
                  \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>'
            
            " Regex used for words that, at the start of a line, remove a level of indent.
            let s:ruby_deindent_keywords =
                  \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|end\):\@!\>'
            
            " Regex that defines the start-match for the 'end' keyword.
            "let s:end_start_regex = '\%(^\|[^.]\)\<\%(module\|class\|def\|if\|for\|while\|until\|case\|unless\|begin\|do\)\>'
            " TODO: the do here should be restricted somewhat (only at end of line)?
            let s:end_start_regex =
                  \ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' .
                  \ '\<\%(module\|class\|if\|for\|while\|until\|case\|unless\|begin' .
                  \   '\|\%(public\|protected\|private\)\=\s*def\):\@!\>' .
                  \ '\|\%(^\|[^.:@$]\)\@<=\'
            
            " Regex that defines the middle-match for the 'end' keyword.
            let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\\|when\|elsif\):\@!\>'
            
            " Regex that defines the end-match for the 'end' keyword.
            let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\'
            
            " Expression used for searchpair() call for finding match for 'end' keyword.
            let s:end_skip_expr = s:skip_expr .
                  \ ' || (expand("") == "do"' .
                  \ ' && getline(".") =~ "^\\s*\\<\\(while\\|until\\|for\\):\\@!\\>")'
            
            " Regex that defines continuation lines, not including (, {, or [.
            let s:non_bracket_continuation_regex = '\%([\\.,:*/%+]\|\\|%\@ 0
                " Go in and out of blocks comments as necessary.
                " If the line isn't empty (with opt. comment) or in a string, end search.
                let line = getline(lnum)
                if line =~ '^=begin'
                  if in_block
                    let in_block = 0
                  else
                    break
                  endif
                elseif !in_block && line =~ '^=end'
                  let in_block = 1
                elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1)
                      \ && s:IsInStringOrComment(lnum, strlen(line)))
                  break
                endif
                let lnum = prevnonblank(lnum - 1)
              endwhile
              return lnum
            endfunction
            
            " Find line above 'lnum' that started the continuation 'lnum' may be part of.
            function s:GetMSL(lnum)
              " Start on the line we're at and use its indent.
              let msl = a:lnum
              let msl_body = getline(msl)
              let lnum = s:PrevNonBlankNonString(a:lnum - 1)
              while lnum > 0
                " If we have a continuation line, or we're in a string, use line as MSL.
                " Otherwise, terminate search as we have found our MSL already.
                let line = getline(lnum)
            
                if s:Match(msl, s:leading_operator_regex)
                  " If the current line starts with a leading operator, keep its indent
                  " and keep looking for an MSL.
                  let msl = lnum
                elseif s:Match(lnum, s:splat_regex)
                  " If the above line looks like the "*" of a splat, use the current one's
                  " indentation.
                  "
                  " Example:
                  "   Hash[*
                  "     method_call do
                  "       something
                  "
                  return msl
                elseif s:Match(lnum, s:non_bracket_continuation_regex) &&
                      \ s:Match(msl, s:non_bracket_continuation_regex)
                  " If the current line is a non-bracket continuation and so is the
                  " previous one, keep its indent and continue looking for an MSL.
                  "
                  " Example:
                  "   method_call one,
                  "     two,
                  "     three
                  "
                  let msl = lnum
                elseif s:Match(lnum, s:non_bracket_continuation_regex) &&
                      \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
                  " If the current line is a bracket continuation or a block-starter, but
                  " the previous is a non-bracket one, respect the previous' indentation,
                  " and stop here.
                  "
                  " Example:
                  "   method_call one,
                  "     two {
                  "     three
                  "
                  return lnum
                elseif s:Match(lnum, s:bracket_continuation_regex) &&
                      \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
                  " If both lines are bracket continuations (the current may also be a
                  " block-starter), use the current one's and stop here
                  "
                  " Example:
                  "   method_call(
                  "     other_method_call(
                  "       foo
                  return msl
                elseif s:Match(lnum, s:block_regex) &&
                      \ !s:Match(msl, s:continuation_regex) &&
                      \ !s:Match(msl, s:block_continuation_regex)
                  " If the previous line is a block-starter and the current one is
                  " mostly ordinary, use the current one as the MSL.
                  "
                  " Example:
                  "   method_call do
                  "     something
                  "     something_else
                  return msl
                else
                  let col = match(line, s:continuation_regex) + 1
                  if (col > 0 && !s:IsInStringOrComment(lnum, col))
                        \ || s:IsInString(lnum, strlen(line))
                    let msl = lnum
                  else
                    break
                  endif
                endif
            
                let msl_body = getline(msl)
                let lnum = s:PrevNonBlankNonString(lnum - 1)
              endwhile
              return msl
            endfunction
            
            " Check if line 'lnum' has more opening brackets than closing ones.
            function s:ExtraBrackets(lnum)
              let opening = {'parentheses': [], 'braces': [], 'brackets': []}
              let closing = {'parentheses': [], 'braces': [], 'brackets': []}
            
              let line = getline(a:lnum)
              let pos  = match(line, '[][(){}]', 0)
            
              " Save any encountered opening brackets, and remove them once a matching
              " closing one has been found. If a closing bracket shows up that doesn't
              " close anything, save it for later.
              while pos != -1
                if !s:IsInStringOrComment(a:lnum, pos + 1)
                  if line[pos] == '('
                    call add(opening.parentheses, {'type': '(', 'pos': pos})
                  elseif line[pos] == ')'
                    if empty(opening.parentheses)
                      call add(closing.parentheses, {'type': ')', 'pos': pos})
                    else
                      let opening.parentheses = opening.parentheses[0:-2]
                    endif
                  elseif line[pos] == '{'
                    call add(opening.braces, {'type': '{', 'pos': pos})
                  elseif line[pos] == '}'
                    if empty(opening.braces)
                      call add(closing.braces, {'type': '}', 'pos': pos})
                    else
                      let opening.braces = opening.braces[0:-2]
                    endif
                  elseif line[pos] == '['
                    call add(opening.brackets, {'type': '[', 'pos': pos})
                  elseif line[pos] == ']'
                    if empty(opening.brackets)
                      call add(closing.brackets, {'type': ']', 'pos': pos})
                    else
                      let opening.brackets = opening.brackets[0:-2]
                    endif
                  endif
                endif
            
                let pos = match(line, '[][(){}]', pos + 1)
              endwhile
            
              " Find the rightmost brackets, since they're the ones that are important in
              " both opening and closing cases
              let rightmost_opening = {'type': '(', 'pos': -1}
              let rightmost_closing = {'type': ')', 'pos': -1}
            
              for opening in opening.parentheses + opening.braces + opening.brackets
                if opening.pos > rightmost_opening.pos
                  let rightmost_opening = opening
                endif
              endfor
            
              for closing in closing.parentheses + closing.braces + closing.brackets
                if closing.pos > rightmost_closing.pos
                  let rightmost_closing = closing
                endif
              endfor
            
              return [rightmost_opening, rightmost_closing]
            endfunction
            
            function s:Match(lnum, regex)
              let line   = getline(a:lnum)
              let offset = match(line, '\C'.a:regex)
              let col    = offset + 1
            
              while offset > -1 && s:IsInStringOrComment(a:lnum, col)
                let offset = match(line, '\C'.a:regex, offset + 1)
                let col = offset + 1
              endwhile
            
              if offset > -1
                return col
              else
                return 0
              endif
            endfunction
            
            " Locates the containing class/module's definition line, ignoring nested classes
            " along the way.
            "
            function! s:FindContainingClass()
              let saved_position = getpos('.')
            
              while searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
                    \ s:end_skip_expr) > 0
                if expand('') =~# '\'
                  let found_lnum = line('.')
                  call setpos('.', saved_position)
                  return found_lnum
                endif
              endif
            
              call setpos('.', saved_position)
              return 0
            endfunction
            
            " 3. GetRubyIndent Function {{{1
            " =========================
            
            function GetRubyIndent(...)
              " 3.1. Setup {{{2
              " ----------
            
              " For the current line, use the first argument if given, else v:lnum
              let clnum = a:0 ? a:1 : v:lnum
            
              " Set up variables for restoring position in file.  Could use clnum here.
              let vcol = col('.')
            
              " 3.2. Work on the current line {{{2
              " -----------------------------
            
              " Get the current line.
              let line = getline(clnum)
              let ind = -1
            
              " If this line is an access modifier keyword, align according to the closest
              " class declaration.
              if g:ruby_indent_access_modifier_style == 'indent'
                if s:Match(clnum, s:access_modifier_regex)
                  let class_line = s:FindContainingClass()
                  if class_line > 0
                    return indent(class_line) + &sw
                  endif
                endif
              elseif g:ruby_indent_access_modifier_style == 'outdent'
                if s:Match(clnum, s:access_modifier_regex)
                  let class_line = s:FindContainingClass()
                  if class_line > 0
                    return indent(class_line)
                  endif
                endif
              endif
            
              " If we got a closing bracket on an empty line, find its match and indent
              " according to it.  For parentheses we indent to its column - 1, for the
              " others we indent to the containing line's MSL's level.  Return -1 if fail.
              let col = matchend(line, '^\s*[]})]')
              if col > 0 && !s:IsInStringOrComment(clnum, col)
                call cursor(clnum, col)
                let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
                if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
                  if line[col-1]==')' && col('.') != col('$') - 1
                    let ind = virtcol('.') - 1
                  else
                    let ind = indent(s:GetMSL(line('.')))
                  endif
                endif
                return ind
              endif
            
              " If we have a =begin or =end set indent to first column.
              if match(line, '^\s*\%(=begin\|=end\)$') != -1
                return 0
              endif
            
              " If we have a deindenting keyword, find its match and indent to its level.
              " TODO: this is messy
              if s:Match(clnum, s:ruby_deindent_keywords)
                call cursor(clnum, 1)
                if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
                      \ s:end_skip_expr) > 0
                  let msl  = s:GetMSL(line('.'))
                  let line = getline(line('.'))
            
                  if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
                        \ strpart(line, col('.') - 1, 2) !~ 'do'
                    let ind = virtcol('.') - 1
                  elseif getline(msl) =~ '=\s*\(#.*\)\=$'
                    let ind = indent(line('.'))
                  else
                    let ind = indent(msl)
                  endif
                endif
                return ind
              endif
            
              " If we are in a multi-line string or line-comment, don't do anything to it.
              if s:IsInStringOrDocumentation(clnum, matchend(line, '^\s*') + 1)
                return indent('.')
              endif
            
              " If we are at the closing delimiter of a "<<" heredoc-style string, set the
              " indent to 0.
              if line =~ '^\k\+\s*$'
                    \ && s:IsInStringDelimiter(clnum, 1)
                    \ && search('\V<<'.line, 'nbW') > 0
                return 0
              endif
            
              " If the current line starts with a leading operator, add a level of indent.
              if s:Match(clnum, s:leading_operator_regex)
                return indent(s:GetMSL(clnum)) + &sw
              endif
            
              " 3.3. Work on the previous line. {{{2
              " -------------------------------
            
              " Find a non-blank, non-multi-line string line above the current line.
              let lnum = s:PrevNonBlankNonString(clnum - 1)
            
              " If the line is empty and inside a string, use the previous line.
              if line =~ '^\s*$' && lnum != prevnonblank(clnum - 1)
                return indent(prevnonblank(clnum))
              endif
            
              " At the start of the file use zero indent.
              if lnum == 0
                return 0
              endif
            
              " Set up variables for the previous line.
              let line = getline(lnum)
              let ind = indent(lnum)
            
              if g:ruby_indent_access_modifier_style == 'indent'
                " If the previous line was a private/protected keyword, add a
                " level of indent.
                if s:Match(lnum, s:indent_access_modifier_regex)
                  return indent(lnum) + &sw
                endif
              elseif g:ruby_indent_access_modifier_style == 'outdent'
                " If the previous line was a private/protected/public keyword, add
                " a level of indent, since the keyword has been out-dented.
                if s:Match(lnum, s:access_modifier_regex)
                  return indent(lnum) + &sw
                endif
              endif
            
              " If the previous line ended with a block opening, add a level of indent.
              if s:Match(lnum, s:block_regex)
                return indent(s:GetMSL(lnum)) + &sw
              endif
            
              " If the previous line started with a leading operator, use its MSL's level
              " of indent
              if s:Match(lnum, s:leading_operator_regex)
                return indent(s:GetMSL(lnum))
              endif
            
              " If the previous line ended with the "*" of a splat, add a level of indent
              if line =~ s:splat_regex
                return indent(lnum) + &sw
              endif
            
              " If the previous line contained unclosed opening brackets and we are still
              " in them, find the rightmost one and add indent depending on the bracket
              " type.
              "
              " If it contained hanging closing brackets, find the rightmost one, find its
              " match and indent according to that.
              if line =~ '[[({]' || line =~ '[])}]\s*\%(#.*\)\=$'
                let [opening, closing] = s:ExtraBrackets(lnum)
            
                if opening.pos != -1
                  if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
                    if col('.') + 1 == col('$')
                      return ind + &sw
                    else
                      return virtcol('.')
                    endif
                  else
                    let nonspace = matchend(line, '\S', opening.pos + 1) - 1
                    return nonspace > 0 ? nonspace : ind + &sw
                  endif
                elseif closing.pos != -1
                  call cursor(lnum, closing.pos + 1)
                  normal! %
            
                  if s:Match(line('.'), s:ruby_indent_keywords)
                    return indent('.') + &sw
                  else
                    return indent('.')
                  endif
                else
                  call cursor(clnum, vcol)
                end
              endif
            
              " If the previous line ended with an "end", match that "end"s beginning's
              " indent.
              let col = s:Match(lnum, '\%(^\|[^.:@$]\)\\s*\%(#.*\)\=$')
              if col > 0
                call cursor(lnum, col)
                if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
                      \ s:end_skip_expr) > 0
                  let n = line('.')
                  let ind = indent('.')
                  let msl = s:GetMSL(n)
                  if msl != n
                    let ind = indent(msl)
                  end
                  return ind
                endif
              end
            
              let col = s:Match(lnum, s:ruby_indent_keywords)
              if col > 0
                call cursor(lnum, col)
                let ind = virtcol('.') - 1 + &sw
                " TODO: make this better (we need to count them) (or, if a searchpair
                " fails, we know that something is lacking an end and thus we indent a
                " level
                if s:Match(lnum, s:end_end_regex)
                  let ind = indent('.')
                endif
                return ind
              endif
            
              " 3.4. Work on the MSL line. {{{2
              " --------------------------
            
              " Set up variables to use and search for MSL to the previous line.
              let p_lnum = lnum
              let lnum = s:GetMSL(lnum)
            
              " If the previous line wasn't a MSL and is continuation return its indent.
              " TODO: the || s:IsInString() thing worries me a bit.
              if p_lnum != lnum
                if s:Match(p_lnum, s:non_bracket_continuation_regex) || s:IsInString(p_lnum,strlen(line))
                  return ind
                endif
              endif
            
              " Set up more variables, now that we know we wasn't continuation bound.
              let line = getline(lnum)
              let msl_ind = indent(lnum)
            
              " If the MSL line had an indenting keyword in it, add a level of indent.
              " TODO: this does not take into account contrived things such as
              " module Foo; class Bar; end
              if s:Match(lnum, s:ruby_indent_keywords)
                let ind = msl_ind + &sw
                if s:Match(lnum, s:end_end_regex)
                  let ind = ind - &sw
                endif
                return ind
              endif
            
              " If the previous line ended with [*+/.,-=], but wasn't a block ending or a
              " closing bracket, indent one extra level.
              if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)')
                if lnum == p_lnum
                  let ind = msl_ind + &sw
                else
                  let ind = msl_ind
                endif
                return ind
              endif
            
              " }}}2
            
              return ind
            endfunction
            
            " }}}1
            
            let &cpo = s:cpo_save
            unlet s:cpo_save
            
            " vim:set sw=2 sts=2 ts=8 et:
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/rust.vim
            ================================================
            " Vim indent file
            " Language:         Rust
            " Author:           Chris Morgan 
            " Last Change:      2013 Oct 29
            
            " Only load this indent file when no other was loaded.
            if exists("b:did_indent")
              finish
            endif
            let b:did_indent = 1
            
            setlocal cindent
            setlocal cinoptions=L0,(0,Ws,JN,j1
            setlocal cinkeys=0{,0},!^F,o,O,0[,0]
            " Don't think cinwords will actually do anything at all... never mind
            setlocal cinwords=do,for,if,else,while,loop,impl,mod,unsafe,trait,struct,enum,fn,extern
            
            " Some preliminary settings
            setlocal nolisp		" Make sure lisp indenting doesn't supersede us
            setlocal autoindent	" indentexpr isn't much help otherwise
            " Also do indentkeys, otherwise # gets shoved to column 0 :-/
            setlocal indentkeys=0{,0},!^F,o,O,0[,0]
            
            setlocal indentexpr=GetRustIndent(v:lnum)
            
            " Only define the function once.
            if exists("*GetRustIndent")
              finish
            endif
            
            " Come here when loading the script the first time.
            
            function s:get_line_trimmed(lnum)
            	" Get the line and remove a trailing comment.
            	" Use syntax highlighting attributes when possible.
            	" NOTE: this is not accurate; /* */ or a line continuation could trick it
            	let line = getline(a:lnum)
            	let line_len = strlen(line)
            	if has('syntax_items')
            		" If the last character in the line is a comment, do a binary search for
            		" the start of the comment.  synID() is slow, a linear search would take
            		" too long on a long line.
            		if synIDattr(synID(a:lnum, line_len, 1), "name") =~ "Comment\|Todo"
            			let min = 1
            			let max = line_len
            			while min < max
            				let col = (min + max) / 2
            				if synIDattr(synID(a:lnum, col, 1), "name") =~ "Comment\|Todo"
            					let max = col
            				else
            					let min = col + 1
            				endif
            			endwhile
            			let line = strpart(line, 0, min - 1)
            		endif
            		return substitute(line, "\s*$", "", "")
            	else
            		" Sorry, this is not complete, nor fully correct (e.g. string "//").
            		" Such is life.
            		return substitute(line, "\s*//.*$", "", "")
            	endif
            endfunction
            
            function GetRustIndent(lnum)
            
            	" Starting assumption: cindent (called at the end) will do it right
            	" normally. We just want to fix up a few cases.
            
            	let line = getline(a:lnum)
            
            	if has('syntax_items')
            		let synname = synIDattr(synID(a:lnum, 1, 1), "name")
            		if synname == "rustString"
            			" If the start of the line is in a string, don't change the indent
            			return -1
            		elseif synname =~ "\\(Comment\\|Todo\\)"
            					\ && line !~ "^\\s*/\\*"  " not /* opening line
            			if synname =~ "CommentML" " multi-line
            				if line !~ "^\\s*\\*" && getline(a:lnum - 1) =~ "^\\s*/\\*"
            					" This is (hopefully) the line after a /*, and it has no
            					" leader, so the correct indentation is that of the
            					" previous line.
            					return GetRustIndent(a:lnum - 1)
            				endif
            			endif
            			" If it's in a comment, let cindent take care of it now. This is
            			" for cases like "/*" where the next line should start " * ", not
            			" "* " as the code below would otherwise cause for module scope
            			" Fun fact: "  /*\n*\n*/" takes two calls to get right!
            			return cindent(a:lnum)
            		endif
            	endif
            
            	" cindent gets second and subsequent match patterns/struct members wrong,
            	" as it treats the comma as indicating an unfinished statement::
            	"
            	" match a {
            	"     b => c,
            	"         d => e,
            	"         f => g,
            	" };
            
            	" Search backwards for the previous non-empty line.
            	let prevline = s:get_line_trimmed(prevnonblank(a:lnum - 1))
            	if prevline[len(prevline) - 1] == ","
            				\ && s:get_line_trimmed(a:lnum) !~ "^\\s*[\\[\\]{}]"
            				\ && prevline !~ "^\\s*fn\\s"
            		" Oh ho! The previous line ended in a comma! I bet cindent will try to
            		" take this too far... For now, let's normally use the previous line's
            		" indent.
            
            		" One case where this doesn't work out is where *this* line contains
            		" square or curly brackets; then we normally *do* want to be indenting
            		" further.
            		"
            		" Another case where we don't want to is one like a function
            		" definition with arguments spread over multiple lines:
            		"
            		" fn foo(baz: Baz,
            		"        baz: Baz) // <-- cindent gets this right by itself
            		"
            		" There are probably other cases where we don't want to do this as
            		" well. Add them as needed.
            		return GetRustIndent(a:lnum - 1)
            	endif
            
            	" cindent doesn't do the module scope well at all; e.g.::
            	"
            	" static FOO : &'static [bool] = [
            	" true,
            	"     false,
            	"     false,
            	"     true,
            	"     ];
            	"
            	"     uh oh, next statement is indented further!
            
            	" Note that this does *not* apply the line continuation pattern properly;
            	" that's too hard to do correctly for my liking at present, so I'll just
            	" start with these two main cases (square brackets and not returning to
            	" column zero)
            
            	call cursor(a:lnum, 1)
            	if searchpair('{\|(', '', '}\|)', 'nbW') == 0
            		if searchpair('\[', '', '\]', 'nbW') == 0
            			" Global scope, should be zero
            			return 0
            		else
            			" At the module scope, inside square brackets only
            			"if getline(a:lnum)[0] == ']' || search('\[', '', '\]', 'nW') == a:lnum
            			if line =~ "^\\s*]"
            				" It's the closing line, dedent it
            				return 0
            			else
            				return &shiftwidth
            			endif
            		endif
            	endif
            
            	" Fall back on cindent, which does it mostly right
            	return cindent(a:lnum)
            endfunction
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/sass.vim
            ================================================
            " Vim indent file
            " Language:	Sass
            " Maintainer:	Tim Pope 
            " Last Change:	2010 May 21
            
            if exists("b:did_indent")
              finish
            endif
            let b:did_indent = 1
            
            setlocal autoindent sw=2 et
            setlocal indentexpr=GetSassIndent()
            setlocal indentkeys=o,O,*,<:>,!^F
            
            " Only define the function once.
            if exists("*GetSassIndent")
              finish
            endif
            
            let s:property = '^\s*:\|^\s*[[:alnum:]#{}-]\+\%(:\|\s*=\)'
            let s:extend = '^\s*\%(@extend\|@include\|+\)'
            
            function! GetSassIndent()
              let lnum = prevnonblank(v:lnum-1)
              let line = substitute(getline(lnum),'\s\+$','','')
              let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','')
              let lastcol = strlen(line)
              let line = substitute(line,'^\s\+','','')
              let indent = indent(lnum)
              let cindent = indent(v:lnum)
              if line !~ s:property && line !~ s:extend && cline =~ s:property
                return indent + &sw
              "elseif line =~ s:property && cline !~ s:property
                "return indent - &sw
              else
                return -1
              endif
            endfunction
            
            " vim:set sw=2:
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/scala.vim
            ================================================
            " Vim indent file
            " Language         : Scala (http://scala-lang.org/)
            " Original Author  : Stefan Matthias Aust
            " Modifications by : Derek Wyatt
            " Last Change: 2011 Mar 19 (Derek Wyatt)
            
            "if exists("b:did_indent")
            "  finish
            "endif
            "let b:did_indent = 1
            
            setlocal indentexpr=GetScalaIndent()
            setlocal indentkeys=0{,0},0),!^F,<>>,o,O,e,=case,
            setlocal autoindent
            
            "if exists("*GetScalaIndent")
            "    finish
            "endif
            
            let s:defMatcher = '\%(\%(private\|protected\)\%(\[[^\]]*\]\)\?\s\+\|abstract\s\+\|override\s\+\)*\'
            let s:funcNameMatcher = '\w\+'
            let s:typeSpecMatcher = '\%(\s*\[\_[^\]]*\]\)'
            let s:defArgMatcher = '\%((\_.\{-})\)'
            let s:returnTypeMatcher = '\%(:\s*\w\+' . s:typeSpecMatcher . '\?\)'
            let g:fullDefMatcher = '^\s*' . s:defMatcher . '\s\+' . s:funcNameMatcher . '\s*' . s:typeSpecMatcher . '\?\s*' . s:defArgMatcher . '\?\s*' . s:returnTypeMatcher . '\?\s*[={]'
            
            function! scala#ConditionalConfirm(msg)
              if 0
                call confirm(a:msg)
              endif
            endfunction
            
            function! scala#GetLine(lnum)
              let line = substitute(getline(a:lnum), '//.*$', '', '')
              let line = substitute(line, '"[^"]*"', '""', 'g')
              return line
            endfunction
            
            function! scala#CountBrackets(line, openBracket, closedBracket)
              let line = substitute(a:line, '"\(.\|\\"\)*"', '', 'g')
              let open = substitute(line, '[^' . a:openBracket . ']', '', 'g')
              let close = substitute(line, '[^' . a:closedBracket . ']', '', 'g')
              return strlen(open) - strlen(close)
            endfunction
            
            function! scala#CountParens(line)
              return scala#CountBrackets(a:line, '(', ')')
            endfunction
            
            function! scala#CountCurlies(line)
              return scala#CountBrackets(a:line, '{', '}')
            endfunction
            
            function! scala#LineEndsInIncomplete(line)
              if a:line =~ '[.,]\s*$'
                return 1
              else
                return 0
              endif
            endfunction
            
            function! scala#LineIsAClosingXML(line)
              if a:line =~ '^\s*]*\)>.*$', '\1', '')
              let [lineNum, colnum] = searchpairpos('<' . tag . '>', '', '', 'Wbn')
              call setpos('.', savedpos)
              let pline = scala#GetLine(prevnonblank(lineNum - 1))
              if pline =~ '=\s*$'
                return 1
              else
                return 0
              endif
            endfunction
            
            function! scala#IsParentCase()
              let savedpos = getpos('.')
              call setpos('.', [savedpos[0], savedpos[1], 0, savedpos[3]])
              let [l, c] = searchpos('^\s*\%(' . s:defMatcher . '\|\%(\\)\)', 'bnW')
              let retvalue = -1
              if l != 0 && search('\%' . l . 'l\s*\', 'bnW')
                let retvalue = l
              endif 
              call setpos('.', savedpos)
              return retvalue
            endfunction
            
            function! scala#CurlyMatcher()
              let matchline = scala#GetLineThatMatchesBracket('{', '}')
              if scala#CountParens(scala#GetLine(matchline)) < 0
                let savedpos = getpos('.')
                call setpos('.', [savedpos[0], matchline, 9999, savedpos[3]])
                call searchpos('{', 'Wb')
                call searchpos(')', 'Wb')
                let [lnum, colnum] = searchpairpos('(', '', ')', 'Wbn')
                call setpos('.', savedpos)
                let line = scala#GetLine(lnum)
                if line =~ '^\s*' . s:defMatcher
                  return lnum
                else
                  return matchline
                endif
              else
                return matchline
              endif
            endfunction
            
            function! scala#GetLineAndColumnThatMatchesCurly()
              return scala#GetLineAndColumnThatMatchesBracket('{', '}')
            endfunction
            
            function! scala#GetLineAndColumnThatMatchesParen()
              return scala#GetLineAndColumnThatMatchesBracket('(', ')')
            endfunction
            
            function! scala#GetLineAndColumnThatMatchesBracket(openBracket, closedBracket)
              let savedpos = getpos('.')
              let curline = scala#GetLine(line('.'))
              if curline =~ a:closedBracket . '.*' . a:openBracket . '.*' . a:closedBracket
                call setpos('.', [savedpos[0], savedpos[1], 0, savedpos[3]])
                call searchpos(a:closedBracket . '\ze[^' . a:closedBracket . a:openBracket . ']*' . a:openBracket, 'W')
              else
                call setpos('.', [savedpos[0], savedpos[1], 9999, savedpos[3]])
                call searchpos(a:closedBracket, 'Wb')
              endif
              let [lnum, colnum] = searchpairpos(a:openBracket, '', a:closedBracket, 'Wbn')
              call setpos('.', savedpos)
              return [lnum, colnum]
            endfunction
            
            function! scala#GetLineThatMatchesCurly()
              return scala#GetLineThatMatchesBracket('{', '}')
            endfunction
            
            function! scala#GetLineThatMatchesParen()
              return scala#GetLineThatMatchesBracket('(', ')')
            endfunction
            
            function! scala#GetLineThatMatchesBracket(openBracket, closedBracket)
              let [lnum, colnum] = scala#GetLineAndColumnThatMatchesBracket(a:openBracket, a:closedBracket)
              return lnum
            endfunction
            
            function! scala#NumberOfBraceGroups(line)
              let line = substitute(a:line, '[^()]', '', 'g')
              if strlen(line) == 0
                return 0
              endif
              let line = substitute(line, '^)*', '', 'g')
              if strlen(line) == 0
                return 0
              endif
              let line = substitute(line, '^(', '', 'g')
              if strlen(line) == 0
                return 0
              endif
              let c = 1
              let counter = 0
              let groupCount = 0
              while counter < strlen(line)
                let char = strpart(line, counter, 1)
                if char == '('
                  let c = c + 1
                elseif char == ')'
                  let c = c - 1
                endif
                if c == 0
                  let groupCount = groupCount + 1
                endif
                let counter = counter + 1
              endwhile
              return groupCount
            endfunction
            
            function! scala#MatchesIncompleteDefValr(line)
              if a:line =~ '^\s*\%(' . s:defMatcher . '\|\\).*[=({]\s*$'
                return 1
              else
                return 0
              endif
            endfunction
            
            function! scala#LineIsCompleteIf(line)
              if scala#CountBrackets(a:line, '{', '}') == 0 &&
               \ scala#CountBrackets(a:line, '(', ')') == 0 &&
               \ a:line =~ '^\s*\\s*([^)]*)\s*\S.*$'
                return 1
              else
                return 0
              endif
            endfunction
            
            function! scala#LineCompletesIfElse(lnum, line)
              if a:line =~ '^\s*\%(\\|\%(}\s*\)\?\\)'
                return 0
              endif
              let result = search('^\%(\s*\\s*(.*).*\n\|\s*\\s*(.*)\s*\n.*\n\)\%(\s*\\s*\\s*(.*)\s*\n.*\n\)*\%(\s*\\s*\n\|\s*\[^{]*\n\)\?\%' . a:lnum . 'l', 'Wbn')
              if result != 0 && scala#GetLine(prevnonblank(a:lnum - 1)) !~ '{\s*$'
                return result
              endif
              return 0
            endfunction
            
            function! scala#GetPrevCodeLine(lnum)
              " This needs to skip comment lines
              return prevnonblank(a:lnum - 1)
            endfunction
            
            function! scala#InvertBracketType(openBracket, closedBracket)
              if a:openBracket == '('
                return [ '{', '}' ]
              else
                return [ '(', ')' ]
              endif
            endfunction
            
            function! scala#Testhelper(lnum, line, openBracket, closedBracket, iteration)
              let bracketCount = scala#CountBrackets(a:line, a:openBracket, a:closedBracket)
              " There are more '}' braces than '{' on this line so it may be completing the function definition
              if bracketCount < 0
                let [matchedLNum, matchedColNum] = scala#GetLineAndColumnThatMatchesBracket(a:openBracket, a:closedBracket)
                if matchedLNum == a:lnum
                  return -1
                endif
                let matchedLine = scala#GetLine(matchedLNum)
                if ! scala#MatchesIncompleteDefValr(matchedLine)
                  let bracketLine = substitute(substitute(matchedLine, '\%' . matchedColNum . 'c.*$', '', ''), '[^{}()]', '', 'g')
                  if bracketLine =~ '}$'
                    return scala#Testhelper(matchedLNum, matchedLine, '{', '}', a:iteration + 1)
                  elseif bracketLine =~ ')$'
                    return scala#Testhelper(matchedLNum, matchedLine, '(', ')', a:iteration + 1)
                  else
                    let prevCodeLNum = scala#GetPrevCodeLine(matchedLNum)
                    if scala#MatchesIncompleteDefValr(scala#GetLine(prevCodeLNum))
                      return prevCodeLNum
                    else
                      return -1
                    endif
                  endif
                else
                  " return indent value instead
                  return matchedLNum
                endif
              " There's an equal number of '{' and '}' on this line so it may be a single line function definition
              elseif bracketCount == 0
                if a:iteration == 0
                  let otherBracketType = scala#InvertBracketType(a:openBracket, a:closedBracket)
                  return scala#Testhelper(a:lnum, a:line, otherBracketType[0], otherBracketType[1], a:iteration + 1)
                else
                  let prevCodeLNum = scala#GetPrevCodeLine(a:lnum)
                  let prevCodeLine = scala#GetLine(prevCodeLNum)
                  if scala#MatchesIncompleteDefValr(prevCodeLine) && prevCodeLine !~ '{\s*$'
                    return prevCodeLNum
                  else
                    let possibleIfElse = scala#LineCompletesIfElse(a:lnum, a:line)
                    if possibleIfElse != 0
                      let defValrLine = prevnonblank(possibleIfElse - 1)
                      let possibleDefValr = scala#GetLine(defValrLine)
                      if scala#MatchesIncompleteDefValr(possibleDefValr) && possibleDefValr =~ '^.*=\s*$'
                        return possibleDefValr
                      else
                        return -1
                      endif
                    else
                      return -1
                    endif
                  endif
                endif
              else
                return -1
              endif
            endfunction
            
            function! scala#Test(lnum, line, openBracket, closedBracket)
              return scala#Testhelper(a:lnum, a:line, a:openBracket, a:closedBracket, 0)
            endfunction
            
            function! scala#LineCompletesDefValr(lnum, line)
              let bracketCount = scala#CountBrackets(a:line, '{', '}')
              if bracketCount < 0
                let matchedBracket = scala#GetLineThatMatchesBracket('{', '}')
                if ! scala#MatchesIncompleteDefValr(scala#GetLine(matchedBracket))
                  let possibleDefValr = scala#GetLine(prevnonblank(matchedBracket - 1))
                  if matchedBracket != -1 && scala#MatchesIncompleteDefValr(possibleDefValr)
                    return 1
                  else
                    return 0
                  endif
                else
                  return 0
                endif
              elseif bracketCount == 0
                let bracketCount = scala#CountBrackets(a:line, '(', ')')
                if bracketCount < 0
                  let matchedBracket = scala#GetLineThatMatchesBracket('(', ')')
                  if ! scala#MatchesIncompleteDefValr(scala#GetLine(matchedBracket))
                    let possibleDefValr = scala#GetLine(prevnonblank(matchedBracket - 1))
                    if matchedBracket != -1 && scala#MatchesIncompleteDefValr(possibleDefValr)
                      return 1
                    else
                      return 0
                    endif
                  else
                    return 0
                  endif
                elseif bracketCount == 0
                  let possibleDefValr = scala#GetLine(prevnonblank(a:lnum - 1))
                  if scala#MatchesIncompleteDefValr(possibleDefValr) && possibleDefValr =~ '^.*=\s*$'
                    return 1
                  else
                    let possibleIfElse = scala#LineCompletesIfElse(a:lnum, a:line)
                    if possibleIfElse != 0
                      let possibleDefValr = scala#GetLine(prevnonblank(possibleIfElse - 1))
                      if scala#MatchesIncompleteDefValr(possibleDefValr) && possibleDefValr =~ '^.*=\s*$'
                        return 2
                      else
                        return 0
                      endif
                    else
                      return 0
                    endif
                  endif
                else
                  return 0
                endif
              endif
            endfunction
            
            function! scala#SpecificLineCompletesBrackets(lnum, openBracket, closedBracket)
              let savedpos = getpos('.')
              call setpos('.', [savedpos[0], a:lnum, 9999, savedpos[3]])
              let retv = scala#LineCompletesBrackets(a:openBracket, a:closedBracket)
              call setpos('.', savedpos)
            
              return retv
            endfunction
            
            function! scala#LineCompletesBrackets(openBracket, closedBracket)
              let savedpos = getpos('.')
              let offline = 0
              while offline == 0
                let [lnum, colnum] = searchpos(a:closedBracket, 'Wb')
                let [lnumA, colnumA] = searchpairpos(a:openBracket, '', a:closedBracket, 'Wbn')
                if lnum != lnumA
                  let [lnumB, colnumB] = searchpairpos(a:openBracket, '', a:closedBracket, 'Wbnr')
                  let offline = 1
                endif
              endwhile
              call setpos('.', savedpos)
              if lnumA == lnumB && colnumA == colnumB
                return lnumA
              else
                return -1
              endif
            endfunction
            
            function! GetScalaIndent()
              " Find a non-blank line above the current line.
              let prevlnum = prevnonblank(v:lnum - 1)
            
              " Hit the start of the file, use zero indent.
              if prevlnum == 0
                return 0
              endif
            
              let ind = indent(prevlnum)
              let originalIndentValue = ind
              let prevline = scala#GetLine(prevlnum)
              let curlnum = v:lnum
              let curline = scala#GetLine(curlnum)
            
              if prevline =~ '^\s*/\*\*'
                return ind + 1
              endif
            
              if curline =~ '^\s*\*'
                return cindent(curlnum)
              endif
            
              " If this line starts with a { then make it indent the same as the previous line
              if curline =~ '^\s*{'
                call scala#ConditionalConfirm("1")
                " Unless, of course, the previous one is a { as well
                if prevline !~ '^\s*{'
                  call scala#ConditionalConfirm("2")
                  return indent(prevlnum)
                endif
              endif
            
              " '.' continuations
              if curline =~ '^\s*\.'
                if prevline =~ '^\s*\.'
                  return ind
                else
                  return ind + &shiftwidth
                endif
              endif
            
              " Indent html literals
              if prevline !~ '/>\s*$' && prevline =~ '^\s*<[a-zA-Z][^>]*>\s*$'
                call scala#ConditionalConfirm("3")
                return ind + &shiftwidth
              endif
            
              " assumes curly braces around try-block
              if curline =~ '^\s*}\s*\'
                return ind - &shiftwidth
              elseif curline =~ '^\s*\'
                return ind
              endif
            
              " Add a 'shiftwidth' after lines that start a block
              " If 'if', 'for' or 'while' end with ), this is a one-line block
              " If 'val', 'var', 'def' end with =, this is a one-line block
              if (prevline =~ '^\s*\<\%(\%(}\?\s*else\s\+\)\?if\|for\|while\)\>.*[)=]\s*$' && scala#NumberOfBraceGroups(prevline) <= 1)
                    \ || prevline =~ '^\s*' . s:defMatcher . '.*=\s*$'
                    \ || prevline =~ '^\s*\.*[=]\s*$'
                    \ || prevline =~ '^\s*\%(}\s*\)\?\\s*$'
                    \ || prevline =~ '=\s*$'
                call scala#ConditionalConfirm("4")
                let ind = ind + &shiftwidth
              elseif prevline =~ '^\s*\<\%(}\?\s*else\s\+\)\?if\>' && curline =~ '^\s*}\?\s*\'
                return ind
              endif
            
              let lineCompletedBrackets = 0
              let bracketCount = scala#CountBrackets(prevline, '{', '}')
              if bracketCount > 0 || prevline =~ '.*{\s*$'
                call scala#ConditionalConfirm("5b")
                let ind = ind + &shiftwidth
              elseif bracketCount < 0
                call scala#ConditionalConfirm("6b")
                " if the closing brace actually completes the braces entirely, then we
                " have to indent to line that started the whole thing
                let completeLine = scala#LineCompletesBrackets('{', '}')
                if completeLine != -1
                  call scala#ConditionalConfirm("8b")
                  let prevCompleteLine = scala#GetLine(prevnonblank(completeLine - 1))
                  " However, what actually started this part looks like it was a function
                  " definition, so we need to indent to that line instead.  This is 
                  " actually pretty weak at the moment.
                  if prevCompleteLine =~ '=\s*$'
                    call scala#ConditionalConfirm("9b")
                    let ind = indent(prevnonblank(completeLine - 1))
                  else
                    call scala#ConditionalConfirm("10b")
                    let ind = indent(completeLine)
                  endif
                else
                  let lineCompletedBrackets = 1
                endif
              endif
            
              if ind == originalIndentValue
                let bracketCount = scala#CountBrackets(prevline, '(', ')')
                if bracketCount > 0 || prevline =~ '.*(\s*$'
                  call scala#ConditionalConfirm("5a")
                  let ind = ind + &shiftwidth
                elseif bracketCount < 0
                  call scala#ConditionalConfirm("6a")
                  " if the closing brace actually completes the braces entirely, then we
                  " have to indent to line that started the whole thing
                  let completeLine = scala#LineCompletesBrackets('(', ')')
                  if completeLine != -1 && prevline !~ '^.*{\s*$'
                    call scala#ConditionalConfirm("8a")
                    let prevCompleteLine = scala#GetLine(prevnonblank(completeLine - 1))
                    " However, what actually started this part looks like it was a function
                    " definition, so we need to indent to that line instead.  This is 
                    " actually pretty weak at the moment.
                    if prevCompleteLine =~ '=\s*$'
                      call scala#ConditionalConfirm("9a")
                      let ind = indent(prevnonblank(completeLine - 1))
                    else
                      call scala#ConditionalConfirm("10a")
                      let ind = indent(completeLine)
                    endif
                  else
                    " This is the only part that's different from from the '{', '}' one below
                    " Yup... some refactoring is necessary at some point.
                    let ind = ind + (bracketCount * &shiftwidth)
                    let lineCompletedBrackets = 1
                  endif
                endif
              endif
            
              if curline =~ '^\s*}\?\s*\\%(\s\+\\s*(.*)\)\?\s*{\?\s*$' &&
               \ ! scala#LineIsCompleteIf(prevline) &&
               \ prevline !~ '^.*}\s*$'
                let ind = ind - &shiftwidth
              endif
            
              " Subtract a 'shiftwidth' on '}' or html
              let curCurlyCount = scala#CountCurlies(curline)
              if curCurlyCount < 0
                call scala#ConditionalConfirm("14a")
                let matchline = scala#CurlyMatcher()
                return indent(matchline)
              elseif curline =~ '^\s*]*>'
                call scala#ConditionalConfirm("14c")
                return ind - &shiftwidth
              endif
            
              let prevParenCount = scala#CountParens(prevline)
              if prevline =~ '^\s*\.*$' && prevParenCount > 0
                call scala#ConditionalConfirm("15")
                let ind = indent(prevlnum) + 5
              endif
            
              let prevCurlyCount = scala#CountCurlies(prevline)
              if prevCurlyCount == 0 && prevline =~ '^.*\%(=>\|⇒\)\s*$' && prevline !~ '^\s*this\s*:.*\%(=>\|⇒\)\s*$' && curline !~ '^\s*\'
                call scala#ConditionalConfirm("16")
                let ind = ind + &shiftwidth
              endif
            
              if ind == originalIndentValue && curline =~ '^\s*\'
                call scala#ConditionalConfirm("17")
                let parentCase = scala#IsParentCase()
                if parentCase != -1
                  call scala#ConditionalConfirm("17a")
                  return indent(parentCase)
                endif
              endif
            
              if prevline =~ '^\s*\*/'
               \ || prevline =~ '*/\s*$'
                call scala#ConditionalConfirm("18")
                let ind = ind - 1
              endif
            
              if scala#LineEndsInIncomplete(curline)
                call scala#ConditionalConfirm("19")
                return ind
              endif
            
              if scala#LineIsAClosingXML(prevline)
                if scala#LineCompletesXML(prevlnum, prevline)
                  call scala#ConditionalConfirm("20a")
                  return ind - &shiftwidth
                else
                  call scala#ConditionalConfirm("20b")
                  return ind
                endif
              endif
            
              if ind == originalIndentValue
                "let indentMultiplier = scala#LineCompletesDefValr(prevlnum, prevline)
                "if indentMultiplier != 0
                "  call scala#ConditionalConfirm("19a")
                "  let ind = ind - (indentMultiplier * &shiftwidth)
                let defValrLine = scala#Test(prevlnum, prevline, '{', '}')
                if defValrLine != -1
                  call scala#ConditionalConfirm("21a")
                  let ind = indent(defValrLine)
                elseif lineCompletedBrackets == 0
                  call scala#ConditionalConfirm("21b")
                  if scala#GetLine(prevnonblank(prevlnum - 1)) =~ '^.*\\s*\%(//.*\)\?$'
                    call scala#ConditionalConfirm("21c")
                    let ind = ind - &shiftwidth
                  elseif scala#LineCompletesIfElse(prevlnum, prevline)
                    call scala#ConditionalConfirm("21d")
                    let ind = ind - &shiftwidth
                  elseif scala#CountParens(curline) < 0 && curline =~ '^\s*)' && scala#GetLine(scala#GetLineThatMatchesBracket('(', ')')) =~ '.*(\s*$'
                    " Handles situations that look like this:
                    " 
                    "   val a = func(
                    "     10
                    "   )
                    "
                    " or
                    "
                    "   val a = func(
                    "     10
                    "   ).somethingHere()
                    call scala#ConditionalConfirm("21e")
                    let ind = ind - &shiftwidth
                  endif
                endif
              endif
            
              call scala#ConditionalConfirm("returning " . ind)
            
              return ind
            endfunction
            " vim:set ts=2 sts=2 sw=2:
            " vim600:fdm=marker fdl=1 fdc=0:
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/scss.vim
            ================================================
            " Vim indent file
            " Language:	SCSS
            " Maintainer:	Tim Pope 
            " Last Change:	2010 Jul 26
            
            if exists("b:did_indent")
              finish
            endif
            
            runtime! indent/css.vim
            
            " vim:set sw=2:
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/slim.vim
            ================================================
            " Vim indent file
            " Language:	Slim
            
            if exists("b:did_indent")
              finish
            endif
            runtime! indent/ruby.vim
            unlet! b:did_indent
            let b:did_indent = 1
            
            setlocal autoindent sw=2 et
            setlocal indentexpr=GetSlimIndent()
            setlocal indentkeys=o,O,*,},],0),!^F,=end,=else,=elsif,=rescue,=ensure,=when
            
            " Only define the function once.
            if exists("*GetSlimIndent")
              finish
            endif
            
            let s:attributes = '\%({.\{-\}}\|\[.\{-\}\]\)'
            let s:tag = '\%([%.#][[:alnum:]_-]\+\|'.s:attributes.'\)*[<>]*'
            
            if !exists('g:haml_self_closing_tags')
              let g:haml_self_closing_tags = 'meta|link|img|hr|br'
            endif
            
            function! GetSlimIndent()
              let lnum = prevnonblank(v:lnum-1)
              if lnum == 0
                return 0
              endif
              let line = substitute(getline(lnum),'\s\+$','','')
              let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','')
              let lastcol = strlen(line)
              let line = substitute(line,'^\s\+','','')
              let indent = indent(lnum)
              let cindent = indent(v:lnum)
              if cline =~# '\v^-\s*%(elsif|else|when)>'
                let indent = cindent < indent ? cindent : indent - &sw
              endif
              let increase = indent + &sw
              if indent == indent(lnum)
                let indent = cindent <= indent ? -1 : increase
              endif
            
              let group = synIDattr(synID(lnum,lastcol,1),'name')
            
              if line =~ '^doctype'
                return indent
              elseif line =~ '^/\%(\[[^]]*\]\)\=$'
                return increase
              elseif line =~ '^[\.#]'
                return increase
              elseif line =~? '^div'
                return increase
              elseif group == 'hamlFilter'
                return increase
              elseif line =~ '^'.s:tag.'[&!]\=[=~-]\s*\%(\%(if\|else\|elsif\|unless\|case\|when\|while\|until\|for\|begin\|module\|class\|def\)\>\%(.*\\)\@!\|.*do\%(\s*|[^|]*|\)\=\s*$\)'
                return increase
              elseif line =~ '^'.s:tag.'[&!]\=[=~-].*,\s*$'
                return increase
              elseif line == '-#'
                return increase
              elseif group =~? '\v^(hamlSelfCloser)$' || line =~? '^\v('.g:haml_self_closing_tags.')>'
                return indent
              elseif group =~? '\v^(hamlTag|hamlAttributesDelimiter|hamlObjectDelimiter|hamlClass|hamlId|htmlTagName|htmlSpecialTagName)$'
                return increase
              elseif synIDattr(synID(v:lnum,1,1),'name') ==? 'hamlRubyFilter'
                return GetRubyIndent()
              else
                return indent
              endif
            endfunction
            
            " vim:set sw=2:
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/stylus.vim
            ================================================
            " Vim indent file
            " Language: Stylus
            " Maintainer: Marc Harter
            " Last Change: 2010 May 21
            " Based On: sass.vim from Tim Pope
            "
            if exists("b:did_indent")
              finish
            endif
            unlet! b:did_indent
            let b:did_indent = 1
            
            setlocal indentexpr=GetStylusIndent()
            setlocal indentkeys=o,O,*,},],0),!^F
            setlocal formatoptions+=r
            
            if exists("*GetStylusIndent")  " only define once
              finish
            endif
            
            function s:prevnonblanknoncomment(lnum)
              let lnum = a:lnum
              while lnum > 1
                let lnum = prevnonblank(lnum)
                let line = getline(lnum)
                if line =~ '\*/'
                  while lnum > 1 && line !~ '/\*'
                    let lnum -= 1
                  endwhile
                  if line =~ '^\s*/\*'
                    let lnum -= 1
                  else
                    break
                  endif
                else
                  break
                endif
              endwhile
              return lnum
            endfunction
            
            function s:count_braces(lnum, count_open)
              let n_open = 0
              let n_close = 0
              let line = getline(a:lnum)
              let pattern = '[{}]'
              let i = match(line, pattern)
              while i != -1
                if synIDattr(synID(a:lnum, i + 1, 0), 'name') !~ 'css\%(Comment\|StringQ\{1,2}\)'
                  if line[i] == '{'
                    let n_open += 1
                  elseif line[i] == '}'
                    if n_open > 0
                      let n_open -= 1
                    else
                      let n_close += 1
                    endif
                  endif
                endif
                let i = match(line, pattern, i + 1)
              endwhile
              return a:count_open ? n_open : n_close
            endfunction
            
            " function CheckCSSIndent()
            "   let line = getline(v:lnum)
            "   if line =~ '^\s*\*'
            "     return cindent(v:lnum)
            "   endif
            " 
            "   let pnum = s:prevnonblanknoncomment(v:lnum - 1)
            "   if pnum == 0
            "     return 0
            "   endif
            " 
            "   return indent(pnum) + s:count_braces(pnum, 1) * &sw
            "         \ - s:count_braces(v:lnum, 0) * &sw
            " endfunction
            
            function! GetStylusIndent()
              let line = getline(v:lnum)
              if line =~ '^\s*\*'
                return cindent(v:lnum)
              endif
            
              let pnum = s:prevnonblanknoncomment(v:lnum - 1)
              if pnum == 0
                return 0
              endif
            
              let lnum     = prevnonblank(v:lnum-1)
              if lnum == 0
                return 0
              endif
            
              let pline = getline(pnum)
            
              if pline =~ '[}{]'
                return indent(pnum) + s:count_braces(pnum, 1) * &sw - s:count_braces(v:lnum, 0) * &sw
              endif
            
              let line     = substitute(getline(lnum),'[\s()]\+$','','')  " get last line strip ending whitespace
              let cline    = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','')  " get current line, trimmed
              let lastcol  = strlen(line)  " get last col in prev line
              let line     = substitute(line,'^\s\+','','')  " then remove preceeding whitespace
              let indent   = indent(lnum)  " get indent on prev line
              let cindent  = indent(v:lnum)  " get indent on current line
              let increase = indent + &sw  " increase indent by the shift width
              if indent   == indent(lnum)
                let indent = cindent <= indent ? indent : increase
              endif
            
              let group = synIDattr(synID(lnum,lastcol,1),'name')
            
              " for debugging only
              echo group
            
              " if group !~? 'css.*' && line =~? ')\s*$' " match user functions
              "   return increase
              if group =~? '\v^%(cssTagName|cssClassName|cssIdentifier|cssSelectorOp|cssSelectorOp2|cssBraces|cssAttributeSelector|cssPseudoClass|cssPseudoClassId|stylusId|stylusClass)$'
                return increase
              elseif (group == 'stylusUserFunction') && (indent(lnum) == '0') " mixin definition
                return increase
              else
                return indent
              endif
            endfunction
            
            " vim:set sw=2;
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/indent/tex.vim
            ================================================
            " LaTeX indent file (part of LaTeX Box)
            " Maintainer: David Munger (mungerd@gmail.com)
            
            if exists("g:LatexBox_custom_indent") && ! g:LatexBox_custom_indent
            	finish
            endif
            if exists("b:did_indent")
            	finish
            endif
            
            let b:did_indent = 1
            
            setlocal indentexpr=LatexBox_TexIndent()
            setlocal indentkeys=0=\\end,0=\\end{enumerate},0=\\end{itemize},0=\\end{description},0=\\right,0=\\item,0=\\),0=\\],0},o,O,0\\
            
            let s:list_envs = ['itemize', 'enumerate', 'description']
            " indent on \left( and on \(, but not on (
            " indent on \left[ and on \[, but not on [
            " indent on \left\{ and on {, but not on \{
            let s:open_pat = '\\\@
            " Original Author:  Johannes Hoff 
            " Last Change: 19 February 2013
            " License:     VIM license (:help license, replace vim by arduino.vim)
            
            " Syntax highlighting like in the Arduino IDE
            " Automatically generated by the script available at
            "    https://bitbucket.org/johannes/arduino-vim-syntax
            " Using keywords from /lib/keywords.txt
            " From version: 
            
            " Thanks to original author Johannes Hoff and Rik, Erik Nomitch, Adam Obeng and Graeme Cross for helpful feedback!
            
            " For version 5.x: Clear all syntax items
            " For version 6.x: Quit when a syntax file was already loaded
            if version < 600
              syntax clear
            elseif exists("b:current_syntax")
              finish
            endif
            
            " Read the C syntax to start with
            if version < 600
              so :p:h/cpp.vim
            else
              runtime! syntax/cpp.vim
            endif
            
            syn keyword arduinoConstant  BIN CHANGE DEC DEFAULT EXTERNAL FALLING HALF_PI HEX
            syn keyword arduinoConstant  HIGH INPUT INPUT_PULLUP INTERNAL INTERNAL1V1
            syn keyword arduinoConstant  INTERNAL2V56 LOW LSBFIRST MSBFIRST OCT OUTPUT PI
            syn keyword arduinoConstant  RISING TWO_PI
            
            syn keyword arduinoFunc      analogRead analogReference analogWrite
            syn keyword arduinoFunc      attachInterrupt bit bitClear bitRead bitSet
            syn keyword arduinoFunc      bitWrite delay delayMicroseconds detachInterrupt
            syn keyword arduinoFunc      digitalRead digitalWrite highByte interrupts
            syn keyword arduinoFunc      lowByte micros millis noInterrupts noTone pinMode
            syn keyword arduinoFunc      pulseIn shiftIn shiftOut tone
            
            syn keyword arduinoMethod    available begin end find findUntil flush loop
            syn keyword arduinoMethod    parseFloat parseInt peek print println read
            syn keyword arduinoMethod    readBytes readBytesUntil setTimeout setup
            
            syn keyword arduinoModule    Serial Serial1 Serial2 Serial3
            
            syn keyword arduinoStdFunc   abs acos asin atan atan2 ceil constrain cos degrees
            syn keyword arduinoStdFunc   exp floor log map max min radians random randomSeed
            syn keyword arduinoStdFunc   round sin sq sqrt tan
            
            syn keyword arduinoType      boolean byte null String word
            
            hi def link arduinoType Type
            hi def link arduinoConstant Constant
            hi def link arduinoStdFunc Function
            hi def link arduinoFunc Function
            hi def link arduinoMethod Function
            hi def link arduinoModule Identifier
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/c.vim
            ================================================
            " Vim syntax file
            " Language:	C
            " Maintainer:	Bram Moolenaar 
            " Last Change:	2013 Jul 05
            
            " Quit when a (custom) syntax file was already loaded
            if exists("b:current_syntax")
              finish
            endif
            
            let s:cpo_save = &cpo
            set cpo&vim
            
            let s:ft = matchstr(&ft, '^\([^.]\)\+')
            
            " A bunch of useful C keywords
            syn keyword	cStatement	goto break return continue asm
            syn keyword	cLabel		case default
            syn keyword	cConditional	if else switch
            syn keyword	cRepeat		while for do
            
            syn keyword	cTodo		contained TODO FIXME XXX
            
            " It's easy to accidentally add a space after a backslash that was intended
            " for line continuation.  Some compilers allow it, which makes it
            " unpredictable and should be avoided.
            syn match	cBadContinuation contained "\\\s\+$"
            
            " cCommentGroup allows adding matches for special things in comments
            syn cluster	cCommentGroup	contains=cTodo,cBadContinuation
            
            " String and Character constants
            " Highlight special characters (those which have a backslash) differently
            syn match	cSpecial	display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
            if !exists("c_no_utf")
              syn match	cSpecial	display contained "\\\(u\x\{4}\|U\x\{8}\)"
            endif
            if exists("c_no_cformat")
              syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
              " cCppString: same as cString, but ends at end of line
              if !exists("cpp_no_cpp11") " ISO C++11
                syn region cCppString	start=+\(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
              else
                syn region cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
              endif
              syn region	cCppOut2	contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip
              syn region	cCppSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip
            else
              if !exists("c_no_c99") " ISO C99
                syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
              else
                syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
              endif
              syn match	cFormat		display "%%" contained
              syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
              " cCppString: same as cString, but ends at end of line
              syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
            endif
            
            syn match	cCharacter	"L\='[^\\]'"
            syn match	cCharacter	"L'[^']*'" contains=cSpecial
            if exists("c_gnu")
              syn match	cSpecialError	"L\='\\[^'\"?\\abefnrtv]'"
              syn match	cSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
            else
              syn match	cSpecialError	"L\='\\[^'\"?\\abfnrtv]'"
              syn match	cSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
            endif
            syn match	cSpecialCharacter display "L\='\\\o\{1,3}'"
            syn match	cSpecialCharacter display "'\\x\x\{1,2}'"
            syn match	cSpecialCharacter display "L'\\x\x\+'"
            
            if !exists("c_no_c11") " ISO C11
              if exists("c_no_cformat")
                syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
              else
                syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
              endif
              syn match	cCharacter	"[Uu]'[^\\]'"
              syn match	cCharacter	"[Uu]'[^']*'" contains=cSpecial
              if exists("c_gnu")
                syn match	cSpecialError	"[Uu]'\\[^'\"?\\abefnrtv]'"
                syn match	cSpecialCharacter "[Uu]'\\['\"?\\abefnrtv]'"
              else
                syn match	cSpecialError	"[Uu]'\\[^'\"?\\abfnrtv]'"
                syn match	cSpecialCharacter "[Uu]'\\['\"?\\abfnrtv]'"
              endif
              syn match	cSpecialCharacter display "[Uu]'\\\o\{1,3}'"
              syn match	cSpecialCharacter display "[Uu]'\\x\x\+'"
            endif
            
            "when wanted, highlight trailing white space
            if exists("c_space_errors")
              if !exists("c_no_trail_space_error")
                syn match	cSpaceError	display excludenl "\s\+$"
              endif
              if !exists("c_no_tab_space_error")
                syn match	cSpaceError	display " \+\t"me=e-1
              endif
            endif
            
            " This should be before cErrInParen to avoid problems with #define ({ xxx })
            if exists("c_curly_error")
              syn match cCurlyError "}"
              syn region	cBlock		start="{" end="}" contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
            else
              syn region	cBlock		start="{" end="}" transparent fold
            endif
            
            "catch errors caused by wrong parenthesis and brackets
            " also accept <% for {, %> for }, <: for [ and :> for ] (C99)
            " But avoid matching <::.
            syn cluster	cParenGroup	contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
            if exists("c_no_curly_error")
              if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
                syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
                " cCppParen: same as cParen but ends at end-of-line; used in cDefine
                syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
                syn match	cParenError	display ")"
                syn match	cErrInParen	display contained "^^<%\|^%>"
              else
                syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
                " cCppParen: same as cParen but ends at end-of-line; used in cDefine
                syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
                syn match	cParenError	display ")"
                syn match	cErrInParen	display contained "^[{}]\|^<%\|^%>"
              endif
            elseif exists("c_no_bracket_error")
              if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
                syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
                " cCppParen: same as cParen but ends at end-of-line; used in cDefine
                syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
                syn match	cParenError	display ")"
                syn match	cErrInParen	display contained "<%\|%>"
              else
                syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
                " cCppParen: same as cParen but ends at end-of-line; used in cDefine
                syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
                syn match	cParenError	display ")"
                syn match	cErrInParen	display contained "[{}]\|<%\|%>"
              endif
            else
              if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
                syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
                " cCppParen: same as cParen but ends at end-of-line; used in cDefine
                syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
                syn match	cParenError	display "[\])]"
                syn match	cErrInParen	display contained "<%\|%>"
                syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
              else
                syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
                " cCppParen: same as cParen but ends at end-of-line; used in cDefine
                syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
                syn match	cParenError	display "[\])]"
                syn match	cErrInParen	display contained "[\]{}]\|<%\|%>"
                syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
              endif
              " cCppBracket: same as cParen but ends at end-of-line; used in cDefine
              syn region	cCppBracket	transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
              syn match	cErrInBracket	display contained "[);{}]\|<%\|%>"
            endif
            
            if s:ft ==# 'c' || exists("cpp_no_cpp11")
              syn region	cBadBlock	keepend start="{" end="}" contained containedin=cParen,cBracket,cBadBlock transparent fold
            endif
            
            "integer number, or floating point number without a dot and with "f".
            syn case ignore
            syn match	cNumbers	display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal
            " Same, but without octal error (for comments)
            syn match	cNumbersCom	display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctal
            syn match	cNumber		display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
            "hex number
            syn match	cNumber		display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
            " Flag the first zero of an octal number as something special
            syn match	cOctal		display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero
            syn match	cOctalZero	display contained "\<0"
            syn match	cFloat		display contained "\d\+f"
            "floating point number, with dot, optional exponent
            syn match	cFloat		display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
            "floating point number, starting with a dot, optional exponent
            syn match	cFloat		display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
            "floating point number, without dot, with exponent
            syn match	cFloat		display contained "\d\+e[-+]\=\d\+[fl]\=\>"
            if !exists("c_no_c99")
              "hexadecimal floating point number, optional leading digits, with dot, with exponent
              syn match	cFloat		display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
              "hexadecimal floating point number, with leading digits, optional dot, with exponent
              syn match	cFloat		display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
            endif
            
            " flag an octal number with wrong digits
            syn match	cOctalError	display contained "0\o*[89]\d*"
            syn case match
            
            if exists("c_comment_strings")
              " A comment can contain cString, cCharacter and cNumber.
              " But a "*/" inside a cString in a cComment DOES end the comment!  So we
              " need to use a special type of cString: cCommentString, which also ends on
              " "*/", and sees a "*" at the start of the line as comment again.
              " Unfortunately this doesn't very well work for // type of comments :-(
              syn match	cCommentSkip	contained "^\s*\*\($\|\s\+\)"
              syn region cCommentString	contained start=+L\=\\\@" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
            syn match	cPreConditMatch	display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
            if !exists("c_no_if0")
              syn cluster	cCppOutInGroup	contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip
              syn region	cCppOutWrapper	start="^\s*\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold
              syn region	cCppOutIf	contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse
              if !exists("c_no_if0_fold")
                syn region	cCppOutIf2	contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold
              else
                syn region	cCppOutIf2	contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
              endif
              syn region	cCppOutElse	contained matchgroup=cCppOutWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit
              syn region	cCppInWrapper	start="^\s*\(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold
              syn region	cCppInIf	contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\(%:\|#\)\s*endif\>" contains=TOP,cPreCondit
              if !exists("c_no_if0_fold")
                syn region	cCppInElse	contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold
              else
                syn region	cCppInElse	contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2
              endif
              syn region	cCppInElse2	contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)\([^/]\|/[^/*]\)*" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
              syn region	cCppOutSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip
              syn region	cCppInSkip	contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(if\s\+\(\d\+\s*\($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc
            endif
            syn region	cIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
            syn match	cIncluded	display contained "<[^>]*>"
            syn match	cInclude	display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
            "syn match cLineSkip	"\\$"
            syn cluster	cPreProcGroup	contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti,cBadBlock
            syn region	cDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
            syn region	cPreProc	start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
            
            " Highlight User Labels
            syn cluster	cMultiGroup	contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
            if s:ft ==# 'c' || exists("cpp_no_cpp11")
              syn region	cMulti		transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
            endif
            " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
            syn cluster	cLabelGroup	contains=cUserLabel
            syn match	cUserCont	display "^\s*\I\i*\s*:$" contains=@cLabelGroup
            syn match	cUserCont	display ";\s*\I\i*\s*:$" contains=@cLabelGroup
            syn match	cUserCont	display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
            syn match	cUserCont	display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
            
            syn match	cUserLabel	display "\I\i*" contained
            
            " Avoid recognizing most bitfields as labels
            syn match	cBitField	display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
            syn match	cBitField	display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
            
            if exists("c_minlines")
              let b:c_minlines = c_minlines
            else
              if !exists("c_no_if0")
                let b:c_minlines = 50	" #if 0 constructs can be long
              else
                let b:c_minlines = 15	" mostly for () constructs
              endif
            endif
            if exists("c_curly_error")
              syn sync fromstart
            else
              exec "syn sync ccomment cComment minlines=" . b:c_minlines
            endif
            
            " Define the default highlighting.
            " Only used when an item doesn't have highlighting yet
            hi def link cFormat		cSpecial
            hi def link cCppString		cString
            hi def link cCommentL		cComment
            hi def link cCommentStart	cComment
            hi def link cLabel		Label
            hi def link cUserLabel		Label
            hi def link cConditional	Conditional
            hi def link cRepeat		Repeat
            hi def link cCharacter		Character
            hi def link cSpecialCharacter	cSpecial
            hi def link cNumber		Number
            hi def link cOctal		Number
            hi def link cOctalZero		PreProc	 " link this to Error if you want
            hi def link cFloat		Float
            hi def link cOctalError		cError
            hi def link cParenError		cError
            hi def link cErrInParen		cError
            hi def link cErrInBracket	cError
            hi def link cCommentError	cError
            hi def link cCommentStartError	cError
            hi def link cSpaceError		cError
            hi def link cSpecialError	cError
            hi def link cCurlyError		cError
            hi def link cOperator		Operator
            hi def link cStructure		Structure
            hi def link cStorageClass	StorageClass
            hi def link cInclude		Include
            hi def link cPreProc		PreProc
            hi def link cDefine		Macro
            hi def link cIncluded		cString
            hi def link cError		Error
            hi def link cStatement		Statement
            hi def link cCppInWrapper	cCppOutWrapper
            hi def link cCppOutWrapper	cPreCondit
            hi def link cPreConditMatch	cPreCondit
            hi def link cPreCondit		PreCondit
            hi def link cType		Type
            hi def link cConstant		Constant
            hi def link cCommentString	cString
            hi def link cComment2String	cString
            hi def link cCommentSkip	cComment
            hi def link cString		String
            hi def link cComment		Comment
            hi def link cSpecial		SpecialChar
            hi def link cTodo		Todo
            hi def link cBadContinuation	Error
            hi def link cCppOutSkip		cCppOutIf2
            hi def link cCppInElse2		cCppOutIf2
            hi def link cCppOutIf2		cCppOut2  " Old syntax group for #if 0 body
            hi def link cCppOut2		cCppOut  " Old syntax group for #if of #if 0
            hi def link cCppOut		Comment
            
            let b:current_syntax = "c"
            
            unlet s:ft
            
            let &cpo = s:cpo_save
            unlet s:cpo_save
            " vim: ts=8
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/cabal.vim
            ================================================
            " Vim syntax file
            " Language: Cabal
            " Author: Tristan Ravitch
            " Version: 0.0.1
            
            if version < 600
              syntax clear
            elseif exists('b:current_syntax')
              finish
            endif
            
            syn sync minlines=50 maxlines=200
            syn case ignore
            
            " Top-level package keywords
            syn match cabalKey '^name:'
            syn match cabalKey '^version:'
            syn match cabalKey '^cabal-version:'
            syn match cabalKey '^build-type:'
            syn match cabalKey '^license:'
            syn match cabalKey '^license-file:'
            syn match cabalKey '^copyright:'
            syn match cabalKey '^author:'
            syn match cabalKey '^maintainer:'
            syn match cabalKey '^stability:'
            syn match cabalKey '^homepage:'
            syn match cabalKey '^bug-reports:'
            syn match cabalKey '^package-url:'
            syn match cabalKey '^synopsis:'
            syn match cabalKey '^description:'
            syn match cabalKey '^category:'
            syn match cabalKey '^tested-with:'
            syn match cabalKey '^data-files:'
            syn match cabalKey '^data-dir:'
            syn match cabalKey '^extra-source-files:'
            syn match cabalKey '^extra-tmp-files:'
            
            " Other keywords
            syn match cabalLit '\(:\s*\)\@<=\(true\|false\)'
            
            " Library-specifics
            syn region cabalLibraryR start='^library\(\s\|$\)\@=' end='^\w' transparent keepend contains=cabalLibrayKey,cabalBuildKey,cabalCondition,cabalOperator
            syn match cabalLibraryKey '^library\(\s\|$\)\@='
            syn match cabalLibraryKey '\(^\s\+\)\@<=exposed-modules:'
            syn match cabalLibraryKey '\(^\s\+\)\@<=exposed:'
            
            " Executable-specifics
            syn region cabalExeR start='^executable\s\@=' end='^\w' transparent keepend contains=cabalExeKey,cabalBuildKey,cabalCondition,cabalOperator,cabalBuildableName
            syn match cabalExeKey '^executable\s\@='
            syn match cabalExeKey '\(^\s\+\)\@<=main-is:'
            
            " Test-specifics
            syn region cabalTestR start='^test-suite\s\@=' end='^\w' transparent keepend contains=cabalTestKey,cabalBuildKey,cabalCondition,cabalOperator,cabalBuildableName
            syn match cabalTestKey '^test-suite\s\@='
            syn match cabalTestKey '\(^\s\+\)\@<=type:'
            syn match cabalTestKey '\(^\s\+\)\@<=main-is:'
            syn match cabalTestKey '\(^\s\+\)\@<=test-module:'
            
            " Benchmark-specifics
            syn region cabalBenchR start='^benchmark\s\@=' end='^\w' transparent keepend contains=cabalBenchKey,cabalBuildKey,cabalCondition,cabalOperator,cabalBuildableName
            syn match cabalBenchKey '^benchmark\s\@='
            syn match cabalBenchKey '\(^\s\+\)\@<=type:'
            syn match cabalBenchKey '\(^\s\+\)\@<=main-is:'
            
            syn match cabalBuildableName '\(^\(^benchmark\|test-suite\|executable\)\s\+\)\@<=\w\+'
            
            " General build info
            syn match cabalBuildKey '\(^\s\+\)\@<=default-language:'
            syn match cabalBuildKey '\(^\s\+\)\@<=build-depends:'
            syn match cabalBuildKey '\(^\s\+\)\@<=other-modules:'
            syn match cabalBuildKey '\(^\s\+\)\@<=hs-source-dirs:'
            syn match cabalBuildKey '\(^\s\+\)\@<=extensions:'
            syn match cabalBuildKey '\(^\s\+\)\@<=build-tools:'
            syn match cabalBuildKey '\(^\s\+\)\@<=buildable:'
            syn match cabalBuildKey '\(^\s\+\)\@<=ghc-options:'
            syn match cabalBuildKey '\(^\s\+\)\@<=ghc-prof-options:'
            syn match cabalBuildKey '\(^\s\+\)\@<=ghc-shared-options:'
            syn match cabalBuildKey '\(^\s\+\)\@<=hugs-options:'
            syn match cabalBuildKey '\(^\s\+\)\@<=nch98-options:'
            syn match cabalBuildKey '\(^\s\+\)\@<=includes:'
            syn match cabalBuildKey '\(^\s\+\)\@<=install-includes:'
            syn match cabalBuildKey '\(^\s\+\)\@<=include-dirs:'
            syn match cabalBuildKey '\(^\s\+\)\@<=c-sources:'
            syn match cabalBuildKey '\(^\s\+\)\@<=extra-libraries:'
            syn match cabalBuildKey '\(^\s\+\)\@<=extra-lib-dirs:'
            syn match cabalBuildKey '\(^\s\+\)\@<=cc-options:'
            syn match cabalBuildKey '\(^\s\+\)\@<=cpp-options:'
            syn match cabalBuildKey '\(^\s\+\)\@<=ld-options:'
            syn match cabalBuildKey '\(^\s\+\)\@<=pkgconfig-depends:'
            syn match cabalBuildKey '\(^\s\+\)\@<=frameworks:'
            
            syn region cabalFlagR start='^flag\s\@=' end='^\w' transparent keepend contains=cabalFlagKey,cabalCondition,cabalFlag
            syn match cabalFlagKey '^flag\s\@='
            syn match cabalFlagKey '\(^\s\+\)\@<=description:'
            syn match cabalFlagKey '\(^\s\+\)\@<=default:'
            syn match cabalFlagKey '\(^\s\+\)\@<=manual:'
            syn match cabalFlag '\(flag\s\+\)\@<=\w\+'
            syn match cabalFlag '\(flag(\)\@<=\w\+)\@='
            
            syn region cabalSourceR start='^source-repository' end='^\w' transparent keepend contains=cabalSourceKey
            syn match cabalSourceKey '^source-repository\s\@='
            syn match cabalSourceKey '\(^\s\+\)\@<=type:'
            syn match cabalSourceKey '\(^\s\+\)\@<=location:'
            syn match cabalSourceKey '\(^\s\+\)\@<=module:'
            syn match cabalSourceKey '\(^\s\+\)\@<=branch:'
            syn match cabalSourceKey '\(^\s\+\)\@<=tag:'
            syn match cabalSourceKey '\(^\s\+\)\@<=subdir:'
            
            syn match cabalCondition '\(^\s\+\)\@<=if\((\|\s\)\@='
            syn match cabalCondition '\(^\s\+\)\@<=else\($\|\s\)\@='
            syn match cabalCondition '\(^\s\+\)\@<=if\((\|\s\)\@='
            syn match cabalCondition '\(^\s\+\)\@<=else\($\|\s\)\@='
            syn match cabalOperator '\W\@<=os\((.\+)\)\@='
            syn match cabalOperator '\W\@<=arch\((.\+)\)\@='
            syn match cabalOperator '\W\@<=impl\((.\+)\)\@='
            syn match cabalOperator '\W\@<=flag\((.\+)\)\@='
            syn match cabalOperator '\(^\s*--.*\)\@\|=\|||\|&&\)'
            
            syn match cabalComment '\s\@<=--.*$'
            
            if version >= 508 || !exists('did_cabal_syntax_inits')
              if version < 508
                let did_cabal_syntax_inits = 1
                command -nargs=+ HiLink hi link 
              else
                command -nargs=+ HiLink hi def link 
              endif
            
              HiLink cabalBuildableName Structure
              HiLink cabalFlag Special
              HiLink cabalComment Comment
              HiLink cabalCondition Conditional
              HiLink cabalSourceKey Keyword
              HiLink cabalOperator Operator
              HiLink cabalKey Keyword
              HiLink cabalLibraryKey Keyword
              HiLink cabalTestKey Keyword
              HiLink cabalExeKey Keyword
              HiLink cabalBenchKey Keyword
              HiLink cabalBuildKey Keyword
              HiLink cabalFlagKey Keyword
              HiLink cabalLit Constant
            
              delcommand HiLink
            endif
            
            let b:current_syntax = 'cabal'
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/clojure.vim
            ================================================
            " Vim syntax file
            " Language:	Clojure
            " Authors:	Toralf Wittner 
            "		modified by Meikel Brandmeyer 
            " URL:		http://kotka.de/projects/clojure/vimclojure.html
            "
            " Contributors:	Joel Holdbrooks  (Regexp support, bug fixes)
            "
            " Maintainer:	Sung Pae 
            " URL:		https://github.com/guns/vim-clojure-static
            " License:	Same as Vim
            " Last Change:	%%RELEASE_DATE%%
            
            if exists("b:current_syntax")
            	finish
            endif
            
            if has("folding") && exists("g:clojure_fold") && g:clojure_fold > 0
            	setlocal foldmethod=syntax
            endif
            
            " Generated from https://github.com/guns/vim-clojure-static/blob/%%RELEASE_TAG%%/clj/src/vim_clojure_static/generate.clj
            " Clojure version 1.5.1
            syntax keyword clojureConstant nil
            syntax keyword clojureBoolean false true
            syntax keyword clojureSpecial . catch clojure.core/fn clojure.core/let clojure.core/loop def do finally fn if let loop monitor-enter monitor-exit new quote recur set! throw try var
            syntax keyword clojureException catch finally throw try
            syntax keyword clojureCond case clojure.core/case clojure.core/cond clojure.core/cond-> clojure.core/cond->> clojure.core/condp clojure.core/if-let clojure.core/if-not clojure.core/when clojure.core/when-first clojure.core/when-let clojure.core/when-not cond cond-> cond->> condp if-let if-not when when-first when-let when-not
            syntax keyword clojureRepeat clojure.core/doall clojure.core/dorun clojure.core/doseq clojure.core/dotimes clojure.core/while doall dorun doseq dotimes while
            syntax keyword clojureDefine clojure.core/definline clojure.core/definterface clojure.core/defmacro clojure.core/defmethod clojure.core/defmulti clojure.core/defn clojure.core/defn- clojure.core/defonce clojure.core/defprotocol clojure.core/defrecord clojure.core/defstruct clojure.core/deftype definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol defrecord defstruct deftype
            syntax keyword clojureMacro -> ->> .. amap and areduce as-> assert binding bound-fn clojure.core/-> clojure.core/->> clojure.core/.. clojure.core/amap clojure.core/and clojure.core/areduce clojure.core/as-> clojure.core/assert clojure.core/binding clojure.core/bound-fn clojure.core/comment clojure.core/declare clojure.core/delay clojure.core/dosync clojure.core/doto clojure.core/extend-protocol clojure.core/extend-type clojure.core/for clojure.core/future clojure.core/gen-class clojure.core/gen-interface clojure.core/import clojure.core/io! clojure.core/lazy-cat clojure.core/lazy-seq clojure.core/letfn clojure.core/locking clojure.core/memfn clojure.core/ns clojure.core/or clojure.core/proxy clojure.core/proxy-super clojure.core/pvalues clojure.core/refer-clojure clojure.core/reify clojure.core/some-> clojure.core/some->> clojure.core/sync clojure.core/time clojure.core/with-bindings clojure.core/with-in-str clojure.core/with-loading-context clojure.core/with-local-vars clojure.core/with-open clojure.core/with-out-str clojure.core/with-precision clojure.core/with-redefs comment declare delay dosync doto extend-protocol extend-type for future gen-class gen-interface import io! lazy-cat lazy-seq letfn locking memfn ns or proxy proxy-super pvalues refer-clojure reify some-> some->> sync time with-bindings with-in-str with-loading-context with-local-vars with-open with-out-str with-precision with-redefs
            syntax keyword clojureFunc * *' + +' - -' ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods / < <= = == > >= accessor aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! alter-var-root ancestors apply array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint biginteger bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn* bound? butlast byte byte-array bytes cast char char-array char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version clojure.core/* clojure.core/*' clojure.core/+ clojure.core/+' clojure.core/- clojure.core/-' clojure.core/->ArrayChunk clojure.core/->Vec clojure.core/->VecNode clojure.core/->VecSeq clojure.core/-cache-protocol-fn clojure.core/-reset-methods clojure.core// clojure.core/< clojure.core/<= clojure.core/= clojure.core/== clojure.core/> clojure.core/>= clojure.core/accessor clojure.core/aclone clojure.core/add-classpath clojure.core/add-watch clojure.core/agent clojure.core/agent-error clojure.core/agent-errors clojure.core/aget clojure.core/alength clojure.core/alias clojure.core/all-ns clojure.core/alter clojure.core/alter-meta! clojure.core/alter-var-root clojure.core/ancestors clojure.core/apply clojure.core/array-map clojure.core/aset clojure.core/aset-boolean clojure.core/aset-byte clojure.core/aset-char clojure.core/aset-double clojure.core/aset-float clojure.core/aset-int clojure.core/aset-long clojure.core/aset-short clojure.core/assoc clojure.core/assoc! clojure.core/assoc-in clojure.core/associative? clojure.core/atom clojure.core/await clojure.core/await-for clojure.core/await1 clojure.core/bases clojure.core/bean clojure.core/bigdec clojure.core/bigint clojure.core/biginteger clojure.core/bit-and clojure.core/bit-and-not clojure.core/bit-clear clojure.core/bit-flip clojure.core/bit-not clojure.core/bit-or clojure.core/bit-set clojure.core/bit-shift-left clojure.core/bit-shift-right clojure.core/bit-test clojure.core/bit-xor clojure.core/boolean clojure.core/boolean-array clojure.core/booleans clojure.core/bound-fn* clojure.core/bound? clojure.core/butlast clojure.core/byte clojure.core/byte-array clojure.core/bytes clojure.core/cast clojure.core/char clojure.core/char-array clojure.core/char? clojure.core/chars clojure.core/chunk clojure.core/chunk-append clojure.core/chunk-buffer clojure.core/chunk-cons clojure.core/chunk-first clojure.core/chunk-next clojure.core/chunk-rest clojure.core/chunked-seq? clojure.core/class clojure.core/class? clojure.core/clear-agent-errors clojure.core/clojure-version clojure.core/coll? clojure.core/commute clojure.core/comp clojure.core/comparator clojure.core/compare clojure.core/compare-and-set! clojure.core/compile clojure.core/complement clojure.core/concat clojure.core/conj clojure.core/conj! clojure.core/cons clojure.core/constantly clojure.core/construct-proxy clojure.core/contains? clojure.core/count clojure.core/counted? clojure.core/create-ns clojure.core/create-struct clojure.core/cycle clojure.core/dec clojure.core/dec' clojure.core/decimal? clojure.core/delay? clojure.core/deliver clojure.core/denominator clojure.core/deref clojure.core/derive clojure.core/descendants clojure.core/destructure clojure.core/disj clojure.core/disj! clojure.core/dissoc clojure.core/dissoc! clojure.core/distinct clojure.core/distinct? clojure.core/double clojure.core/double-array clojure.core/doubles clojure.core/drop clojure.core/drop-last clojure.core/drop-while clojure.core/empty clojure.core/empty? clojure.core/ensure clojure.core/enumeration-seq clojure.core/error-handler clojure.core/error-mode clojure.core/eval clojure.core/even? clojure.core/every-pred clojure.core/every? clojure.core/ex-data clojure.core/ex-info clojure.core/extend clojure.core/extenders clojure.core/extends? clojure.core/false? clojure.core/ffirst clojure.core/file-seq clojure.core/filter clojure.core/filterv clojure.core/find clojure.core/find-keyword clojure.core/find-ns clojure.core/find-protocol-impl clojure.core/find-protocol-method clojure.core/find-var clojure.core/first clojure.core/flatten clojure.core/float clojure.core/float-array clojure.core/float? clojure.core/floats clojure.core/flush clojure.core/fn? clojure.core/fnext clojure.core/fnil clojure.core/force clojure.core/format clojure.core/frequencies clojure.core/future-call clojure.core/future-cancel clojure.core/future-cancelled? clojure.core/future-done? clojure.core/future? clojure.core/gensym clojure.core/get clojure.core/get-in clojure.core/get-method clojure.core/get-proxy-class clojure.core/get-thread-bindings clojure.core/get-validator clojure.core/group-by clojure.core/hash clojure.core/hash-combine clojure.core/hash-map clojure.core/hash-set clojure.core/identical? clojure.core/identity clojure.core/ifn? clojure.core/in-ns clojure.core/inc clojure.core/inc' clojure.core/init-proxy clojure.core/instance? clojure.core/int clojure.core/int-array clojure.core/integer? clojure.core/interleave clojure.core/intern clojure.core/interpose clojure.core/into clojure.core/into-array clojure.core/ints clojure.core/isa? clojure.core/iterate clojure.core/iterator-seq clojure.core/juxt clojure.core/keep clojure.core/keep-indexed clojure.core/key clojure.core/keys clojure.core/keyword clojure.core/keyword? clojure.core/last clojure.core/line-seq clojure.core/list clojure.core/list* clojure.core/list? clojure.core/load clojure.core/load-file clojure.core/load-reader clojure.core/load-string clojure.core/loaded-libs clojure.core/long clojure.core/long-array clojure.core/longs clojure.core/macroexpand clojure.core/macroexpand-1 clojure.core/make-array clojure.core/make-hierarchy clojure.core/map clojure.core/map-indexed clojure.core/map? clojure.core/mapcat clojure.core/mapv clojure.core/max clojure.core/max-key clojure.core/memoize clojure.core/merge clojure.core/merge-with clojure.core/meta clojure.core/method-sig clojure.core/methods clojure.core/min clojure.core/min-key clojure.core/mod clojure.core/munge clojure.core/name clojure.core/namespace clojure.core/namespace-munge clojure.core/neg? clojure.core/newline clojure.core/next clojure.core/nfirst clojure.core/nil? clojure.core/nnext clojure.core/not clojure.core/not-any? clojure.core/not-empty clojure.core/not-every? clojure.core/not= clojure.core/ns-aliases clojure.core/ns-imports clojure.core/ns-interns clojure.core/ns-map clojure.core/ns-name clojure.core/ns-publics clojure.core/ns-refers clojure.core/ns-resolve clojure.core/ns-unalias clojure.core/ns-unmap clojure.core/nth clojure.core/nthnext clojure.core/nthrest clojure.core/num clojure.core/number? clojure.core/numerator clojure.core/object-array clojure.core/odd? clojure.core/parents clojure.core/partial clojure.core/partition clojure.core/partition-all clojure.core/partition-by clojure.core/pcalls clojure.core/peek clojure.core/persistent! clojure.core/pmap clojure.core/pop clojure.core/pop! clojure.core/pop-thread-bindings clojure.core/pos? clojure.core/pr clojure.core/pr-str clojure.core/prefer-method clojure.core/prefers clojure.core/print clojure.core/print-ctor clojure.core/print-dup clojure.core/print-method clojure.core/print-simple clojure.core/print-str clojure.core/printf clojure.core/println clojure.core/println-str clojure.core/prn clojure.core/prn-str clojure.core/promise clojure.core/proxy-call-with-super clojure.core/proxy-mappings clojure.core/proxy-name clojure.core/push-thread-bindings clojure.core/quot clojure.core/rand clojure.core/rand-int clojure.core/rand-nth clojure.core/range clojure.core/ratio? clojure.core/rational? clojure.core/rationalize clojure.core/re-find clojure.core/re-groups clojure.core/re-matcher clojure.core/re-matches clojure.core/re-pattern clojure.core/re-seq clojure.core/read clojure.core/read-line clojure.core/read-string clojure.core/realized? clojure.core/reduce clojure.core/reduce-kv clojure.core/reduced clojure.core/reduced? clojure.core/reductions clojure.core/ref clojure.core/ref-history-count clojure.core/ref-max-history clojure.core/ref-min-history clojure.core/ref-set clojure.core/refer clojure.core/release-pending-sends clojure.core/rem clojure.core/remove clojure.core/remove-all-methods clojure.core/remove-method clojure.core/remove-ns clojure.core/remove-watch clojure.core/repeat clojure.core/repeatedly clojure.core/replace clojure.core/replicate clojure.core/require clojure.core/reset! clojure.core/reset-meta! clojure.core/resolve clojure.core/rest clojure.core/restart-agent clojure.core/resultset-seq clojure.core/reverse clojure.core/reversible? clojure.core/rseq clojure.core/rsubseq clojure.core/satisfies? clojure.core/second clojure.core/select-keys clojure.core/send clojure.core/send-off clojure.core/send-via clojure.core/seq clojure.core/seq? clojure.core/seque clojure.core/sequence clojure.core/sequential? clojure.core/set clojure.core/set-agent-send-executor! clojure.core/set-agent-send-off-executor! clojure.core/set-error-handler! clojure.core/set-error-mode! clojure.core/set-validator! clojure.core/set? clojure.core/short clojure.core/short-array clojure.core/shorts clojure.core/shuffle clojure.core/shutdown-agents clojure.core/slurp clojure.core/some clojure.core/some-fn clojure.core/sort clojure.core/sort-by clojure.core/sorted-map clojure.core/sorted-map-by clojure.core/sorted-set clojure.core/sorted-set-by clojure.core/sorted? clojure.core/special-symbol? clojure.core/spit clojure.core/split-at clojure.core/split-with clojure.core/str clojure.core/string? clojure.core/struct clojure.core/struct-map clojure.core/subs clojure.core/subseq clojure.core/subvec clojure.core/supers clojure.core/swap! clojure.core/symbol clojure.core/symbol? clojure.core/take clojure.core/take-last clojure.core/take-nth clojure.core/take-while clojure.core/test clojure.core/the-ns clojure.core/thread-bound? clojure.core/to-array clojure.core/to-array-2d clojure.core/trampoline clojure.core/transient clojure.core/tree-seq clojure.core/true? clojure.core/type clojure.core/unchecked-add clojure.core/unchecked-add-int clojure.core/unchecked-byte clojure.core/unchecked-char clojure.core/unchecked-dec clojure.core/unchecked-dec-int clojure.core/unchecked-divide-int clojure.core/unchecked-double clojure.core/unchecked-float clojure.core/unchecked-inc clojure.core/unchecked-inc-int clojure.core/unchecked-int clojure.core/unchecked-long clojure.core/unchecked-multiply clojure.core/unchecked-multiply-int clojure.core/unchecked-negate clojure.core/unchecked-negate-int clojure.core/unchecked-remainder-int clojure.core/unchecked-short clojure.core/unchecked-subtract clojure.core/unchecked-subtract-int clojure.core/underive clojure.core/update-in clojure.core/update-proxy clojure.core/use clojure.core/val clojure.core/vals clojure.core/var-get clojure.core/var-set clojure.core/var? clojure.core/vary-meta clojure.core/vec clojure.core/vector clojure.core/vector-of clojure.core/vector? clojure.core/with-bindings* clojure.core/with-meta clojure.core/with-redefs-fn clojure.core/xml-seq clojure.core/zero? clojure.core/zipmap coll? commute comp comparator compare compare-and-set! compile complement concat conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? delay? deliver denominator deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info extend extenders extends? false? ffirst file-seq filter filterv find find-keyword find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn? fnext fnil force format frequencies future-call future-cancel future-cancelled? future-done? future? gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash hash-combine hash-map hash-set identical? identity ifn? in-ns inc inc' init-proxy instance? int int-array integer? interleave intern interpose into into-array ints isa? iterate iterator-seq juxt keep keep-indexed key keys keyword keyword? last line-seq list list* list? load load-file load-reader load-string loaded-libs long long-array longs macroexpand macroexpand-1 make-array make-hierarchy map map-indexed map? mapcat mapv max max-key memoize merge merge-with meta method-sig methods min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext nthrest num number? numerator object-array odd? parents partial partition partition-all partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers print print-ctor print-dup print-method print-simple print-str printf println println-str prn prn-str promise proxy-call-with-super proxy-mappings proxy-name push-thread-bindings quot rand rand-int rand-nth range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string realized? reduce reduce-kv reduced reduced? reductions ref ref-history-count ref-max-history ref-min-history ref-set refer release-pending-sends rem remove remove-all-methods remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off send-via seq seq? seque sequence sequential? set set-agent-send-executor! set-agent-send-off-executor! set-error-handler! set-error-mode! set-validator! set? short short-array shorts shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol symbol? take take-last take-nth take-while test the-ns thread-bound? to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of vector? with-bindings* with-meta with-redefs-fn xml-seq zero? zipmap
            syntax keyword clojureVariable *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *compiler-options* *data-readers* *default-data-reader-fn* *e *err* *file* *flush-on-newline* *fn-loader* *in* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* EMPTY-NODE char-escape-string char-name-string clojure.core/*1 clojure.core/*2 clojure.core/*3 clojure.core/*agent* clojure.core/*allow-unresolved-vars* clojure.core/*assert* clojure.core/*clojure-version* clojure.core/*command-line-args* clojure.core/*compile-files* clojure.core/*compile-path* clojure.core/*compiler-options* clojure.core/*data-readers* clojure.core/*default-data-reader-fn* clojure.core/*e clojure.core/*err* clojure.core/*file* clojure.core/*flush-on-newline* clojure.core/*fn-loader* clojure.core/*in* clojure.core/*math-context* clojure.core/*ns* clojure.core/*out* clojure.core/*print-dup* clojure.core/*print-length* clojure.core/*print-level* clojure.core/*print-meta* clojure.core/*print-readably* clojure.core/*read-eval* clojure.core/*source-path* clojure.core/*unchecked-math* clojure.core/*use-context-classloader* clojure.core/*verbose-defrecords* clojure.core/*warn-on-reflection* clojure.core/EMPTY-NODE clojure.core/char-escape-string clojure.core/char-name-string clojure.core/default-data-readers clojure.core/primitives-classnames clojure.core/unquote clojure.core/unquote-splicing default-data-readers primitives-classnames unquote unquote-splicing
            
            " Keywords are symbols:
            "   static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^/]].*/)?([\\D&&[^/]][^/]*)");
            " But they:
            "   * Must not end in a : or /
            "   * Must not have two adjacent colons except at the beginning
            "   * Must not contain any reader metacharacters except for ' and #
            syntax match clojureKeyword "\v<:{1,2}%([^ \n\r\t()\[\]{}";@^`~\\%/]+/)*[^ \n\r\t()\[\]{}";@^`~\\%/]+:@"
            
            syntax match clojureStringEscape "\v\\%([\\btnfr"]|u\x{4}|[0-3]\o{2}|\o{1,2})" contained
            
            syntax region clojureString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=clojureStringEscape,@Spell
            
            syntax match clojureCharacter "\\."
            syntax match clojureCharacter "\\o\%([0-3]\o\{2\}\|\o\{1,2\}\)"
            syntax match clojureCharacter "\\u\x\{4\}"
            syntax match clojureCharacter "\\space"
            syntax match clojureCharacter "\\tab"
            syntax match clojureCharacter "\\newline"
            syntax match clojureCharacter "\\return"
            syntax match clojureCharacter "\\backspace"
            syntax match clojureCharacter "\\formfeed"
            
            syntax match clojureSymbol "\v%([a-zA-Z!$&*_+=|<.>?-]|[^\x00-\x7F])+%(:?%([a-zA-Z0-9!#$%&*_+=|'<.>/?-]|[^\x00-\x7F]))*[#:]@"'
            endfor
            unlet! s:radix_chars s:radix
            
            syntax match clojureNumber "\v<[-+]?%(0\o*|0x\x+|[1-9]\d*)N?>"
            syntax match clojureNumber "\v<[-+]?%(0|[1-9]\d*|%(0|[1-9]\d*)\.\d*)%(M|[eE][-+]?\d+)?>"
            syntax match clojureNumber "\v<[-+]?%(0|[1-9]\d*)/%(0|[1-9]\d*)>"
            
            syntax match clojureVarArg "&"
            
            syntax match clojureQuote "'"
            syntax match clojureQuote "`"
            syntax match clojureUnquote "\~"
            syntax match clojureUnquote "\~@"
            syntax match clojureMeta "\^"
            syntax match clojureDeref "@"
            syntax match clojureDispatch "\v#[\^'=<_]?"
            
            " Clojure permits no more than 20 params.
            syntax match clojureAnonArg "%\(20\|1\d\|[1-9]\|&\)\?"
            
            syntax match  clojureRegexpEscape "\v\\%([\\tnrfae.()\[\]{}^$*?+]|c\u|0[0-3]?\o{1,2}|x%(\x{2}|\{\x{1,6}\})|u\x{4})" contained display
            syntax region clojureRegexpQuoted start=/\\Q/ms=e+1 skip=/\\\\\|\\"/ end=/\\E/me=s-1 end=/"/me=s-1 contained
            syntax region clojureRegexpQuote  start=/\\Q/       skip=/\\\\\|\\"/ end=/\\E/       end=/"/me=s-1 contains=clojureRegexpQuoted keepend contained
            
            " Character property classes
            " Generated from https://github.com/guns/vim-clojure-static/blob/%%RELEASE_TAG%%/clj/src/vim_clojure_static/generate.clj
            " Java version 1.7.0_45
            syntax match clojureRegexpPosixCharClass "\v\\[pP]\{%(Blank|P%(unct|rint)|Digit|Graph|A%(l%(pha|num)|SCII)|XDigit|Space|Upper|Lower|Cntrl)\}" contained display
            syntax match clojureRegexpJavaCharClass "\v\\[pP]\{java%(U%(pperCase|nicodeIdentifier%(Start|Part))|Mirrored|Alphabetic|SpaceChar|D%(efined|igit)|Whitespace|L%(etter%(OrDigit)?|owerCase)|TitleCase|I%(de%(ographic|ntifierIgnorable)|SOControl)|JavaIdentifier%(Start|Part))\}" contained display
            syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\cIs%(blank|hex%(digit|_digit)|uppercase|digit|control|a%(ssigned|l%(phabetic|num))|graph|ideographic|p%(rint|unctuation)|titlecase|w%(hite%(_space|space)|ord)|l%(owercase|etter)|noncharacter%(codepoint|_code_point))\}" contained display
            syntax match clojureRegexpUnicodeCharClass "\v\\[pP][MLNPSZC]" contained display
            syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{%(C[fonsc]?|L[DmloutC]?|S[kmoc]?|P[edfiosc]?|M[enc]?|Z[lps]?|N[dlo]?)\}" contained display
            syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{%(Is|gc\=|general_category\=)?%(C[fonsc]?|L[DmloutC]?|S[kmoc]?|P[edfiosc]?|M[enc]?|Z[lps]?|N[dlo]?)\}" contained display
            syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\c%(Is|sc\=|script\=)%(h%(ira%(gana)?|an%([io]|g%(ul)?|unoo)?|ebr%(ew)?)|yi%(ii)?|java%(nese)?|c%(prt|y%(r%(illic|l)|priot)|h%(er%(okee)?|am)|uneiform|o%(mmon|pt%(ic)?)|a%(n%(adian_aboriginal|s)|ri%(an)?))|i%(mperial_aramaic|tal|n%(herited|scriptional_pa%(rthian|hlavi)))|a%(r%(ab%(ic)?|m%([in]|enian))|v%(st|estan))|g%(oth%(ic)?|u%(j%(arati|r)|r%(mukhi|u))|lag%(olitic)?|eor%(gian)?|re%(k|ek))|b%(u%(gi%(nese)?|h%(d|id))|ra%(i%(lle)?|h%(mi)?)|a%(mum?|t%(k|ak)|li%(nese)?)|opo%(mofo)?|eng%(ali)?)|s%(ha%(w|vian)|und%(anese)?|y%(r%(iac|c)|lo%(ti_nagri)?)|inh%(ala)?|a%(ur%(ashtra)?|rb|m%(r|aritan)))|d%(srt|e%(va%(nagari)?|seret))|l%(a%(na|oo?|t%(n|in))|epc%(ha)?|i%(n%(ear_b|b)|mbu?|su)|y%([dc]i%(an)?))|p%(h%(oenician|nx|li|ag%(s_pa)?)|rti)|e%(gyp%(tian_hieroglyphs)?|thi%(opic)?)|r%(jng|un%(ic|r)|ejang)|u%(nknown|gar%(itic)?)|vaii?|n%(koo?|ew_tai_lue)|m%(y%(mr|anmar)|tei|a%(nd%(aic)?|layalam)|ong%(olian)?|eetei_mayek|lym)|z%(inh|yyy|zzz)|t%(glg|fng|i%(finagh|b%(t|etan))|ha%(i|a%(na)?)|elu%(gu)?|a%(i_%(viet|le|tham)|l[eu]|g%(alog|b%(anwa)?)|vt|m%(l|il)))|x%(sux|peo)|o%(r%(iya|kh|ya)|sma%(nya)?|g%(am|ham)|l%(ck|d_%(south_arabian|turkic|italic|persian)|_chiki))|k%(a%(takana|yah_li|n%(nada|a)|li|ithi)|h%(m%(r|er)|ar%(oshthi)?)|thi|nda))\}" contained display
            syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\c%(In|blk\=|block\=)%(s%(a%(maritan|urashtra)|mall%(_form_variants| form variants|formvariants)|inhala|y%(loti%(nagri|[_ ]nagri)|riac)|havian|p%(ecials|acing%(modifierletters|_modifier_letters| modifier letters))|u%(p%(erscripts%(andsubscripts|_and_subscripts| and subscripts)|plementa%(ry%( private use area-[ab]|_private_use_area_[ab]|privateusearea-[ab])|l%( %(arrows-[ab]|punctuation|mathematical operators)|arrows-[ab]|_%(punctuation|mathematical_operators|arrows_[ab])|punctuation|mathematicaloperators)))|ndanese|rrogates_area))|l%(a%(o|tin%(_%(extended_%(a%(dditional)?|[dcb])|1_supplement)| extended%(-[dacb]| additional)|-1%( supplement|supplement)|extended%(additional|-[dacb])))|e%(pcha|tterlike%(symbols|[_ ]symbols))|y[cd]ian|i%(su|mbu|near%(b%(ideograms|syllabary)|_b_%(ideograms|syllabary)| b %(ideograms|syllabary)))|ow%([_ ]surrogates|surrogates))|b%(a%(sic%(latin|[_ ]latin)|tak|linese|mum%([_ ]supplement|supplement)?)|yzantine%(_musical_symbols| musical symbols|musicalsymbols)|engali|u%(ginese|hid)|lock%(elements|[_ ]elements)|ra%(hmi|ille%([ _]patterns|patterns))|o%(x%(drawing|[_ ]drawing)|pomofo%([ _]extended|extended)?))|t%(a%(g%(s|alog|banwa)|mil|i%( %(viet|xuan jing symbols|le|tham)|viet|le|_%(xuan_jing_symbols|viet|le|tham)|tham|xuanjingsymbols))|ha%(i|ana)|elugu|i%(finagh|betan)|ransport%(_and_map_symbols| and map symbols|andmapsymbols))|n%(ew%(_tai_lue| tai lue|tailue)|umber%([ _]forms|forms)|ko)|m%(iscellaneous%(_%(mathematical_symbols_[ab]|symbols%(_and_%(arrows|pictographs))?|technical)|mathematicalsymbols-[ab]|technical| %(symbols%( and %(arrows|pictographs))?|mathematical symbols-[ab]|technical)|symbols%(and%(arrows|pictographs))?)|eetei%(mayek|[_ ]mayek)|a%(ndaic|thematical%(alphanumericsymbols|operators|_%(alphanumeric_symbols|operators)| %(operators|alphanumeric symbols))|hjong%(tiles|[_ ]tiles)|layalam)|yanmar%(_extended_a|extended-a| extended-a)?|o%(difier%( tone letters|toneletters|_tone_letters)|ngolian)|usical%(symbols|[_ ]symbols))|p%(h%(a%(gs[-_]pa|istos%(disc|[_ ]disc))|o%(netic%(_extensions%(_supplement)?| extensions%( supplement)?|extensions%(supplement)?)|enician))|rivate%(usearea|_use_area| use area)|laying%(cards|[_ ]cards))|javanese|u%(garitic|nified%(_canadian_aboriginal_syllabics%(_extended)?| canadian aboriginal syllabics%( extended)?|canadianaboriginalsyllabics%(extended)?))|o%(riya|gham|l%([ _]chiki|d%(turkic|_%(south_arabian|turkic|italic|persian)|italic|persian| %(south arabian|turkic|italic|persian)|southarabian)|chiki)|smanya|ptical%(_character_recognition| character recognition|characterrecognition))|v%(e%(dic%(extensions|[_ ]extensions)|rtical%([ _]forms|forms))|a%(i|riation%(_selectors%(_supplement)?| selectors%( supplement)?|selectors%(supplement)?)))|a%(vestan|l%(phabetic%(_presentation_forms| presentation forms|presentationforms)|chemical%(symbols|[_ ]symbols))|ncient%( %(symbols|greek %(musical notation|numbers))|symbols|greek%(musicalnotation|numbers)|_%(symbols|greek_%(musical_notation|numbers)))|egean%([ _]numbers|numbers)|r%(menian|rows|abic%( %(presentation forms-[ab]|supplement)|_%(presentation_forms_[ab]|supplement)|presentationforms-[ab]|supplement)?))|i%(nscriptional%(pa%(rthian|hlavi)|%([_ ]pa%(rthian|hlavi)))|deographic%( description characters|descriptioncharacters|_description_characters)|pa%(extensions|[_ ]extensions)|mperial%(aramaic|[_ ]aramaic))|yi%(%([_ ]%(radicals|syllables))|radicals|syllables|jing%(hexagramsymbols|_hexagram_symbols| hexagram symbols))|k%(a%(yah%(li|[_ ]li)|n%(nada|bun|a%([_ ]supplement|supplement)|gxi%(radicals|[_ ]radicals))|ithi|takana%(phoneticextensions|_phonetic_extensions| phonetic extensions)?)|h%(aroshthi|mer%(symbols|[_ ]symbols)?))|d%(e%(vanagari%([ _]extended|extended)?|seret)|omino%(tiles|[_ ]tiles)|ingbats)|g%(lagolitic|othic|reek%(andcoptic| %(and coptic|extended)|extended|_extended)?|u%(rmukhi|jarati)|e%(o%(metric%([_ ]shapes|shapes)|rgian%([_ ]supplement|supplement)?)|neral%(punctuation|[_ ]punctuation)))|e%(nclosed%( %(ideographic supplement|cjk letters and months|alphanumeric%( supplement|s))|cjklettersandmonths|_%(ideographic_supplement|alphanumeric%(_supplement|s)|cjk_letters_and_months)|alphanumerics%(upplement)?|ideographicsupplement)|moticons|thiopic%(extended%(-a)?| %(extended%(-a)?|supplement)|_%(extended%(_a)?|supplement)|supplement)?|gyptian%(hieroglyphs|[_ ]hieroglyphs))|r%(ejang|u%(nic|mi%(numeralsymbols|_numeral_symbols| numeral symbols)))|c%(jk%(_%(compatibility%(_%(ideographs%(_supplement)?|forms))?|radicals_supplement|unified_ideographs%(_extension_[dacb])?|s%(trokes|ymbols_and_punctuation))|compatibility%(ideographs%(supplement)?|forms)?|unifiedideographs%(extension[dacb])?|radicalssupplement|s%(ymbolsandpunctuation|trokes)| %(unified ideographs%( extension [dacb])?|s%(trokes|ymbols and punctuation)|radicals supplement|compatibility%( %(forms|ideographs%( supplement)?))?))|h%(am|erokee)|u%(neiform%(_numbers_and_punctuation| numbers and punctuation|numbersandpunctuation)?|rrency%(symbols|[_ ]symbols))|y%(rillic%(_%(extended_[ab]|supplementary)| %(extended-[ab]|supplement%(ary)?)|extended-[ab]|supplement%(ary)?)?|priot%([_ ]syllabary|syllabary))|o%(ntrol%(pictures|[_ ]pictures)|unting%(rodnumerals|_rod_numerals| rod numerals)|m%(bining%(halfmarks|diacriticalmarks%(forsymbols|supplement)?| %(marks for symbols|half marks|diacritical marks%( %(for symbols|supplement))?)|marksforsymbols|_%(marks_for_symbols|half_marks|diacritical_marks%(_supplement)?))|mon%( indic number forms|indicnumberforms|_indic_number_forms))|ptic)|arian)|h%(i%(ragana|gh%(_%(private_use_surrogates|surrogates)| %(private use surrogates|surrogates)|surrogates|privateusesurrogates))|ebrew|a%(n%(unoo|gul%(jamo%(extended-[ab])?| %(jamo%( extended-[ab])?|syllables|compatibility jamo)|_%(syllables|jamo%(_extended_[ab])?|compatibility_jamo)|syllables|compatibilityjamo))|lfwidth%( and fullwidth forms|andfullwidthforms|_and_fullwidth_forms))))\}" contained display
            
            syntax match   clojureRegexpPredefinedCharClass	"\v%(\\[dDsSwW]|\.)" contained display
            syntax cluster clojureRegexpCharPropertyClasses	contains=clojureRegexpPosixCharClass,clojureRegexpJavaCharClass,clojureRegexpUnicodeCharClass
            syntax cluster clojureRegexpCharClasses		contains=clojureRegexpPredefinedCharClass,clojureRegexpCharClass,@clojureRegexpCharPropertyClasses
            syntax region  clojureRegexpCharClass		start="\[" skip=/\\\\\|\\]/ end="]" contained contains=clojureRegexpPredefinedCharClass,@clojureRegexpCharPropertyClasses
            syntax match   clojureRegexpBoundary		"\\[bBAGZz]" contained display
            syntax match   clojureRegexpBoundary		"[$^]" contained display
            syntax match   clojureRegexpQuantifier		"[?*+][?+]\=" contained display
            syntax match   clojureRegexpQuantifier		"\v\{\d+%(,|,\d+)?}\??" contained display
            syntax match   clojureRegexpOr			"|" contained display
            syntax match   clojureRegexpBackRef		"\v\\%([1-9]\d*|k\<[a-zA-z]+\>)" contained display
            
            " Mode modifiers, mode-modified spans, lookaround, regular and atomic
            " grouping, and named-capturing.
            syntax match clojureRegexpMod "\v\(@<=\?:" contained display
            syntax match clojureRegexpMod "\v\(@<=\?[xdsmiuU]*-?[xdsmiuU]+:?" contained display
            syntax match clojureRegexpMod "\v\(@<=\?%(\)" contained display
            syntax match clojureRegexpMod "\v\(@<=\?\<[a-zA-Z]+\>" contained display
            
            syntax region clojureRegexpGroup start="(" skip=/\\\\\|\\)/ end=")" matchgroup=clojureRegexpGroup contained contains=clojureRegexpMod,clojureRegexpQuantifier,clojureRegexpBoundary,clojureRegexpEscape,@clojureRegexpCharClasses
            syntax region clojureRegexp start=/\#"/ skip=/\\\\\|\\"/ end=/"/ contains=@clojureRegexpCharClasses,clojureRegexpEscape,clojureRegexpQuote,clojureRegexpBoundary,clojureRegexpQuantifier,clojureRegexpOr,clojureRegexpBackRef,clojureRegexpGroup keepend
            
            syntax keyword clojureCommentTodo contained FIXME XXX TODO FIXME: XXX: TODO:
            
            syntax match clojureComment ";.*$" contains=clojureCommentTodo,@Spell
            syntax match clojureComment "#!.*$"
            
            " Generated from https://github.com/guns/vim-clojure-static/blob/%%RELEASE_TAG%%/clj/src/vim_clojure_static/generate.clj
            syntax cluster clojureTop contains=@Spell,clojureAnonArg,clojureBoolean,clojureCharacter,clojureComment,clojureCond,clojureConstant,clojureDefine,clojureDeref,clojureDispatch,clojureError,clojureException,clojureFunc,clojureKeyword,clojureMacro,clojureMap,clojureMeta,clojureNumber,clojureQuote,clojureRegexp,clojureRepeat,clojureSexp,clojureSpecial,clojureString,clojureSymbol,clojureUnquote,clojureVarArg,clojureVariable,clojureVector
            
            syntax region clojureSexp   matchgroup=clojureParen start="("  matchgroup=clojureParen end=")" contains=@clojureTop fold
            syntax region clojureVector matchgroup=clojureParen start="\[" matchgroup=clojureParen end="]" contains=@clojureTop fold
            syntax region clojureMap    matchgroup=clojureParen start="{"  matchgroup=clojureParen end="}" contains=@clojureTop fold
            
            " Highlight superfluous closing parens, brackets and braces.
            syntax match clojureError "]\|}\|)"
            
            syntax sync fromstart
            
            highlight default link clojureConstant			Constant
            highlight default link clojureBoolean			Boolean
            highlight default link clojureCharacter			Character
            highlight default link clojureKeyword			Keyword
            highlight default link clojureNumber			Number
            highlight default link clojureString			String
            highlight default link clojureStringEscape		Character
            
            highlight default link clojureRegexp			Constant
            highlight default link clojureRegexpEscape		Character
            highlight default link clojureRegexpCharClass		SpecialChar
            highlight default link clojureRegexpPosixCharClass	clojureRegexpCharClass
            highlight default link clojureRegexpJavaCharClass	clojureRegexpCharClass
            highlight default link clojureRegexpUnicodeCharClass	clojureRegexpCharClass
            highlight default link clojureRegexpPredefinedCharClass	clojureRegexpCharClass
            highlight default link clojureRegexpBoundary		SpecialChar
            highlight default link clojureRegexpQuantifier		SpecialChar
            highlight default link clojureRegexpMod			SpecialChar
            highlight default link clojureRegexpOr			SpecialChar
            highlight default link clojureRegexpBackRef		SpecialChar
            highlight default link clojureRegexpGroup		clojureRegexp
            highlight default link clojureRegexpQuoted		clojureString
            highlight default link clojureRegexpQuote		clojureRegexpBoundary
            
            highlight default link clojureVariable			Identifier
            highlight default link clojureCond			Conditional
            highlight default link clojureDefine			Define
            highlight default link clojureException			Exception
            highlight default link clojureFunc			Function
            highlight default link clojureMacro			Macro
            highlight default link clojureRepeat			Repeat
            
            highlight default link clojureSpecial			Special
            highlight default link clojureVarArg			Special
            highlight default link clojureQuote			SpecialChar
            highlight default link clojureUnquote			SpecialChar
            highlight default link clojureMeta			SpecialChar
            highlight default link clojureDeref			SpecialChar
            highlight default link clojureAnonArg			SpecialChar
            highlight default link clojureDispatch			SpecialChar
            
            highlight default link clojureComment			Comment
            highlight default link clojureCommentTodo		Todo
            
            highlight default link clojureError			Error
            
            highlight default link clojureParen			Delimiter
            
            let b:current_syntax = "clojure"
            
            " vim:sts=8:sw=8:ts=8:noet:smc=0
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/coffee.vim
            ================================================
            " Language:    CoffeeScript
            " Maintainer:  Mick Koch 
            " URL:         http://github.com/kchmck/vim-coffee-script
            " License:     WTFPL
            
            " Bail if our syntax is already loaded.
            if exists('b:current_syntax') && b:current_syntax == 'coffee'
              finish
            endif
            
            " Include JavaScript for coffeeEmbed.
            syn include @coffeeJS syntax/javascript.vim
            silent! unlet b:current_syntax
            
            " Highlight long strings.
            syntax sync fromstart
            
            " These are `matches` instead of `keywords` because vim's highlighting
            " priority for keywords is higher than matches. This causes keywords to be
            " highlighted inside matches, even if a match says it shouldn't contain them --
            " like with coffeeAssign and coffeeDot.
            syn match coffeeStatement /\<\%(return\|break\|continue\|throw\)\>/ display
            hi def link coffeeStatement Statement
            
            syn match coffeeRepeat /\<\%(for\|while\|until\|loop\)\>/ display
            hi def link coffeeRepeat Repeat
            
            syn match coffeeConditional /\<\%(if\|else\|unless\|switch\|when\|then\)\>/
            \                           display
            hi def link coffeeConditional Conditional
            
            syn match coffeeException /\<\%(try\|catch\|finally\)\>/ display
            hi def link coffeeException Exception
            
            syn match coffeeKeyword /\<\%(new\|in\|of\|by\|and\|or\|not\|is\|isnt\|class\|extends\|super\|do\)\>/
            \                       display
            " The `own` keyword is only a keyword after `for`.
            syn match coffeeKeyword /\/ contained containedin=coffeeRepeat
            \                       display
            hi def link coffeeKeyword Keyword
            
            syn match coffeeOperator /\<\%(instanceof\|typeof\|delete\)\>/ display
            hi def link coffeeOperator Operator
            
            " The first case matches symbol operators only if they have an operand before.
            syn match coffeeExtendedOp /\%(\S\s*\)\@<=[+\-*/%&|\^=!<>?.]\{-1,}\|[-=]>\|--\|++\|:/
            \                          display
            syn match coffeeExtendedOp /\<\%(and\|or\)=/ display
            hi def link coffeeExtendedOp coffeeOperator
            
            " This is separate from `coffeeExtendedOp` to help differentiate commas from
            " dots.
            syn match coffeeSpecialOp /[,;]/ display
            hi def link coffeeSpecialOp SpecialChar
            
            syn match coffeeBoolean /\<\%(true\|on\|yes\|false\|off\|no\)\>/ display
            hi def link coffeeBoolean Boolean
            
            syn match coffeeGlobal /\<\%(null\|undefined\)\>/ display
            hi def link coffeeGlobal Type
            
            " A special variable
            syn match coffeeSpecialVar /\<\%(this\|prototype\|arguments\)\>/ display
            hi def link coffeeSpecialVar Special
            
            " An @-variable
            syn match coffeeSpecialIdent /@\%(\%(\I\|\$\)\%(\i\|\$\)*\)\?/ display
            hi def link coffeeSpecialIdent Identifier
            
            " A class-like name that starts with a capital letter
            syn match coffeeObject /\<\u\w*\>/ display
            hi def link coffeeObject Structure
            
            " A constant-like name in SCREAMING_CAPS
            syn match coffeeConstant /\<\u[A-Z0-9_]\+\>/ display
            hi def link coffeeConstant Constant
            
            " A variable name
            syn cluster coffeeIdentifier contains=coffeeSpecialVar,coffeeSpecialIdent,
            \                                     coffeeObject,coffeeConstant
            
            " A non-interpolated string
            syn cluster coffeeBasicString contains=@Spell,coffeeEscape
            " An interpolated string
            syn cluster coffeeInterpString contains=@coffeeBasicString,coffeeInterp
            
            " Regular strings
            syn region coffeeString start=/"/ skip=/\\\\\|\\"/ end=/"/
            \                       contains=@coffeeInterpString
            syn region coffeeString start=/'/ skip=/\\\\\|\\'/ end=/'/
            \                       contains=@coffeeBasicString
            hi def link coffeeString String
            
            " A integer, including a leading plus or minus
            syn match coffeeNumber /\%(\i\|\$\)\@/ display
            syn match coffeeNumber /\<0[bB][01]\+\>/ display
            syn match coffeeNumber /\<0[oO][0-7]\+\>/ display
            syn match coffeeNumber /\<\%(Infinity\|NaN\)\>/ display
            hi def link coffeeNumber Number
            
            " A floating-point number, including a leading plus or minus
            syn match coffeeFloat /\%(\i\|\$\)\@/
            \                             display
            hi def link coffeeReservedError Error
            
            " A normal object assignment
            syn match coffeeObjAssign /@\?\%(\I\|\$\)\%(\i\|\$\)*\s*\ze::\@!/ contains=@coffeeIdentifier display
            hi def link coffeeObjAssign Identifier
            
            syn keyword coffeeTodo TODO FIXME XXX contained
            hi def link coffeeTodo Todo
            
            syn match coffeeComment /#.*/ contains=@Spell,coffeeTodo
            hi def link coffeeComment Comment
            
            syn region coffeeBlockComment start=/####\@!/ end=/###/
            \                             contains=@Spell,coffeeTodo
            hi def link coffeeBlockComment coffeeComment
            
            " A comment in a heregex
            syn region coffeeHeregexComment start=/#/ end=/\ze\/\/\/\|$/ contained
            \                               contains=@Spell,coffeeTodo
            hi def link coffeeHeregexComment coffeeComment
            
            " Embedded JavaScript
            syn region coffeeEmbed matchgroup=coffeeEmbedDelim
            \                      start=/`/ skip=/\\\\\|\\`/ end=/`/ keepend
            \                      contains=@coffeeJS
            hi def link coffeeEmbedDelim Delimiter
            
            syn region coffeeInterp matchgroup=coffeeInterpDelim start=/#{/ end=/}/ contained
            \                       contains=@coffeeAll
            hi def link coffeeInterpDelim PreProc
            
            " A string escape sequence
            syn match coffeeEscape /\\\d\d\d\|\\x\x\{2\}\|\\u\x\{4\}\|\\./ contained display
            hi def link coffeeEscape SpecialChar
            
            " A regex -- must not follow a parenthesis, number, or identifier, and must not
            " be followed by a number
            syn region coffeeRegex start=#\%(\%()\|\%(\i\|\$\)\@
            " Last Change:	2012 Jun 14
            
            " For version 5.x: Clear all syntax items
            " For version 6.x: Quit when a syntax file was already loaded
            if version < 600
              syntax clear
            elseif exists("b:current_syntax")
              finish
            endif
            
            " Read the C syntax to start with
            if version < 600
              so :p:h/c.vim
            else
              runtime! syntax/c.vim
              unlet b:current_syntax
            endif
            
            " C++ extensions
            syn keyword cppStatement	new delete this friend using
            syn keyword cppAccess		public protected private
            syn keyword cppType		inline virtual explicit export bool wchar_t
            syn keyword cppExceptions	throw try catch
            syn keyword cppOperator		operator typeid
            syn keyword cppOperator		and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
            syn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
            syn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
            syn keyword cppStorageClass	mutable
            syn keyword cppStructure	class typename template namespace
            syn keyword cppBoolean		true false
            
            " C++ 11 extensions
            if !exists("cpp_no_cpp11")
              syn keyword cppType		override final
              syn keyword cppExceptions	noexcept
              syn keyword cppStorageClass	constexpr decltype
              syn keyword cppConstant	nullptr
              " A C++11 raw-string literal. It tries to follow 2.14.5 and 2.14.5.2 of the
              " standard.
              syn region cppRawString matchgroup=cppRawDelim start=+\%(u8\=\|[LU]\)\=R"\z(\%([ ()\\\d9-\d12]\@![\d0-\d127]\)\{,16}\)(+ end=+)\z1"+ contains=@Spell
            endif
            
            " The minimum and maximum operators in GNU C++
            syn match cppMinMax "[<>]?"
            
            " Default highlighting
            if version >= 508 || !exists("did_cpp_syntax_inits")
              if version < 508
                let did_cpp_syntax_inits = 1
                command -nargs=+ HiLink hi link 
              else
                command -nargs=+ HiLink hi def link 
              endif
              HiLink cppAccess		cppStatement
              HiLink cppCast		cppStatement
              HiLink cppExceptions		Exception
              HiLink cppOperator		Operator
              HiLink cppStatement		Statement
              HiLink cppType		Type
              HiLink cppStorageClass	StorageClass
              HiLink cppStructure		Structure
              HiLink cppBoolean		Boolean
              HiLink cppConstant		Constant
              HiLink cppRawDelim		cFormat
              HiLink cppRawString		String
              delcommand HiLink
            endif
            
            let b:current_syntax = "cpp"
            
            " vim: ts=8
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/csv.vim
            ================================================
            " A simple syntax highlighting, simply alternate colors between two
            " adjacent columns
            " Init {{{2
            let s:cpo_save = &cpo
            set cpo&vim
            
            scriptencoding utf8
            if version < 600
                syn clear
            elseif exists("b:current_syntax")
                finish
            endif
            
            " Helper functions "{{{2
            fu! Warning(msg) "{{{3
                " Don't redraw, so we are not overwriting messages from the ftplugin
                " script
                "redraw!
                echohl WarningMsg
                echomsg "CSV Syntax:" . a:msg
                echohl Normal
            endfu
            
            fu! Esc(val, char) "{{2
                return '\V'.escape(a:val, '\\'.a:char).'\m'
            endfu
            
            fu! CheckSaneSearchPattern() "{{{3
                let s:del_def = ','
                let s:col_def = '\%([^' . s:del_def . ']*' . s:del_def . '\|$\)'
                let s:col_def_end = '\%([^' . s:del_def . ']*' . s:del_def . '\)'
            
                " First: 
                " Check for filetype plugin. This syntax script relies on the filetype
                " plugin, else, it won't work properly.
                redir => s:a |sil filetype | redir end
                let s:a=split(s:a, "\n")[0]
                if match(s:a, '\cplugin:off') > 0
            	call Warning("No filetype support, only simple highlighting using"
            		    \ . s:del_def . " as delimiter! See :h csv-installation")
                endif
            
                " Check Comment setting
                if !exists("g:csv_comment")
                    let b:csv_cmt = split(&cms, '%s')
                else
                    let b:csv_cmt = split(g:csv_comment, '%s')
                endif
            
            
                " Second: Check for sane defaults for the column pattern
                " Not necessary to check for fixed width columns
                if exists("b:csv_fixed_width_cols")
            	return
                endif
            
            
                " Try a simple highlighting, if the defaults from the ftplugin
                " don't exist
                let s:col  = exists("b:col") && !empty(b:col) ? b:col
            		\ : s:col_def
                let s:col_end  = exists("b:col_end") && !empty(b:col_end) ? b:col_end
            		\ : s:col_def_end
                let s:del  = exists("b:delimiter") && !empty(b:delimiter) ? b:delimiter
            		\ : s:del_def
                let s:cmts = exists("b:csv_cmt") ? b:csv_cmt[0] : split(&cms, '&s')[0]
                let s:cmte = exists("b:csv_cmt") && len(b:csv_cmt) == 2 ? b:csv_cmt[1]
            		\ : ''
            
                if line('$') > 1 && (!exists("b:col") || empty(b:col))
                " check for invalid pattern, ftplugin hasn't been loaded yet
            	call Warning("Invalid column pattern, using default pattern " . s:col_def)
                endif
            endfu
            
            " Syntax rules {{{2
            fu! DoHighlight() "{{{3
                if has("conceal") && !exists("g:csv_no_conceal") &&
            		\ !exists("b:csv_fixed_width_cols")
            	" old val
            	    "\ '\%(.\)\@=/ms=e,me=e contained conceal cchar=' .
            	    " Has a problem with the last line!
            	exe "syn match CSVDelimiter /" . s:col_end . 
            	    \ '/ms=e,me=e contained conceal cchar=' .
            	    \ (&enc == "utf-8" ? "│" : '|')
            	"exe "syn match CSVDelimiterEOL /" . s:del . 
            	"    \ '\?$/ contained conceal cchar=' .
            	"    \ (&enc == "utf-8" ? "│" : '|')
            	hi def link CSVDelimiter Conceal
                elseif !exists("b:csv_fixed_width_cols")
            	" The \%(.\)\@<= makes sure, the last char won't be concealed,
            	" if it isn't a delimiter
            	"exe "syn match CSVDelimiter /" . s:col . '\%(.\)\@<=/ms=e,me=e contained'
            	exe "syn match CSVDelimiter /" . s:col_end . '/ms=e,me=e contained'
            	"exe "syn match CSVDelimiterEOL /" . s:del . '\?$/ contained'
            	if has("conceal")
            	    hi def link CSVDelimiter Conceal
            	else
            	    hi def link CSVDelimiter Ignore
            	endif
                endif " There is no delimiter for csv fixed width columns
            
            
                if !exists("b:csv_fixed_width_cols")
            	exe 'syn match CSVColumnEven nextgroup=CSVColumnOdd /'
            		    \ . s:col . '/ contains=CSVDelimiter'
            	exe 'syn match CSVColumnOdd nextgroup=CSVColumnEven /'
            		    \ . s:col . '/ contains=CSVDelimiter'
            
            	exe 'syn match CSVColumnHeaderEven nextgroup=CSVColumnHeaderOdd /\%1l'
            		    \. s:col . '/ contains=CSVDelimiter'
            	exe 'syn match CSVColumnHeaderOdd nextgroup=CSVColumnHeaderEven /\%1l'
            		    \. s:col . '/ contains=CSVDelimiter'
                else
            	for i in range(len(b:csv_fixed_width_cols))
            	    let pat = '/\%' . b:csv_fixed_width_cols[i] . 'c.*' .
            			\ ((i == len(b:csv_fixed_width_cols)-1) ? '/' : 
            			\ '\%' . b:csv_fixed_width_cols[i+1] . 'c/')
            
            	    let group  = "CSVColumn" . (i%2 ? "Odd"  : "Even" )
            	    let ngroup = "CSVColumn" . (i%2 ? "Even" : "Odd"  )
            	    exe "syn match " group pat " nextgroup=" . ngroup
            	endfor
                endif
                " Comment regions
                exe 'syn match CSVComment /'. Esc(s:cmts, '/'). '.*'.
            		\ (!empty(s:cmte) ? '\%('. Esc(s:cmte, '/'). '\)\?'
            		\: '').  '/'
                hi def link CSVComment Comment
            endfun
            
            fu! DoSyntaxDefinitions() "{{{3
                syn spell toplevel
            
                " Not really needed
                syn case ignore
            
                hi def link CSVColumnHeaderOdd  WarningMsg
                hi def link CSVColumnHeaderEven WarningMsg
                hi def link CSVColumnOdd	    DiffAdd
                hi def link CSVColumnEven	    DiffChange
                " Old Version
                if 0
            	if &t_Co < 88
            	    if !exists("b:csv_fixed_width_cols")
            		hi default CSVColumnHeaderOdd ctermfg=DarkRed ctermbg=15
            		    \ guibg=grey80 guifg=black term=underline cterm=standout,bold
            		    \ gui=bold,underline 
            	    endif
            	    hi default CSVColumnOdd	ctermfg=DarkRed ctermbg=15 guibg=grey80
            		    \ guifg=black term=underline cterm=bold gui=underline
            	else
            	    if !exists("b:csv_fixed_width_cols")
            		hi default CSVColumnHeaderOdd ctermfg=darkblue ctermbg=white
            		    \ guibg=grey80 guifg=black cterm=standout,underline
            		    \ gui=bold,underline
            	    endif
            	    hi default CSVColumnOdd ctermfg=darkblue ctermbg=white guibg=grey80
            		    \ guifg=black cterm=reverse,underline gui=underline
            	endif
            	    
            	" ctermbg=8 should be safe, even in 8 color terms
            	if !exists("b:csv_fixed_width_cols")
            	    hi default CSVColumnHeaderEven ctermfg=white ctermbg=darkgrey
            		    \ guibg=grey50 guifg=black term=bold cterm=standout,underline
            		    \ gui=bold,underline 
            	endif
            	hi default CSVColumnEven ctermfg=white ctermbg=darkgrey guibg=grey50
            		    \ guifg=black term=bold cterm=underline gui=bold,underline 
                endif
            endfun
            
            " Main: {{{2 
            " Make sure, we are using a sane, valid pattern for syntax
            " highlighting
            call CheckSaneSearchPattern()
            
            " Define all necessary syntax groups
            call DoSyntaxDefinitions()
            
            " Highlight the file
            call DoHighlight()
            
            " Set the syntax variable {{{2
            let b:current_syntax="csv"
            
            let &cpo = s:cpo_save
            unlet s:cpo_save
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/cucumber.vim
            ================================================
            " Vim syntax file
            " Language:     Cucumber
            " Maintainer:   Tim Pope 
            " Filenames:    *.feature
            " Last Change:	2010 May 21
            
            if exists("b:current_syntax")
                finish
            endif
            syn case match
            syn sync minlines=20
            
            let g:cucumber_languages = {
                  \"en": {"and": "And\\>", "background": "Background\\>", "but": "But\\>", "examples": "Scenarios\\>\\|Examples\\>", "feature": "Business Need\\>\\|Feature\\>\\|Ability\\>", "given": "Given\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Template\\>\\|Scenario Outline\\>", "then": "Then\\>", "when": "When\\>"},
                  \"ar": {"and": "\\%u0648\\>", "background": "\\%u0627\\%u0644\\%u062e\\%u0644\\%u0641\\%u064a\\%u0629\\>", "but": "\\%u0644\\%u0643\\%u0646\\>", "examples": "\\%u0627\\%u0645\\%u062b\\%u0644\\%u0629\\>", "feature": "\\%u062e\\%u0627\\%u0635\\%u064a\\%u0629\\>", "given": "\\%u0628\\%u0641\\%u0631\\%u0636\\>", "scenario": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648\\>", "scenario_outline": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648 \\%u0645\\%u062e\\%u0637\\%u0637\\>", "then": "\\%u0627\\%u0630\\%u0627\\%u064b\\>\\|\\%u062b\\%u0645\\>", "when": "\\%u0639\\%u0646\\%u062f\\%u0645\\%u0627\\>\\|\\%u0645\\%u062a\\%u0649\\>"},
                  \"bg": {"and": "\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u0438\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>", "but": "\\%u041d\\%u043e\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\>", "given": "\\%u0414\\%u0430\\%u0434\\%u0435\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0420\\%u0430\\%u043c\\%u043a\\%u0430 \\%u043d\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0430\\%u0442\\%u043e\\>"},
                  \"bm": {"and": "Dan\\>", "background": "Latar Belakang\\>", "but": "Tetapi\\>", "examples": "Contoh \\>", "feature": "Fungsi\\>", "given": "Bagi\\>", "scenario": "Senario\\>", "scenario_outline": "Menggariskan Senario \\>", "then": "Kemudian\\>", "when": "Apabila\\>"},
                  \"ca": {"and": "I\\>", "background": "Antecedents\\>\\|Rerefons\\>", "but": "Per\\%u00f2\\>", "examples": "Exemples\\>", "feature": "Caracter\\%u00edstica\\>\\|Funcionalitat\\>", "given": "At\\%u00e8s\\>\\|Donada\\>\\|Donat\\>\\|Atesa\\>", "scenario": "Escenari\\>", "scenario_outline": "Esquema de l'escenari\\>", "then": "Aleshores\\>\\|Cal\\>", "when": "Quan\\>"},
                  \"cs": {"and": "A tak\\%u00e9\\>\\|A\\>", "background": "Pozad\\%u00ed\\>\\|Kontext\\>", "but": "Ale\\>", "examples": "P\\%u0159\\%u00edklady\\>", "feature": "Po\\%u017eadavek\\>", "given": "Za p\\%u0159edpokladu\\>\\|Pokud\\>", "scenario": "Sc\\%u00e9n\\%u00e1\\%u0159\\>", "scenario_outline": "N\\%u00e1\\%u010drt Sc\\%u00e9n\\%u00e1\\%u0159e\\>\\|Osnova sc\\%u00e9n\\%u00e1\\%u0159e\\>", "then": "Pak\\>", "when": "Kdy\\%u017e\\>"},
                  \"cy-GB": {"and": "A\\>", "background": "Cefndir\\>", "but": "Ond\\>", "examples": "Enghreifftiau\\>", "feature": "Arwedd\\>", "given": "Anrhegedig a\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Amlinellol\\>", "then": "Yna\\>", "when": "Pryd\\>"},
                  \"da": {"and": "Og\\>", "background": "Baggrund\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskab\\>", "given": "Givet\\>", "scenario": "Scenarie\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
                  \"de": {"and": "Und\\>", "background": "Grundlage\\>", "but": "Aber\\>", "examples": "Beispiele\\>", "feature": "Funktionalit\\%u00e4t\\>", "given": "Gegeben sei\\>\\|Angenommen\\>", "scenario": "Szenario\\>", "scenario_outline": "Szenariogrundriss\\>", "then": "Dann\\>", "when": "Wenn\\>"},
                  \"el": {"and": "\\%u039a\\%u03b1\\%u03b9\\>", "background": "\\%u03a5\\%u03c0\\%u03cc\\%u03b2\\%u03b1\\%u03b8\\%u03c1\\%u03bf\\>", "but": "\\%u0391\\%u03bb\\%u03bb\\%u03ac\\>", "examples": "\\%u03a0\\%u03b1\\%u03c1\\%u03b1\\%u03b4\\%u03b5\\%u03af\\%u03b3\\%u03bc\\%u03b1\\%u03c4\\%u03b1\\>\\|\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03b1\\>", "feature": "\\%u0394\\%u03c5\\%u03bd\\%u03b1\\%u03c4\\%u03cc\\%u03c4\\%u03b7\\%u03c4\\%u03b1\\>\\|\\%u039b\\%u03b5\\%u03b9\\%u03c4\\%u03bf\\%u03c5\\%u03c1\\%u03b3\\%u03af\\%u03b1\\>", "given": "\\%u0394\\%u03b5\\%u03b4\\%u03bf\\%u03bc\\%u03ad\\%u03bd\\%u03bf\\%u03c5 \\%u03cc\\%u03c4\\%u03b9\\>\\|\\%u0394\\%u03b5\\%u03b4\\%u03bf\\%u03bc\\%u03ad\\%u03bd\\%u03bf\\%u03c5\\>", "scenario": "\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03bf\\>", "scenario_outline": "\\%u03a0\\%u03b5\\%u03c1\\%u03b9\\%u03b3\\%u03c1\\%u03b1\\%u03c6\\%u03ae \\%u03a3\\%u03b5\\%u03bd\\%u03b1\\%u03c1\\%u03af\\%u03bf\\%u03c5\\>", "then": "\\%u03a4\\%u03cc\\%u03c4\\%u03b5\\>", "when": "\\%u038c\\%u03c4\\%u03b1\\%u03bd\\>"},
                  \"en-Scouse": {"and": "An\\>", "background": "Dis is what went down\\>", "but": "Buh\\>", "examples": "Examples\\>", "feature": "Feature\\>", "given": "Youse know when youse got\\>\\|Givun\\>", "scenario": "The thing of it is\\>", "scenario_outline": "Wharrimean is\\>", "then": "Den youse gotta\\>\\|Dun\\>", "when": "Youse know like when\\>\\|Wun\\>"},
                  \"en-au": {"and": "Too right\\>", "background": "First off\\>", "but": "Yeah nah\\>", "examples": "You'll wanna\\>", "feature": "Pretty much\\>", "given": "Y'know\\>", "scenario": "Awww, look mate\\>", "scenario_outline": "Reckon it's like\\>", "then": "But at the end of the day I reckon\\>", "when": "It's just unbelievable\\>"},
                  \"en-lol": {"and": "AN\\>", "background": "B4\\>", "but": "BUT\\>", "examples": "EXAMPLZ\\>", "feature": "OH HAI\\>", "given": "I CAN HAZ\\>", "scenario": "MISHUN\\>", "scenario_outline": "MISHUN SRSLY\\>", "then": "DEN\\>", "when": "WEN\\>"},
                  \"en-old": {"and": "Ond\\>\\|7\\>", "background": "\\%u00c6r\\>\\|Aer\\>", "but": "Ac\\>", "examples": "Se \\%u00f0e\\>\\|Se \\%u00fee\\>\\|Se the\\>", "feature": "Hw\\%u00e6t\\>\\|Hwaet\\>", "given": "\\%u00d0urh\\>\\|\\%u00deurh\\>\\|Thurh\\>", "scenario": "Swa\\>", "scenario_outline": "Swa hw\\%u00e6r swa\\>\\|Swa hwaer swa\\>", "then": "\\%u00d0a \\%u00f0e\\>\\|\\%u00dea \\%u00fee\\>\\|\\%u00dea\\>\\|\\%u00d0a\\>\\|Tha the\\>\\|Tha\\>", "when": "\\%u00d0a\\>\\|\\%u00dea\\>\\|Tha\\>"},
                  \"en-pirate": {"and": "Aye\\>", "background": "Yo-ho-ho\\>", "but": "Avast!\\>", "examples": "Dead men tell no tales\\>", "feature": "Ahoy matey!\\>", "given": "Gangway!\\>", "scenario": "Heave to\\>", "scenario_outline": "Shiver me timbers\\>", "then": "Let go and haul\\>", "when": "Blimey!\\>"},
                  \"en-tx": {"and": "And y'all\\>", "background": "Background\\>", "but": "But y'all\\>", "examples": "Examples\\>", "feature": "Feature\\>", "given": "Given y'all\\>", "scenario": "Scenario\\>", "scenario_outline": "All y'all\\>", "then": "Then y'all\\>", "when": "When y'all\\>"},
                  \"eo": {"and": "Kaj\\>", "background": "Fono\\>", "but": "Sed\\>", "examples": "Ekzemploj\\>", "feature": "Trajto\\>", "given": "Donita\\%u0135o\\>", "scenario": "Scenaro\\>", "scenario_outline": "Konturo de la scenaro\\>", "then": "Do\\>", "when": "Se\\>"},
                  \"es": {"and": "Y\\>", "background": "Antecedentes\\>", "but": "Pero\\>", "examples": "Ejemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esquema del escenario\\>", "then": "Entonces\\>", "when": "Cuando\\>"},
                  \"et": {"and": "Ja\\>", "background": "Taust\\>", "but": "Kuid\\>", "examples": "Juhtumid\\>", "feature": "Omadus\\>", "given": "Eeldades\\>", "scenario": "Stsenaarium\\>", "scenario_outline": "Raamstsenaarium\\>", "then": "Siis\\>", "when": "Kui\\>"},
                  \"fa": {"and": "\\%u0648\\>", "background": "\\%u0632\\%u0645\\%u06cc\\%u0646\\%u0647\\>", "but": "\\%u0627\\%u0645\\%u0627\\>", "examples": "\\%u0646\\%u0645\\%u0648\\%u0646\\%u0647 \\%u0647\\%u0627\\>", "feature": "\\%u0648\\%u0650\\%u06cc\\%u0698\\%u06af\\%u06cc\\>", "given": "\\%u0628\\%u0627 \\%u0641\\%u0631\\%u0636\\>", "scenario": "\\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648\\>", "scenario_outline": "\\%u0627\\%u0644\\%u06af\\%u0648\\%u06cc \\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648\\>", "then": "\\%u0622\\%u0646\\%u06af\\%u0627\\%u0647\\>", "when": "\\%u0647\\%u0646\\%u06af\\%u0627\\%u0645\\%u06cc\\>"},
                  \"fi": {"and": "Ja\\>", "background": "Tausta\\>", "but": "Mutta\\>", "examples": "Tapaukset\\>", "feature": "Ominaisuus\\>", "given": "Oletetaan\\>", "scenario": "Tapaus\\>", "scenario_outline": "Tapausaihio\\>", "then": "Niin\\>", "when": "Kun\\>"},
                  \"fr": {"and": "Et\\>", "background": "Contexte\\>", "but": "Mais\\>", "examples": "Exemples\\>", "feature": "Fonctionnalit\\%u00e9\\>", "given": "\\%u00c9tant donn\\%u00e9es\\>\\|\\%u00c9tant donn\\%u00e9s\\>\\|\\%u00c9tant donn\\%u00e9e\\>\\|\\%u00c9tant donn\\%u00e9\\>\\|Etant donn\\%u00e9es\\>\\|Etant donn\\%u00e9s\\>\\|Etant donn\\%u00e9e\\>\\|Etant donn\\%u00e9\\>\\|Soit\\>", "scenario": "Sc\\%u00e9nario\\>", "scenario_outline": "Plan du sc\\%u00e9nario\\>\\|Plan du Sc\\%u00e9nario\\>", "then": "Alors\\>", "when": "Lorsqu'\\|Lorsque\\>\\|Quand\\>"},
                  \"gl": {"and": "E\\>", "background": "Contexto\\>", "but": "Mais\\>\\|Pero\\>", "examples": "Exemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esbozo do escenario\\>", "then": "Ent\\%u00f3n\\>\\|Logo\\>", "when": "Cando\\>"},
                  \"he": {"and": "\\%u05d5\\%u05d2\\%u05dd\\>", "background": "\\%u05e8\\%u05e7\\%u05e2\\>", "but": "\\%u05d0\\%u05d1\\%u05dc\\>", "examples": "\\%u05d3\\%u05d5\\%u05d2\\%u05de\\%u05d0\\%u05d5\\%u05ea\\>", "feature": "\\%u05ea\\%u05db\\%u05d5\\%u05e0\\%u05d4\\>", "given": "\\%u05d1\\%u05d4\\%u05d9\\%u05e0\\%u05ea\\%u05df\\>", "scenario": "\\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9\\>", "scenario_outline": "\\%u05ea\\%u05d1\\%u05e0\\%u05d9\\%u05ea \\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9\\>", "then": "\\%u05d0\\%u05d6\\%u05d9\\>\\|\\%u05d0\\%u05d6\\>", "when": "\\%u05db\\%u05d0\\%u05e9\\%u05e8\\>"},
                  \"hi": {"and": "\\%u0924\\%u0925\\%u093e\\>\\|\\%u0914\\%u0930\\>", "background": "\\%u092a\\%u0943\\%u0937\\%u094d\\%u0920\\%u092d\\%u0942\\%u092e\\%u093f\\>", "but": "\\%u092a\\%u0930\\>", "examples": "\\%u0909\\%u0926\\%u093e\\%u0939\\%u0930\\%u0923\\>", "feature": "\\%u0930\\%u0942\\%u092a \\%u0932\\%u0947\\%u0916\\>", "given": "\\%u091a\\%u0942\\%u0902\\%u0915\\%u093f\\>\\|\\%u092f\\%u0926\\%u093f\\>\\|\\%u0905\\%u0917\\%u0930\\>", "scenario": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f\\>", "scenario_outline": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f \\%u0930\\%u0942\\%u092a\\%u0930\\%u0947\\%u0916\\%u093e\\>", "then": "\\%u0924\\%u092c\\>", "when": "\\%u091c\\%u092c\\>"},
                  \"hr": {"and": "I\\>", "background": "Pozadina\\>", "but": "Ali\\>", "examples": "Scenariji\\>\\|Primjeri\\>", "feature": "Mogu\\%u0107nost\\>\\|Mogucnost\\>\\|Osobina\\>", "given": "Zadano\\>\\|Zadani\\>\\|Zadan\\>", "scenario": "Scenarij\\>", "scenario_outline": "Koncept\\>\\|Skica\\>", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"},
                  \"hu": {"and": "\\%u00c9s\\>", "background": "H\\%u00e1tt\\%u00e9r\\>", "but": "De\\>", "examples": "P\\%u00e9ld\\%u00e1k\\>", "feature": "Jellemz\\%u0151\\>", "given": "Amennyiben\\>\\|Adott\\>", "scenario": "Forgat\\%u00f3k\\%u00f6nyv\\>", "scenario_outline": "Forgat\\%u00f3k\\%u00f6nyv v\\%u00e1zlat\\>", "then": "Akkor\\>", "when": "Amikor\\>\\|Majd\\>\\|Ha\\>"},
                  \"id": {"and": "Dan\\>", "background": "Dasar\\>", "but": "Tapi\\>", "examples": "Contoh\\>", "feature": "Fitur\\>", "given": "Dengan\\>", "scenario": "Skenario\\>", "scenario_outline": "Skenario konsep\\>", "then": "Maka\\>", "when": "Ketika\\>"},
                  \"is": {"and": "Og\\>", "background": "Bakgrunnur\\>", "but": "En\\>", "examples": "Atbur\\%u00f0ar\\%u00e1sir\\>\\|D\\%u00e6mi\\>", "feature": "Eiginleiki\\>", "given": "Ef\\>", "scenario": "Atbur\\%u00f0ar\\%u00e1s\\>", "scenario_outline": "L\\%u00fdsing Atbur\\%u00f0ar\\%u00e1sar\\>\\|L\\%u00fdsing D\\%u00e6ma\\>", "then": "\\%u00de\\%u00e1\\>", "when": "\\%u00deegar\\>"},
                  \"it": {"and": "E\\>", "background": "Contesto\\>", "but": "Ma\\>", "examples": "Esempi\\>", "feature": "Funzionalit\\%u00e0\\>", "given": "Dato\\>\\|Data\\>\\|Dati\\>\\|Date\\>", "scenario": "Scenario\\>", "scenario_outline": "Schema dello scenario\\>", "then": "Allora\\>", "when": "Quando\\>"},
                  \"ja": {"and": "\\%u304b\\%u3064", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u3057\\%u304b\\%u3057\\|\\%u305f\\%u3060\\%u3057\\|\\%u4f46\\%u3057", "examples": "\\%u30b5\\%u30f3\\%u30d7\\%u30eb\\>\\|\\%u4f8b\\>", "feature": "\\%u30d5\\%u30a3\\%u30fc\\%u30c1\\%u30e3\\>\\|\\%u6a5f\\%u80fd\\>", "given": "\\%u524d\\%u63d0", "scenario": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\>", "scenario_outline": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30a2\\%u30a6\\%u30c8\\%u30e9\\%u30a4\\%u30f3\\>\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\%u30fc\\%u30c8\\>\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\>\\|\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\>", "then": "\\%u306a\\%u3089\\%u3070", "when": "\\%u3082\\%u3057"},
                  \"ko": {"and": "\\%uadf8\\%ub9ac\\%uace0", "background": "\\%ubc30\\%uacbd\\>", "but": "\\%ud558\\%uc9c0\\%ub9cc\\|\\%ub2e8", "examples": "\\%uc608\\>", "feature": "\\%uae30\\%ub2a5\\>", "given": "\\%uc870\\%uac74\\|\\%uba3c\\%uc800", "scenario": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624\\>", "scenario_outline": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624 \\%uac1c\\%uc694\\>", "then": "\\%uadf8\\%ub7ec\\%uba74", "when": "\\%ub9cc\\%uc77c\\|\\%ub9cc\\%uc57d"},
                  \"lt": {"and": "Ir\\>", "background": "Kontekstas\\>", "but": "Bet\\>", "examples": "Pavyzd\\%u017eiai\\>\\|Scenarijai\\>\\|Variantai\\>", "feature": "Savyb\\%u0117\\>", "given": "Duota\\>", "scenario": "Scenarijus\\>", "scenario_outline": "Scenarijaus \\%u0161ablonas\\>", "then": "Tada\\>", "when": "Kai\\>"},
                  \"lu": {"and": "an\\>\\|a\\>", "background": "Hannergrond\\>", "but": "m\\%u00e4\\>\\|awer\\>", "examples": "Beispiller\\>", "feature": "Funktionalit\\%u00e9it\\>", "given": "ugeholl\\>", "scenario": "Szenario\\>", "scenario_outline": "Plang vum Szenario\\>", "then": "dann\\>", "when": "wann\\>"},
                  \"lv": {"and": "Un\\>", "background": "Situ\\%u0101cija\\>\\|Konteksts\\>", "but": "Bet\\>", "examples": "Piem\\%u0113ri\\>\\|Paraugs\\>", "feature": "Funkcionalit\\%u0101te\\>\\|F\\%u012b\\%u010da\\>", "given": "Kad\\>", "scenario": "Scen\\%u0101rijs\\>", "scenario_outline": "Scen\\%u0101rijs p\\%u0113c parauga\\>", "then": "Tad\\>", "when": "Ja\\>"},
                  \"nl": {"and": "En\\>", "background": "Achtergrond\\>", "but": "Maar\\>", "examples": "Voorbeelden\\>", "feature": "Functionaliteit\\>", "given": "Gegeven\\>\\|Stel\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstract Scenario\\>", "then": "Dan\\>", "when": "Als\\>"},
                  \"no": {"and": "Og\\>", "background": "Bakgrunn\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskap\\>", "given": "Gitt\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>\\|Scenariomal\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
                  \"pl": {"and": "Oraz\\>\\|I\\>", "background": "Za\\%u0142o\\%u017cenia\\>", "but": "Ale\\>", "examples": "Przyk\\%u0142ady\\>", "feature": "W\\%u0142a\\%u015bciwo\\%u015b\\%u0107\\>\\|Potrzeba biznesowa\\>\\|Funkcja\\>\\|Aspekt\\>", "given": "Zak\\%u0142adaj\\%u0105c\\>\\|Maj\\%u0105c\\>", "scenario": "Scenariusz\\>", "scenario_outline": "Szablon scenariusza\\>", "then": "Wtedy\\>", "when": "Je\\%u017celi\\>\\|Je\\%u015bli\\>\\|Kiedy\\>\\|Gdy\\>"},
                  \"pt": {"and": "E\\>", "background": "Cen\\%u00e1rio de Fundo\\>\\|Cenario de Fundo\\>\\|Contexto\\>\\|Fundo\\>", "but": "Mas\\>", "examples": "Cen\\%u00e1rios\\>\\|Exemplos\\>\\|Cenarios\\>", "feature": "Caracter\\%u00edstica\\>\\|Funcionalidade\\>\\|Caracteristica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Cen\\%u00e1rio\\>\\|Cenario\\>", "scenario_outline": "Delinea\\%u00e7\\%u00e3o do Cen\\%u00e1rio\\>\\|Esquema do Cen\\%u00e1rio\\>\\|Delineacao do Cenario\\>\\|Esquema do Cenario\\>", "then": "Ent\\%u00e3o\\>\\|Entao\\>", "when": "Quando\\>"},
                  \"ro": {"and": "\\%u015ei\\>\\|\\%u0218i\\>\\|Si\\>", "background": "Context\\>", "but": "Dar\\>", "examples": "Exemple\\>", "feature": "Func\\%u0163ionalitate\\>\\|Func\\%u021bionalitate\\>\\|Functionalitate\\>", "given": "Da\\%u0163i fiind\\>\\|Da\\%u021bi fiind\\>\\|Dati fiind\\>\\|Date fiind\\>\\|Dat fiind\\>", "scenario": "Scenariu\\>", "scenario_outline": "Structur\\%u0103 scenariu\\>\\|Structura scenariu\\>", "then": "Atunci\\>", "when": "C\\%u00e2nd\\>\\|Cand\\>"},
                  \"ru": {"and": "\\%u041a \\%u0442\\%u043e\\%u043c\\%u0443 \\%u0436\\%u0435\\>\\|\\%u0422\\%u0430\\%u043a\\%u0436\\%u0435\\>\\|\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u044b\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>\\|\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\>", "but": "\\%u041d\\%u043e\\>\\|\\%u0410\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u044b\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>\\|\\%u0421\\%u0432\\%u043e\\%u0439\\%u0441\\%u0442\\%u0432\\%u043e\\>\\|\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u044f\\>", "given": "\\%u0414\\%u043e\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\>\\|\\%u041f\\%u0443\\%u0441\\%u0442\\%u044c\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u044f\\>", "then": "\\%u0422\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0415\\%u0441\\%u043b\\%u0438\\>"},
                  \"sk": {"and": "A z\\%u00e1rove\\%u0148\\>\\|A taktie\\%u017e\\>\\|A tie\\%u017e\\>\\|A\\>", "background": "Pozadie\\>", "but": "Ale\\>", "examples": "Pr\\%u00edklady\\>", "feature": "Po\\%u017eiadavka\\>\\|Vlastnos\\%u0165\\>\\|Funkcia\\>", "given": "Za predpokladu\\>\\|Pokia\\%u013e\\>", "scenario": "Scen\\%u00e1r\\>", "scenario_outline": "N\\%u00e1\\%u010drt Scen\\%u00e1ru\\>\\|N\\%u00e1\\%u010drt Scen\\%u00e1ra\\>\\|Osnova Scen\\%u00e1ra\\>", "then": "Potom\\>\\|Tak\\>", "when": "Ke\\%u010f\\>\\|Ak\\>"},
                  \"sr-Cyrl": {"and": "\\%u0418\\>", "background": "\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\>\\|\\%u041f\\%u043e\\%u0437\\%u0430\\%u0434\\%u0438\\%u043d\\%u0430\\>\\|\\%u041e\\%u0441\\%u043d\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0438\\>", "examples": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0438\\>\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\>\\|\\%u041c\\%u043e\\%u0433\\%u0443\\%u045b\\%u043d\\%u043e\\%u0441\\%u0442\\>\\|\\%u041e\\%u0441\\%u043e\\%u0431\\%u0438\\%u043d\\%u0430\\>", "given": "\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u043e\\>\\|\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u0435\\>\\|\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u0438\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0430\\>\\|\\%u041a\\%u043e\\%u043d\\%u0446\\%u0435\\%u043f\\%u0442\\>\\|\\%u0421\\%u043a\\%u0438\\%u0446\\%u0430\\>", "then": "\\%u041e\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u041a\\%u0430\\%u0434\\%u0430\\>\\|\\%u041a\\%u0430\\%u0434\\>"},
                  \"sr-Latn": {"and": "I\\>", "background": "Kontekst\\>\\|Pozadina\\>\\|Osnova\\>", "but": "Ali\\>", "examples": "Scenariji\\>\\|Primeri\\>", "feature": "Mogu\\%u0107nost\\>\\|Funkcionalnost\\>\\|Mogucnost\\>\\|Osobina\\>", "given": "Zadato\\>\\|Zadate\\>\\|Zatati\\>", "scenario": "Scenario\\>\\|Primer\\>", "scenario_outline": "Struktura scenarija\\>\\|Koncept\\>\\|Skica\\>", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"},
                  \"sv": {"and": "Och\\>", "background": "Bakgrund\\>", "but": "Men\\>", "examples": "Exempel\\>", "feature": "Egenskap\\>", "given": "Givet\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>\\|Scenariomall\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e4r\\>"},
                  \"th": {"and": "\\%u0e41\\%u0e25\\%u0e30\\>", "background": "\\%u0e41\\%u0e19\\%u0e27\\%u0e04\\%u0e34\\%u0e14\\>", "but": "\\%u0e41\\%u0e15\\%u0e48\\>", "examples": "\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>\\|\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e15\\%u0e31\\%u0e27\\%u0e2d\\%u0e22\\%u0e48\\%u0e32\\%u0e07\\>", "feature": "\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e15\\%u0e49\\%u0e2d\\%u0e07\\%u0e01\\%u0e32\\%u0e23\\%u0e17\\%u0e32\\%u0e07\\%u0e18\\%u0e38\\%u0e23\\%u0e01\\%u0e34\\%u0e08\\>\\|\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e2a\\%u0e32\\%u0e21\\%u0e32\\%u0e23\\%u0e16\\>\\|\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2b\\%u0e25\\%u0e31\\%u0e01\\>", "given": "\\%u0e01\\%u0e33\\%u0e2b\\%u0e19\\%u0e14\\%u0e43\\%u0e2b\\%u0e49\\>", "scenario": "\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>", "scenario_outline": "\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2a\\%u0e23\\%u0e49\\%u0e32\\%u0e07\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>\\|\\%u0e2a\\%u0e23\\%u0e38\\%u0e1b\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>", "then": "\\%u0e14\\%u0e31\\%u0e07\\%u0e19\\%u0e31\\%u0e49\\%u0e19\\>", "when": "\\%u0e40\\%u0e21\\%u0e37\\%u0e48\\%u0e2d\\>"},
                  \"tl": {"and": "\\%u0c2e\\%u0c30\\%u0c3f\\%u0c2f\\%u0c41\\>", "background": "\\%u0c28\\%u0c47\\%u0c2a\\%u0c25\\%u0c4d\\%u0c2f\\%u0c02\\>", "but": "\\%u0c15\\%u0c3e\\%u0c28\\%u0c3f\\>", "examples": "\\%u0c09\\%u0c26\\%u0c3e\\%u0c39\\%u0c30\\%u0c23\\%u0c32\\%u0c41\\>", "feature": "\\%u0c17\\%u0c41\\%u0c23\\%u0c2e\\%u0c41\\>", "given": "\\%u0c1a\\%u0c46\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c2c\\%u0c21\\%u0c3f\\%u0c28\\%u0c26\\%u0c3f\\>", "scenario": "\\%u0c38\\%u0c28\\%u0c4d\\%u0c28\\%u0c3f\\%u0c35\\%u0c47\\%u0c36\\%u0c02\\>", "scenario_outline": "\\%u0c15\\%u0c25\\%u0c28\\%u0c02\\>", "then": "\\%u0c05\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c41\\%u0c21\\%u0c41\\>", "when": "\\%u0c08 \\%u0c2a\\%u0c30\\%u0c3f\\%u0c38\\%u0c4d\\%u0c25\\%u0c3f\\%u0c24\\%u0c3f\\%u0c32\\%u0c4b\\>"},
                  \"tr": {"and": "Ve\\>", "background": "Ge\\%u00e7mi\\%u015f\\>", "but": "Fakat\\>\\|Ama\\>", "examples": "\\%u00d6rnekler\\>", "feature": "\\%u00d6zellik\\>", "given": "Diyelim ki\\>", "scenario": "Senaryo\\>", "scenario_outline": "Senaryo tasla\\%u011f\\%u0131\\>", "then": "O zaman\\>", "when": "E\\%u011fer ki\\>"},
                  \"tt": {"and": "\\%u04ba\\%u04d9\\%u043c\\>\\|\\%u0412\\%u04d9\\>", "background": "\\%u041a\\%u0435\\%u0440\\%u0435\\%u0448\\>", "but": "\\%u041b\\%u04d9\\%u043a\\%u0438\\%u043d\\>\\|\\%u04d8\\%u043c\\%u043c\\%u0430\\>", "examples": "\\%u04ae\\%u0440\\%u043d\\%u04d9\\%u043a\\%u043b\\%u04d9\\%u0440\\>\\|\\%u041c\\%u0438\\%u0441\\%u0430\\%u043b\\%u043b\\%u0430\\%u0440\\>", "feature": "\\%u04ae\\%u0437\\%u0435\\%u043d\\%u0447\\%u04d9\\%u043b\\%u0435\\%u043a\\%u043b\\%u0435\\%u043b\\%u0435\\%u043a\\>\\|\\%u041c\\%u04e9\\%u043c\\%u043a\\%u0438\\%u043d\\%u043b\\%u0435\\%u043a\\>", "given": "\\%u04d8\\%u0439\\%u0442\\%u0438\\%u043a\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\%u043d\\%u044b\\%u04a3 \\%u0442\\%u04e9\\%u0437\\%u0435\\%u043b\\%u0435\\%u0448\\%u0435\\>", "then": "\\%u041d\\%u04d9\\%u0442\\%u0438\\%u0497\\%u04d9\\%u0434\\%u04d9\\>", "when": "\\%u04d8\\%u0433\\%u04d9\\%u0440\\>"},
                  \"uk": {"and": "\\%u0410 \\%u0442\\%u0430\\%u043a\\%u043e\\%u0436\\>\\|\\%u0422\\%u0430\\>\\|\\%u0406\\>", "background": "\\%u041f\\%u0435\\%u0440\\%u0435\\%u0434\\%u0443\\%u043c\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0435\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043a\\%u043b\\%u0430\\%u0434\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0456\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e, \\%u0449\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e\\>\\|\\%u041d\\%u0435\\%u0445\\%u0430\\%u0439\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u044e\\>", "then": "\\%u0422\\%u043e\\%u0434\\%u0456\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u042f\\%u043a\\%u0449\\%u043e\\>\\|\\%u041a\\%u043e\\%u043b\\%u0438\\>"},
                  \"uz": {"and": "\\%u0412\\%u0430\\>", "background": "\\%u0422\\%u0430\\%u0440\\%u0438\\%u0445\\>", "but": "\\%u041b\\%u0435\\%u043a\\%u0438\\%u043d\\>\\|\\%u0411\\%u0438\\%u0440\\%u043e\\%u043a\\>\\|\\%u0410\\%u043c\\%u043c\\%u043e\\>", "examples": "\\%u041c\\%u0438\\%u0441\\%u043e\\%u043b\\%u043b\\%u0430\\%u0440\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u0410\\%u0433\\%u0430\\%u0440\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439 \\%u0441\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430\\%u0441\\%u0438\\>", "then": "\\%u0423\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u0410\\%u0433\\%u0430\\%u0440\\>"},
                  \"vi": {"and": "V\\%u00e0\\>", "background": "B\\%u1ed1i c\\%u1ea3nh\\>", "but": "Nh\\%u01b0ng\\>", "examples": "D\\%u1eef li\\%u1ec7u\\>", "feature": "T\\%u00ednh n\\%u0103ng\\>", "given": "Bi\\%u1ebft\\>\\|Cho\\>", "scenario": "T\\%u00ecnh hu\\%u1ed1ng\\>\\|K\\%u1ecbch b\\%u1ea3n\\>", "scenario_outline": "Khung t\\%u00ecnh hu\\%u1ed1ng\\>\\|Khung k\\%u1ecbch b\\%u1ea3n\\>", "then": "Th\\%u00ec\\>", "when": "Khi\\>"},
                  \"zh-CN": {"and": "\\%u800c\\%u4e14\\|\\%u5e76\\%u4e14\\|\\%u540c\\%u65f6", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8bbe\\|\\%u5047\\%u5b9a", "scenario": "\\%u573a\\%u666f\\>\\|\\%u5267\\%u672c\\>", "scenario_outline": "\\%u573a\\%u666f\\%u5927\\%u7eb2\\>\\|\\%u5267\\%u672c\\%u5927\\%u7eb2\\>", "then": "\\%u90a3\\%u4e48", "when": "\\%u5f53"},
                  \"zh-TW": {"and": "\\%u800c\\%u4e14\\|\\%u4e26\\%u4e14\\|\\%u540c\\%u6642", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8a2d\\|\\%u5047\\%u5b9a", "scenario": "\\%u5834\\%u666f\\>\\|\\%u5287\\%u672c\\>", "scenario_outline": "\\%u5834\\%u666f\\%u5927\\%u7db1\\>\\|\\%u5287\\%u672c\\%u5927\\%u7db1\\>", "then": "\\%u90a3\\%u9ebc", "when": "\\%u7576"}}
            
            function! s:pattern(key)
              let language = matchstr(getline(1),'#\s*language:\s*\zs\S\+')
              if &fileencoding == 'latin1' && language == ''
                let language = 'en'
              endif
              if has_key(g:cucumber_languages, language)
                let languages = [g:cucumber_languages[language]]
              else
                let languages = values(g:cucumber_languages)
              end
              return '\<\%('.join(map(languages,'get(v:val,a:key,"\\%(a\\&b\\)")'),'\|').'\)'
            endfunction
            
            function! s:Add(name)
              let next = " skipempty skipwhite nextgroup=".join(map(["Region","AndRegion","ButRegion","Comment","String","Table"],'"cucumber".a:name.v:val'),",")
              exe "syn region cucumber".a:name.'Region matchgroup=cucumber'.a:name.' start="\%(^\s*\)\@<=\%('.s:pattern(tolower(a:name)).'\)" end="$"'.next
              exe 'syn region cucumber'.a:name.'AndRegion matchgroup=cucumber'.a:name.'And start="\%(^\s*\)\@<='.s:pattern('and').'" end="$" contained'.next
              exe 'syn region cucumber'.a:name.'ButRegion matchgroup=cucumber'.a:name.'But start="\%(^\s*\)\@<='.s:pattern('but').'" end="$" contained'.next
              exe 'syn match cucumber'.a:name.'Comment "\%(^\s*\)\@<=#.*" contained'.next
              exe 'syn region cucumber'.a:name.'String start=+\%(^\s*\)\@<="""+ end=+"""+ contained'.next
              exe 'syn match cucumber'.a:name.'Table "\%(^\s*\)\@<=|.*" contained contains=cucumberDelimiter'.next
              exe 'hi def link cucumber'.a:name.'Comment cucumberComment'
              exe 'hi def link cucumber'.a:name.'String cucumberString'
              exe 'hi def link cucumber'.a:name.'But cucumber'.a:name.'And'
              exe 'hi def link cucumber'.a:name.'And cucumber'.a:name
              exe 'syn cluster cucumberStepRegions add=cucumber'.a:name.'Region,cucumber'.a:name.'AndRegion,cucumber'.a:name.'ButRegion'
            endfunction
            
            syn match   cucumberComment  "\%(^\s*\)\@<=#.*"
            syn match   cucumberComment  "\%(\%^\s*\)\@<=#.*" contains=cucumberLanguage
            syn match   cucumberLanguage "\%(#\s*\)\@<=language:" contained
            syn match   cucumberUnparsed "\S.*" nextgroup=cucumberUnparsedComment,cucumberUnparsed,cucumberTags,cucumberBackground,cucumberScenario,cucumberScenarioOutline,cucumberExamples skipwhite skipempty contained
            syn match   cucumberUnparsedComment "#.*" nextgroup=cucumberUnparsedComment,cucumberUnparsed,cucumberTags,cucumberBackground,cucumberScenario,cucumberScenarioOutline,cucumberExamples skipwhite skipempty contained
            
            exe 'syn match cucumberFeature "\%(^\s*\)\@<='.s:pattern('feature').':" nextgroup=cucumberUnparsedComment,cucumberUnparsed,cucumberBackground,cucumberScenario,cucumberScenarioOutline,cucumberExamples skipwhite skipempty'
            exe 'syn match cucumberBackground "\%(^\s*\)\@<='.s:pattern('background').':"'
            exe 'syn match cucumberScenario "\%(^\s*\)\@<='.s:pattern('scenario').':"'
            exe 'syn match cucumberScenarioOutline "\%(^\s*\)\@<='.s:pattern('scenario_outline').':"'
            exe 'syn match cucumberExamples "\%(^\s*\)\@<='.s:pattern('examples').':" nextgroup=cucumberExampleTable skipempty skipwhite'
            
            syn match   cucumberPlaceholder   "<[^<>]*>" contained containedin=@cucumberStepRegions
            syn match   cucumberExampleTable  "\%(^\s*\)\@<=|.*" contains=cucumberDelimiter
            syn match   cucumberDelimiter     "\\\@
            " Version:      0.5
            
            
            if exists("b:current_syntax")
                finish
            endif
            
            let b:current_syntax = "dockerfile"
            
            syntax case ignore
            
            syntax match dockerfileKeyword /\v^\s*(FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD)\s/
            syntax match dockerfileKeyword /\v^\s*(ENTRYPOINT|VOLUME|USER|WORKDIR)\s/
            highlight link dockerfileKeyword Keyword
            
            syntax region dockerfileString start=/\v"/ skip=/\v\\./ end=/\v"/
            highlight link dockerfileString String
            
            syntax match dockerfileComment "\v^\s*#.*$"
            highlight link dockerfileComment Comment
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/elixir.vim
            ================================================
            " Vim syntax file
            " Language: Elixir
            " Maintainer: Carlos Galdino 
            " Last Change: 2013 Apr 24
            
            if exists("b:current_syntax")
              finish
            endif
            
            " syncing starts 2000 lines before top line so docstrings don't screw things up
            syn sync minlines=2000
            
            syn cluster elixirNotTop contains=@elixirRegexSpecial,@elixirStringContained,@elixirDeclaration,elixirTodo,elixirArguments
            
            syn match elixirComment '#.*' contains=elixirTodo
            syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
            
            syn keyword elixirKeyword is_atom is_binary is_bitstring is_boolean is_float is_function is_integer is_list is_number is_pid is_port is_record is_reference is_tuple is_exception
            syn keyword elixirKeyword case cond bc lc inlist inbits if unless try receive
            syn keyword elixirKeyword exit raise throw after rescue catch else do end
            syn keyword elixirKeyword quote unquote super
            syn match   elixirKeyword '\<\%(->\)\>\s*'
            
            syn keyword elixirInclude import require alias use
            
            syn keyword elixirOperator and not or when xor in
            syn match elixirOperator '%=\|\*=\|\*\*=\|+=\|-=\|\^=\|||='
            syn match elixirOperator "\%(<=>\|<\%(<\|=\)\@!\|>\%(<\|=\|>\)\@!\|<=\|>=\|===\|==\|=\~\|!=\|!\~\|\s?[ \t]\@=\)"
            syn match elixirOperator "!+[ \t]\@=\|&&\|||\|\^\|\*\|+\|-\|/"
            syn match elixirOperator "|\|++\|--\|\*\*\|\/\/\|\\\\\|<-\|<>\|<<\|>>\|=\|\.\|::"
            
            syn match elixirSymbol '\(:\)\@=]\@!\)\?\|<>\|===\?\|>=\?\|<=\?\)'
            syn match elixirSymbol '\(:\)\@\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)'
            syn match elixirSymbol "\%([a-zA-Z_]\w*\([?!]\)\?\):\(:\)\@!"
            
            syn keyword elixirName nil
            syn match   elixirName '\<[A-Z]\w*\>'
            
            syn match elixirUnusedVariable '\<_\w*\>'
            
            syn keyword elixirBoolean true false
            
            syn match elixirVariable '@[a-zA-Z_]\w*\|&\d'
            
            syn keyword elixirPseudoVariable __FILE__ __DIR__ __MODULE__ __ENV__ __CALLER__
            
            syn match elixirNumber '\<\d\(_\?\d\)*\(\.[^[:space:][:digit:]]\@!\(_\?\d\)*\)\?\([eE][-+]\?\d\(_\?\d\)*\)\?\>'
            syn match elixirNumber '\<0[xX][0-9A-Fa-f]\+\>'
            syn match elixirNumber '\<0[bB][01]\+\>'
            
            syn match elixirRegexEscape            "\\\\\|\\[aAbBcdDefGhHnrsStvVwW]\|\\\d\{3}\|\\x[0-9a-fA-F]\{2}" contained
            syn match elixirRegexEscapePunctuation "?\|\\.\|*\|\\\[\|\\\]\|+\|\\^\|\\\$\|\\|\|\\(\|\\)\|\\{\|\\}" contained
            syn match elixirRegexQuantifier        "[*?+][?+]\=" contained display
            syn match elixirRegexQuantifier        "{\d\+\%(,\d*\)\=}?\=" contained display
            syn match elixirRegexCharClass         "\[:\(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained display
            
            syn region elixirRegex matchgroup=elixirDelimiter start="%r/" end="/[uiomxfr]*" skip="\\\\" contains=@elixirRegexSpecial
            
            syn cluster elixirRegexSpecial    contains=elixirRegexEscape,elixirRegexCharClass,elixirRegexQuantifier,elixirRegexEscapePunctuation
            syn cluster elixirStringContained contains=elixirInterpolation,elixirRegexEscape,elixirRegexCharClass
            
            syn region elixirString        matchgroup=elixirDelimiter start="'" end="'" skip="\\'"
            syn region elixirString        matchgroup=elixirDelimiter start='"' end='"' skip='\\"' contains=@elixirStringContained
            syn region elixirInterpolation matchgroup=elixirDelimiter start="#{" end="}" contained contains=ALLBUT,elixirComment,@elixirNotTop
            
            syn region elixirDocStringStart matchgroup=elixirDocString start=+"""+ end=+$+ oneline contains=ALLBUT,@elixirNotTop
            syn region elixirDocStringStart matchgroup=elixirDocString start=+'''+ end=+$+ oneline contains=ALLBUT,@elixirNotTop
            syn region elixirDocString     start=+\z("""\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo,elixirInterpolation fold keepend
            syn region elixirDocString     start=+\z('''\)+ end=+^\s*\zs\z1+ contains=elixirDocStringStart,elixirTodo,elixirInterpolation fold keepend
            
            syn match elixirSymbolInterpolated ':\("\)\@=' contains=elixirString
            syn match elixirString             "\(\w\)\@\|0[0-7]{0,2}[0-7]\@!\>\|[^x0MC]\)\|(\\[MC]-)+\w\|[^\s\\]\)"
            
            syn region elixirBlock              matchgroup=elixirKeyword start="\\(:\)\@!" end="\" contains=ALLBUT,@elixirNotTop fold
            syn region elixirAnonymousFunction  matchgroup=elixirKeyword start="\"         end="\" contains=ALLBUT,@elixirNotTop fold
            
            syn region elixirArguments start="(" end=")" contained contains=elixirOperator,elixirSymbol,elixirPseudoVariable,elixirName,elixirBoolean,elixirVariable,elixirUnusedVariable,elixirNumber,elixirDocString,elixirSymbolInterpolated,elixirRegex,elixirString,elixirDelimiter
            
            syn match elixirDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE
            
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~]\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"        end="\z1" skip="\\\\\|\\\z1" fold
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\={"                              end="}"   skip="\\\\\|\\}"   contains=elixirDelimEscape fold
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\=<"                              end=">"   skip="\\\\\|\\>"   contains=elixirDelimEscape fold
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\=\["                             end="\]"  skip="\\\\\|\\\]"  contains=elixirDelimEscape fold
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][SCRW]\=("                              end=")"   skip="\\\\\|\\)"   contains=elixirDelimEscape fold
            
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw]{"                                end="}"   skip="\\\\\|\\}"   fold contains=@elixirStringContained,elixirRegexEscapePunctuation
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw]<"                                end=">"   skip="\\\\\|\\>"   fold contains=@elixirStringContained,elixirRegexEscapePunctuation
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw]\["                               end="\]"  skip="\\\\\|\\\]"  fold contains=@elixirStringContained,elixirRegexEscapePunctuation
            syn region elixirSigil matchgroup=elixirDelimiter start="[%~][scrw]("                                end=")"   skip="\\\\\|\\)"   fold contains=@elixirStringContained,elixirRegexEscapePunctuation
            
            " Sigils surrounded with docString
            syn region elixirSigil matchgroup=elixirDelimiter start=+[%~][SCRWscrw]\z("""\)+ end=+^\s*\zs\z1+ skip=+\\"+ fold
            syn region elixirSigil matchgroup=elixirDelimiter start=+[%~][SCRWscrw]\z('''\)+ end=+^\s*\zs\z1+ skip=+\\'+ fold
            
            " Defines
            syn keyword elixirDefine              def            nextgroup=elixirFunctionDeclaration    skipwhite skipnl
            syn keyword elixirDefine              def            nextgroup=elixirFunctionDeclaration    skipwhite skipnl
            syn keyword elixirPrivateDefine       defp           nextgroup=elixirFunctionDeclaration    skipwhite skipnl
            syn keyword elixirModuleDefine        defmodule      nextgroup=elixirModuleDeclaration      skipwhite skipnl
            syn keyword elixirProtocolDefine      defprotocol    nextgroup=elixirProtocolDeclaration    skipwhite skipnl
            syn keyword elixirImplDefine          defimpl        nextgroup=elixirImplDeclaration        skipwhite skipnl
            syn keyword elixirRecordDefine        defrecord      nextgroup=elixirRecordDeclaration      skipwhite skipnl
            syn keyword elixirPrivateRecordDefine defrecordp     nextgroup=elixirRecordDeclaration      skipwhite skipnl
            syn keyword elixirMacroDefine         defmacro       nextgroup=elixirMacroDeclaration       skipwhite skipnl
            syn keyword elixirPrivateMacroDefine  defmacrop      nextgroup=elixirMacroDeclaration       skipwhite skipnl
            syn keyword elixirDelegateDefine      defdelegate    nextgroup=elixirDelegateDeclaration    skipwhite skipnl
            syn keyword elixirOverridableDefine   defoverridable nextgroup=elixirOverridableDeclaration skipwhite skipnl
            syn keyword elixirExceptionDefine     defexception   nextgroup=elixirExceptionDeclaration   skipwhite skipnl
            syn keyword elixirCallbackDefine      defcallback    nextgroup=elixirCallbackDeclaration    skipwhite skipnl
            
            " Declarations
            syn match  elixirModuleDeclaration      "[^[:space:];#<]\+"        contained contains=elixirName nextgroup=elixirBlock     skipwhite skipnl
            syn match  elixirFunctionDeclaration    "[^[:space:];#<,()\[\]]\+" contained                     nextgroup=elixirArguments skipwhite skipnl
            syn match  elixirProtocolDeclaration    "[^[:space:];#<]\+"        contained contains=elixirName                           skipwhite skipnl
            syn match  elixirImplDeclaration        "[^[:space:];#<]\+"        contained contains=elixirName                           skipwhite skipnl
            syn match  elixirRecordDeclaration      "[^[:space:];#<]\+"        contained contains=elixirName,elixirSymbol              skipwhite skipnl
            syn match  elixirMacroDeclaration       "[^[:space:];#<,()\[\]]\+" contained                     nextgroup=elixirArguments skipwhite skipnl
            syn match  elixirDelegateDeclaration    "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration            skipwhite skipnl
            syn region elixirDelegateDeclaration    start='\['     end='\]'    contained contains=elixirFunctionDeclaration            skipwhite skipnl
            syn match  elixirOverridableDeclaration "[^[:space:];#<]\+"        contained contains=elixirName                           skipwhite skipnl
            syn match  elixirExceptionDeclaration   "[^[:space:];#<]\+"        contained contains=elixirName                           skipwhite skipnl
            syn match  elixirCallbackDeclaration    "[^[:space:];#<,()\[\]]\+" contained contains=elixirFunctionDeclaration            skipwhite skipnl
            
            syn cluster elixirDeclaration contains=elixirFunctionDeclaration,elixirModuleDeclaration,elixirProtocolDeclaration,elixirImplDeclaration,elixirRecordDeclaration,elixirMacroDeclaration,elixirDelegateDeclaration,elixirOverridableDeclaration,elixirExceptionDeclaration,elixirCallbackDeclaration
            
            hi def link elixirDefine                 Define
            hi def link elixirPrivateDefine          Define
            hi def link elixirModuleDefine           Define
            hi def link elixirProtocolDefine         Define
            hi def link elixirImplDefine             Define
            hi def link elixirRecordDefine           Define
            hi def link elixirPrivateRecordDefine    Define
            hi def link elixirMacroDefine            Define
            hi def link elixirPrivateMacroDefine     Define
            hi def link elixirDelegateDefine         Define
            hi def link elixirOverridableDefine      Define
            hi def link elixirExceptionDefine        Define
            hi def link elixirCallbackDefine         Define
            hi def link elixirFunctionDeclaration    Function
            hi def link elixirMacroDeclaration       Macro
            hi def link elixirInclude                Include
            hi def link elixirComment                Comment
            hi def link elixirTodo                   Todo
            hi def link elixirKeyword                Keyword
            hi def link elixirOperator               Operator
            hi def link elixirSymbol                 Constant
            hi def link elixirPseudoVariable         Constant
            hi def link elixirName                   Type
            hi def link elixirBoolean                Boolean
            hi def link elixirVariable               Identifier
            hi def link elixirUnusedVariable         Comment
            hi def link elixirNumber                 Number
            hi def link elixirDocString              String
            hi def link elixirSymbolInterpolated     elixirSymbol
            hi def link elixirRegex                  elixirString
            hi def link elixirRegexEscape            elixirSpecial
            hi def link elixirRegexEscapePunctuation elixirSpecial
            hi def link elixirRegexCharClass         elixirSpecial
            hi def link elixirRegexQuantifier        elixirSpecial
            hi def link elixirSpecial                Special
            hi def link elixirString                 String
            hi def link elixirSigil                  String
            hi def link elixirDelimiter              Delimiter
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/erlang.vim
            ================================================
            " Vim syntax file
            " Language:   Erlang
            " Maintainer: Oscar Hellstrm 
            " URL:        http://oscar.hellstrom.st
            " Version:    2010-08-09
            " ------------------------------------------------------------------------------
            " {{{1
            " Options:
            "
            " Erlang BIFs
            " g:erlangHighlightBif - highlight erlang built in functions (default: off)
            "
            " }}}
            " -----------------------------------------------------------------------------
            
            " Setup {{{1
            " For version 5.x: Clear all syntax items
            " For version 6.x: Quit when a syntax file was already loaded
            if version < 600
              syntax clear
            elseif exists("b:current_syntax")
              finish
            endif
            
            " Erlang is case sensitive
            syn case match
            
            " Match groups {{{1
            syn match erlangStringModifier               /\\./ contained
            syn match erlangStringModifier               /\~\%(-\?[0-9*]\+\)\?\%(\.[0-9*]\+\..\?\)\?\%(c\|f\|e\|g\|s\|w\|p\|W\|P\|B\|X\|#\|b\|+\|n\|i\)/ contained
            syn match erlangModifier                     /\$\\\?./
            
            syn match erlangInteger                      /\<\%([0-9]\+#[0-9a-fA-F]\+\|[0-9]\+\)\>/
            syn match erlangFloat                        /\<[0-9]\+\.[0-9]\+\%(e-\?[0-9]\+\)\?\>/
            
            syn keyword erlangTodo                       TODO FIXME XXX contained
            syn match erlangComment                      /%.*$/ contains=@Spell,erlangTodo
            
            syn keyword erlangKeyword                    band bor bnot bsl bsr bxor div rem xor
            syn keyword erlangKeyword                    try catch begin receive after cond fun let query
            
            syn keyword erlangConditional                case if of end
            syn keyword erlangConditional                not and or andalso orelse
            syn keyword erlangConditional                when
            
            syn keyword erlangBoolean                    true false
            
            syn keyword erlangGuard                      is_list is_alive is_atom is_binary is_bitstring is_boolean is_tuple is_number is_integer is_float is_function is_constant is_pid is_port is_reference is_record is_process_alive
            
            syn match erlangOperator                     /\/\|*\|+\|-\|++\|--/
            syn match erlangOperator                     /->\|<-\|||\||\|!\|=/
            syn match erlangOperator                     /=:=\|==\|\/=\|=\/=\|<\|>\|=<\|>=/
            syn keyword erlangOperator                   div rem
            
            syn region erlangString                      start=/"/ end=/"/ skip=/\\/ contains=@Spell,erlangStringModifier
            
            syn match erlangVariable                     /\<[A-Z_]\w*\>/
            syn match erlangAtom                         /\%(\%(^-\)\|#\)\@\%(\s*[(:]\)\@!/
            syn match erlangAtom                         /\\\@/
            syn match erlangBitSize                      /:\@<=[0-9]\+/
            
            syn match erlangBinary                      /<<\|>>/
            
            " BIFS
            syn match erlangBIF                          /\%([^:0-9A-Za-z_]\|\
            " URL:			https://github.com/vim-ruby/vim-ruby
            " Release Coordinator:	Doug Kearns 
            
            if exists("b:current_syntax")
              finish
            endif
            
            if !exists("main_syntax")
              let main_syntax = 'eruby'
            endif
            
            if !exists("g:eruby_default_subtype")
              let g:eruby_default_subtype = "html"
            endif
            
            if &filetype =~ '^eruby\.'
              let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
            elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
              let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
              let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
              if b:eruby_subtype == ''
                let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+$')
              endif
              if b:eruby_subtype == 'rhtml'
                let b:eruby_subtype = 'html'
              elseif b:eruby_subtype == 'rb'
                let b:eruby_subtype = 'ruby'
              elseif b:eruby_subtype == 'yml'
                let b:eruby_subtype = 'yaml'
              elseif b:eruby_subtype == 'js'
                let b:eruby_subtype = 'javascript'
              elseif b:eruby_subtype == 'txt'
                " Conventional; not a real file type
                let b:eruby_subtype = 'text'
              elseif b:eruby_subtype == ''
                let b:eruby_subtype = g:eruby_default_subtype
              endif
            endif
            
            if !exists("b:eruby_nest_level")
              let b:eruby_nest_level = strlen(substitute(substitute(substitute(expand("%:t"),'@','','g'),'\c\.\%(erb\|rhtml\)\>','@','g'),'[^@]','','g'))
            endif
            if !b:eruby_nest_level
              let b:eruby_nest_level = 1
            endif
            
            if exists("b:eruby_subtype") && b:eruby_subtype != ''
              exe "runtime! syntax/".b:eruby_subtype.".vim"
              unlet! b:current_syntax
            endif
            syn include @rubyTop syntax/ruby.vim
            
            syn cluster erubyRegions contains=erubyOneLiner,erubyBlock,erubyExpression,erubyComment
            
            exe 'syn region  erubyOneLiner   matchgroup=erubyDelimiter start="^%\{1,'.b:eruby_nest_level.'\}%\@!"    end="$"     contains=@rubyTop	     containedin=ALLBUT,@erubyRegions keepend oneline'
            exe 'syn region  erubyBlock      matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}%\@!-\=" end="[=-]\=%\@" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
            exe 'syn region  erubyExpression matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}=\{1,4}" end="[=-]\=%\@" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
            exe 'syn region  erubyComment    matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}-\=#"    end="[=-]\=%\@" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend'
            
            " Define the default highlighting.
            
            hi def link erubyDelimiter		PreProc
            hi def link erubyComment		Comment
            
            let b:current_syntax = 'eruby'
            
            if main_syntax == 'eruby'
              unlet main_syntax
            endif
            
            " vim: nowrap sw=2 sts=2 ts=8:
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/git.vim
            ================================================
            " Vim syntax file
            " Language:	generic git output
            " Maintainer:	Tim Pope 
            " Last Change:	2010 May 21
            
            if exists("b:current_syntax")
              finish
            endif
            
            syn case match
            syn sync minlines=50
            
            syn include @gitDiff syntax/diff.vim
            
            syn region gitHead start=/\%^/ end=/^$/
            syn region gitHead start=/\%(^commit \x\{40\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/
            
            " For git reflog and git show ...^{tree}, avoid sync issues
            syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/
            syn match gitHead /^\x\{40\} \x\{40}\t.*/
            
            syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold
            syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff
            
            syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
            syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
            syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
            syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
            
            syn match  gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite
            syn match  gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite
            syn match  gitKeyword /^Merge:/  contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite
            syn match  gitMode    /^\d\{6\}/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite
            syn match  gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
            syn match  gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
            syn match  gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite
            
            syn match  gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite
            syn match  gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite
            syn match  gitReflogMiddle /\S\+@{\d\+} (/he=e-2 nextgroup=gitIdentity
            
            syn match  gitDate      /\<\u\l\l \u\l\l \d\=\d \d\d:\d\d:\d\d \d\d\d\d [+-]\d\d\d\d/ contained
            syn match  gitDate      /-\=\d\+ [+-]\d\d\d\d\>/               contained
            syn match  gitDate      /\<\d\+ \l\+ ago\>/                    contained
            syn match  gitType      /\<\%(tag\|commit\|tree\|blob\)\>/     contained nextgroup=gitHash skipwhite
            syn match  gitStage     /\<\d\t\@=/                            contained
            syn match  gitReference /\S\+\S\@!/                            contained
            syn match  gitHash      /\<\x\{40\}\>/                         contained nextgroup=gitIdentity,gitStage,gitHash skipwhite
            syn match  gitHash      /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite
            syn match  gitHashAbbrev /\<\x\{4,40\}\>/           contained nextgroup=gitHashAbbrev skipwhite
            syn match  gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite
            
            syn match  gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite
            syn region gitEmail matchgroup=gitEmailDelimiter start=// keepend oneline contained containedin=gitIdentity
            
            syn match  gitNotesHeader /^Notes:\ze\n    /
            
            hi def link gitDateHeader        gitIdentityHeader
            hi def link gitIdentityHeader    gitIdentityKeyword
            hi def link gitIdentityKeyword   Label
            hi def link gitNotesHeader       gitKeyword
            hi def link gitReflogHeader      gitKeyword
            hi def link gitKeyword           Keyword
            hi def link gitIdentity          String
            hi def link gitEmailDelimiter    Delimiter
            hi def link gitEmail             Special
            hi def link gitDate              Number
            hi def link gitMode              Number
            hi def link gitHashAbbrev        gitHash
            hi def link gitHash              Identifier
            hi def link gitReflogMiddle      gitReference
            hi def link gitReference         Function
            hi def link gitStage             gitType
            hi def link gitType              Type
            hi def link gitDiffAdded         diffAdded
            hi def link gitDiffRemoved       diffRemoved
            
            let b:current_syntax = "git"
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/gitcommit.vim
            ================================================
            " Vim syntax file
            " Language:	git commit file
            " Maintainer:	Tim Pope 
            " Filenames:	*.git/COMMIT_EDITMSG
            " Last Change:	2012 April 7
            
            if exists("b:current_syntax")
              finish
            endif
            
            syn case match
            syn sync minlines=50
            
            if has("spell")
              syn spell toplevel
            endif
            
            syn include @gitcommitDiff syntax/diff.vim
            syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|#\)\@=/ fold contains=@gitcommitDiff
            
            syn match   gitcommitFirstLine	"\%^[^#].*"  nextgroup=gitcommitBlank skipnl
            syn match   gitcommitSummary	"^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
            syn match   gitcommitOverflow	".*" contained contains=@Spell
            syn match   gitcommitBlank	"^[^#].*" contained contains=@Spell
            syn match   gitcommitComment	"^#.*"
            syn match   gitcommitHead	"^\%(#   .*\n\)\+#$" contained transparent
            syn match   gitcommitOnBranch	"\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
            syn match   gitcommitOnBranch	"\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
            syn match   gitcommitBranch	"[^ ']\+" contained
            syn match   gitcommitNoBranch	"\%(^# \)\@<=Not currently on any branch." contained containedin=gitcommitComment
            syn match   gitcommitHeader	"\%(^# \)\@<=.*:$"	contained containedin=gitcommitComment
            syn region  gitcommitAuthor	matchgroup=gitCommitHeader start=/\%(^# \)\@<=\%(Author\|Committer\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent
            syn match   gitcommitNoChanges	"\%(^# \)\@<=No changes$" contained containedin=gitcommitComment
            
            syn region  gitcommitUntracked	start=/^# Untracked files:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUntrackedFile fold
            syn match   gitcommitUntrackedFile  "\t\@<=.*"	contained
            
            syn region  gitcommitDiscarded	start=/^# Change\%(s not staged for commit\|d but not updated\):/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold
            syn region  gitcommitSelected	start=/^# Changes to be committed:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitSelectedType fold
            syn region  gitcommitUnmerged	start=/^# Unmerged paths:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUnmergedType fold
            
            syn match   gitcommitDiscardedType	"\t\@<=[a-z][a-z ]*[a-z]: "he=e-2	contained containedin=gitcommitComment nextgroup=gitcommitDiscardedFile skipwhite
            syn match   gitcommitSelectedType	"\t\@<=[a-z][a-z ]*[a-z]: "he=e-2	contained containedin=gitcommitComment nextgroup=gitcommitSelectedFile skipwhite
            syn match   gitcommitUnmergedType	"\t\@<=[a-z][a-z ]*[a-z]: "he=e-2	contained containedin=gitcommitComment nextgroup=gitcommitUnmergedFile skipwhite
            syn match   gitcommitDiscardedFile	".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitDiscardedArrow
            syn match   gitcommitSelectedFile	".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow
            syn match   gitcommitUnmergedFile	".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow
            syn match   gitcommitDiscardedArrow	" -> " contained nextgroup=gitcommitDiscardedFile
            syn match   gitcommitSelectedArrow	" -> " contained nextgroup=gitcommitSelectedFile
            syn match   gitcommitUnmergedArrow	" -> " contained nextgroup=gitcommitSelectedFile
            
            syn match   gitcommitWarning		"\%^[^#].*: needs merge$" nextgroup=gitcommitWarning skipnl
            syn match   gitcommitWarning		"^[^#].*: needs merge$" nextgroup=gitcommitWarning skipnl contained
            syn match   gitcommitWarning		"^\%(no changes added to commit\|nothing \%(added \)\=to commit\)\>.*\%$"
            
            hi def link gitcommitSummary		Keyword
            hi def link gitcommitComment		Comment
            hi def link gitcommitUntracked		gitcommitComment
            hi def link gitcommitDiscarded		gitcommitComment
            hi def link gitcommitSelected		gitcommitComment
            hi def link gitcommitUnmerged		gitcommitComment
            hi def link gitcommitOnBranch		Comment
            hi def link gitcommitBranch		Special
            hi def link gitcommitNoBranch		gitCommitBranch
            hi def link gitcommitDiscardedType	gitcommitType
            hi def link gitcommitSelectedType	gitcommitType
            hi def link gitcommitUnmergedType	gitcommitType
            hi def link gitcommitType		Type
            hi def link gitcommitNoChanges		gitcommitHeader
            hi def link gitcommitHeader		PreProc
            hi def link gitcommitUntrackedFile	gitcommitFile
            hi def link gitcommitDiscardedFile	gitcommitFile
            hi def link gitcommitSelectedFile	gitcommitFile
            hi def link gitcommitUnmergedFile	gitcommitFile
            hi def link gitcommitFile		Constant
            hi def link gitcommitDiscardedArrow	gitcommitArrow
            hi def link gitcommitSelectedArrow	gitcommitArrow
            hi def link gitcommitUnmergedArrow	gitcommitArrow
            hi def link gitcommitArrow		gitcommitComment
            "hi def link gitcommitOverflow		Error
            hi def link gitcommitBlank		Error
            
            let b:current_syntax = "gitcommit"
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/gitconfig.vim
            ================================================
            " Vim syntax file
            " Language:	git config file
            " Maintainer:	Tim Pope 
            " Filenames:	gitconfig, .gitconfig, *.git/config
            " Last Change:	2010 May 21
            
            if exists("b:current_syntax")
              finish
            endif
            
            setlocal iskeyword+=-
            setlocal iskeyword-=_
            syn case ignore
            syn sync minlines=10
            
            syn match   gitconfigComment	"[#;].*"
            syn match   gitconfigSection	"\%(^\s*\)\@<=\[[a-z0-9.-]\+\]"
            syn match   gitconfigSection	'\%(^\s*\)\@<=\[[a-z0-9.-]\+ \+\"\%([^\\"]\|\\.\)*"\]'
            syn match   gitconfigVariable	 "\%(^\s*\)\@<=\a\k*\%(\s*\%([=#;]\|$\)\)\@=" nextgroup=gitconfigAssignment skipwhite
            syn region  gitconfigAssignment  matchgroup=gitconfigNone start=+=\s*+ skip=+\\+ end=+\s*$+ contained contains=gitconfigBoolean,gitconfigNumber,gitConfigString,gitConfigEscape,gitConfigError,gitconfigComment keepend
            syn keyword gitconfigBoolean true false yes no contained
            syn match   gitconfigNumber  "\d\+" contained
            syn region  gitconfigString  matchgroup=gitconfigDelim start=+"+ skip=+\\+ end=+"+ matchgroup=gitconfigError end=+[^\\"]\%#\@!$+ contained contains=gitconfigEscape,gitconfigEscapeError
            syn match   gitconfigError  +\\.+	 contained
            syn match   gitconfigEscape +\\[\\"ntb]+ contained
            syn match   gitconfigEscape +\\$+	 contained
            
            hi def link gitconfigComment		Comment
            hi def link gitconfigSection		Keyword
            hi def link gitconfigVariable		Identifier
            hi def link gitconfigBoolean		Boolean
            hi def link gitconfigNumber		Number
            hi def link gitconfigString		String
            hi def link gitconfigDelim		Delimiter
            hi def link gitconfigEscape		Delimiter
            hi def link gitconfigError		Error
            
            let b:current_syntax = "gitconfig"
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/gitrebase.vim
            ================================================
            " Vim syntax file
            " Language:	git rebase --interactive
            " Maintainer:	Tim Pope 
            " Filenames:	git-rebase-todo
            " Last Change:	2012 April 7
            
            if exists("b:current_syntax")
              finish
            endif
            
            syn case match
            
            syn match   gitrebaseHash   "\v<\x{7,40}>"                             contained
            syn match   gitrebaseCommit "\v<\x{7,40}>"  nextgroup=gitrebaseSummary skipwhite
            syn match   gitrebasePick   "\v^p%(ick)=>"   nextgroup=gitrebaseCommit skipwhite
            syn match   gitrebaseReword "\v^r%(eword)=>" nextgroup=gitrebaseCommit skipwhite
            syn match   gitrebaseEdit   "\v^e%(dit)=>"   nextgroup=gitrebaseCommit skipwhite
            syn match   gitrebaseSquash "\v^s%(quash)=>" nextgroup=gitrebaseCommit skipwhite
            syn match   gitrebaseFixup  "\v^f%(ixup)=>"  nextgroup=gitrebaseCommit skipwhite
            syn match   gitrebaseExec   "\v^%(x|exec)>" nextgroup=gitrebaseCommand skipwhite
            syn match   gitrebaseSummary ".*"               contains=gitrebaseHash contained
            syn match   gitrebaseCommand ".*"                                      contained
            syn match   gitrebaseComment "^#.*"             contains=gitrebaseHash
            syn match   gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite
            
            hi def link gitrebaseCommit         gitrebaseHash
            hi def link gitrebaseHash           Identifier
            hi def link gitrebasePick           Statement
            hi def link gitrebaseReword         Number
            hi def link gitrebaseEdit           PreProc
            hi def link gitrebaseSquash         Type
            hi def link gitrebaseFixup          Special
            hi def link gitrebaseExec           Function
            hi def link gitrebaseSummary        String
            hi def link gitrebaseComment        Comment
            hi def link gitrebaseSquashError    Error
            
            let b:current_syntax = "gitrebase"
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/gitsendemail.vim
            ================================================
            " Vim syntax file
            " Language:	git send-email message
            " Maintainer:	Tim Pope
            " Filenames:	*.msg.[0-9]* (first line is "From ... # This line is ignored.")
            " Last Change:	2010 May 21
            
            if exists("b:current_syntax")
              finish
            endif
            
            runtime! syntax/mail.vim
            syn case match
            
            syn match   gitsendemailComment "\%^From.*#.*"
            syn match   gitsendemailComment "^GIT:.*"
            
            hi def link gitsendemailComment Comment
            
            let b:current_syntax = "gitsendemail"
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/go.vim
            ================================================
            " Copyright 2009 The Go Authors. All rights reserved.
            " Use of this source code is governed by a BSD-style
            " license that can be found in the LICENSE file.
            "
            " go.vim: Vim syntax file for Go.
            "
            " Options:
            "   There are some options for customizing the highlighting; the recommended
            "   settings are the default values, but you can write:
            "     let OPTION_NAME = 0
            "   in your ~/.vimrc file to disable particular options. You can also write:
            "     let OPTION_NAME = 1
            "   to enable particular options. At present, all options default to on.
            "
            "   - go_highlight_array_whitespace_error
            "     Highlights white space after "[]".
            "   - go_highlight_chan_whitespace_error
            "     Highlights white space around the communications operator that don't follow
            "     the standard style.
            "   - go_highlight_extra_types
            "     Highlights commonly used library types (io.Reader, etc.).
            "   - go_highlight_space_tab_error
            "     Highlights instances of tabs following spaces.
            "   - go_highlight_trailing_whitespace_error
            "     Highlights trailing white space.
            
            " Quit when a (custom) syntax file was already loaded
            if exists("b:current_syntax")
              finish
            endif
            
            if !exists("go_highlight_array_whitespace_error")
              let go_highlight_array_whitespace_error = 1
            endif
            if !exists("go_highlight_chan_whitespace_error")
              let go_highlight_chan_whitespace_error = 1
            endif
            if !exists("go_highlight_extra_types")
              let go_highlight_extra_types = 1
            endif
            if !exists("go_highlight_space_tab_error")
              let go_highlight_space_tab_error = 1
            endif
            if !exists("go_highlight_trailing_whitespace_error")
              let go_highlight_trailing_whitespace_error = 1
            endif
            
            syn case match
            
            syn keyword     goDirective         package import
            syn keyword     goDeclaration       var const type
            syn keyword     goDeclType          struct interface
            
            hi def link     goDirective         Statement
            hi def link     goDeclaration       Keyword
            hi def link     goDeclType          Keyword
            
            " Keywords within functions
            syn keyword     goStatement         defer go goto return break continue fallthrough
            syn keyword     goConditional       if else switch select
            syn keyword     goLabel             case default
            syn keyword     goRepeat            for range
            
            hi def link     goStatement         Statement
            hi def link     goConditional       Conditional
            hi def link     goLabel             Label
            hi def link     goRepeat            Repeat
            
            " Predefined types
            syn keyword     goType              chan map bool string error
            syn keyword     goSignedInts        int int8 int16 int32 int64 rune
            syn keyword     goUnsignedInts      byte uint uint8 uint16 uint32 uint64 uintptr
            syn keyword     goFloats            float32 float64
            syn keyword     goComplexes         complex64 complex128
            
            hi def link     goType              Type
            hi def link     goSignedInts        Type
            hi def link     goUnsignedInts      Type
            hi def link     goFloats            Type
            hi def link     goComplexes         Type
            
            " Treat func specially: it's a declaration at the start of a line, but a type
            " elsewhere. Order matters here.
            syn match       goType              /\/
            syn match       goDeclaration       /^func\>/
            
            " Predefined functions and values
            syn keyword     goBuiltins          append cap close complex copy delete imag len
            syn keyword     goBuiltins          make new panic print println real recover
            syn keyword     goConstants         iota true false nil
            
            hi def link     goBuiltins          Keyword
            hi def link     goConstants         Keyword
            
            " Comments; their contents
            syn keyword     goTodo              contained TODO FIXME XXX BUG
            syn cluster     goCommentGroup      contains=goTodo
            syn region      goComment           start="/\*" end="\*/" contains=@goCommentGroup,@Spell
            syn region      goComment           start="//" end="$" contains=@goCommentGroup,@Spell
            
            hi def link     goComment           Comment
            hi def link     goTodo              Todo
            
            " Go escapes
            syn match       goEscapeOctal       display contained "\\[0-7]\{3}"
            syn match       goEscapeC           display contained +\\[abfnrtv\\'"]+
            syn match       goEscapeX           display contained "\\x\x\{2}"
            syn match       goEscapeU           display contained "\\u\x\{4}"
            syn match       goEscapeBigU        display contained "\\U\x\{8}"
            syn match       goEscapeError       display contained +\\[^0-7xuUabfnrtv\\'"]+
            
            hi def link     goEscapeOctal       goSpecialString
            hi def link     goEscapeC           goSpecialString
            hi def link     goEscapeX           goSpecialString
            hi def link     goEscapeU           goSpecialString
            hi def link     goEscapeBigU        goSpecialString
            hi def link     goSpecialString     Special
            hi def link     goEscapeError       Error
            
            " Strings and their contents
            syn cluster     goStringGroup       contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU,goEscapeError
            syn region      goString            start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@goStringGroup
            syn region      goRawString         start=+`+ end=+`+
            
            hi def link     goString            String
            hi def link     goRawString         String
            
            " Characters; their contents
            syn cluster     goCharacterGroup    contains=goEscapeOctal,goEscapeC,goEscapeX,goEscapeU,goEscapeBigU
            syn region      goCharacter         start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@goCharacterGroup
            
            hi def link     goCharacter         Character
            
            " Regions
            syn region      goBlock             start="{" end="}" transparent fold
            syn region      goParen             start='(' end=')' transparent
            
            " Integers
            syn match       goDecimalInt        "\<\d\+\([Ee]\d\+\)\?\>"
            syn match       goHexadecimalInt    "\<0x\x\+\>"
            syn match       goOctalInt          "\<0\o\+\>"
            syn match       goOctalError        "\<0\o*[89]\d*\>"
            
            hi def link     goDecimalInt        Integer
            hi def link     goHexadecimalInt    Integer
            hi def link     goOctalInt          Integer
            hi def link     Integer             Number
            
            " Floating point
            syn match       goFloat             "\<\d\+\.\d*\([Ee][-+]\d\+\)\?\>"
            syn match       goFloat             "\<\.\d\+\([Ee][-+]\d\+\)\?\>"
            syn match       goFloat             "\<\d\+[Ee][-+]\d\+\>"
            
            hi def link     goFloat             Float
            
            " Imaginary literals
            syn match       goImaginary         "\<\d\+i\>"
            syn match       goImaginary         "\<\d\+\.\d*\([Ee][-+]\d\+\)\?i\>"
            syn match       goImaginary         "\<\.\d\+\([Ee][-+]\d\+\)\?i\>"
            syn match       goImaginary         "\<\d\+[Ee][-+]\d\+i\>"
            
            hi def link     goImaginary         Number
            
            " Spaces after "[]"
            if go_highlight_array_whitespace_error != 0
              syn match goSpaceError display "\(\[\]\)\@<=\s\+"
            endif
            
            " Spacing errors around the 'chan' keyword
            if go_highlight_chan_whitespace_error != 0
              " receive-only annotation on chan type
              syn match goSpaceError display "\(<-\)\@<=\s\+\(chan\>\)\@="
              " send-only annotation on chan type
              syn match goSpaceError display "\(\/
              syn match goExtraType /\/
              syn match goExtraType /\/
              syn match goExtraType /\/
            endif
            
            " Space-tab error
            if go_highlight_space_tab_error != 0
              syn match goSpaceError display " \+\t"me=e-1
            endif
            
            " Trailing white space error
            if go_highlight_trailing_whitespace_error != 0
              syn match goSpaceError display excludenl "\s\+$"
            endif
            
            hi def link     goExtraType         Type
            hi def link     goSpaceError        Error
            
            " Search backwards for a global declaration to start processing the syntax.
            "syn sync match goSync grouphere NONE /^\(const\|var\|type\|func\)\>/
            
            " There's a bug in the implementation of grouphere. For now, use the
            " following as a more expensive/less precise workaround.
            syn sync minlines=500
            
            let b:current_syntax = "go"
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/godoc.vim
            ================================================
            " Copyright 2011 The Go Authors. All rights reserved.
            " Use of this source code is governed by a BSD-style
            " license that can be found in the LICENSE file.
            
            if exists("b:current_syntax")
              finish
            endif
            
            syn case match
            syn match  godocTitle "^\([A-Z][A-Z ]*\)$"
            
            command -nargs=+ HiLink hi def link 
            
            HiLink godocTitle Title
            
            delcommand HiLink
            
            let b:current_syntax = "godoc"
            
            " vim:ts=4 sts=2 sw=2:
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/haml.vim
            ================================================
            " Vim syntax file
            " Language:	Haml
            " Maintainer:	Tim Pope 
            " Filenames:	*.haml
            " Last Change:	2010 Aug 09
            
            if exists("b:current_syntax")
              finish
            endif
            
            if !exists("main_syntax")
              let main_syntax = 'haml'
            endif
            let b:ruby_no_expensive = 1
            
            runtime! syntax/html.vim
            unlet! b:current_syntax
            silent! syn include @hamlSassTop syntax/sass.vim
            unlet! b:current_syntax
            syn include @hamlRubyTop syntax/ruby.vim
            
            syn case match
            
            syn region  rubyCurlyBlock   start="{" end="}" contains=@hamlRubyTop contained
            syn cluster hamlRubyTop add=rubyCurlyBlock
            
            syn cluster hamlComponent    contains=hamlAttributes,hamlAttributesHash,hamlClassChar,hamlIdChar,hamlObject,hamlDespacer,hamlSelfCloser,hamlRuby,hamlPlainChar,hamlInterpolatable
            syn cluster hamlEmbeddedRuby contains=hamlAttributesHash,hamlObject,hamlRuby,hamlRubyFilter
            syn cluster hamlTop          contains=hamlBegin,hamlPlainFilter,hamlRubyFilter,hamlSassFilter,hamlComment,hamlHtmlComment
            
            syn match   hamlBegin "^\s*\%([<>]\|&[^=~ ]\)\@!" nextgroup=hamlTag,hamlClassChar,hamlIdChar,hamlRuby,hamlPlainChar,hamlInterpolatable
            
            syn match   hamlTag        "%\w\+\%(:\w\+\)\=" contained contains=htmlTagName,htmlSpecialTagName nextgroup=@hamlComponent
            syn region  hamlAttributes     matchgroup=hamlAttributesDelimiter start="(" end=")" contained contains=htmlArg,hamlAttributeString,hamlAttributeVariable,htmlEvent,htmlCssDefinition nextgroup=@hamlComponent
            syn region  hamlAttributesHash matchgroup=hamlAttributesDelimiter start="{" end="}" contained contains=@hamlRubyTop nextgroup=@hamlComponent
            syn region  hamlObject         matchgroup=hamlObjectDelimiter     start="\[" end="\]" contained contains=@hamlRubyTop nextgroup=@hamlComponent
            syn match   hamlDespacer "[<>]" contained nextgroup=hamlDespacer,hamlSelfCloser,hamlRuby,hamlPlainChar,hamlInterpolatable
            syn match   hamlSelfCloser "/" contained
            syn match   hamlClassChar "\." contained nextgroup=hamlClass
            syn match   hamlIdChar "#{\@!" contained nextgroup=hamlId
            syn match   hamlClass "\%(\w\|-\)\+" contained nextgroup=@hamlComponent
            syn match   hamlId    "\%(\w\|-\)\+" contained nextgroup=@hamlComponent
            syn region  hamlDocType start="^\s*!!!" end="$"
            
            syn region  hamlRuby   matchgroup=hamlRubyOutputChar start="[!&]\==\|\~" skip=",\s*$" end="$" contained contains=@hamlRubyTop keepend
            syn region  hamlRuby   matchgroup=hamlRubyChar       start="-"           skip=",\s*$" end="$" contained contains=@hamlRubyTop keepend
            syn match   hamlPlainChar "\\" contained
            syn region hamlInterpolatable matchgroup=hamlInterpolatableChar start="!\===\|!=\@!" end="$" keepend contained contains=hamlInterpolation,hamlInterpolationEscape,@hamlHtmlTop
            syn region hamlInterpolatable matchgroup=hamlInterpolatableChar start="&==\|&=\@!"   end="$" keepend contained contains=hamlInterpolation,hamlInterpolationEscape
            syn region hamlInterpolation matchgroup=hamlInterpolationDelimiter start="#{" end="}" contains=@hamlRubyTop containedin=javascriptStringS,javascriptStringD
            syn match  hamlInterpolationEscape "\\\@" contained contains=@hamlRubyTop
            
            syn region  hamlAttributeString start=+\%(=\s*\)\@<='+ skip=+\%(\\\\\)*\\'+ end=+'+ contains=hamlInterpolation,hamlInterpolationEscape
            syn region  hamlAttributeString start=+\%(=\s*\)\@<="+ skip=+\%(\\\\\)*\\"+ end=+"+ contains=hamlInterpolation,hamlInterpolationEscape
            syn match   hamlAttributeVariable "\%(=\s*\)\@<=\%(@@\=\|\$\)\=\w\+" contained
            
            syn match   hamlHelper  "\[^]]*]" contained containedin=hamlHtmlComment
            
            hi def link hamlSelfCloser             Special
            hi def link hamlDespacer               Special
            hi def link hamlClassChar              Special
            hi def link hamlIdChar                 Special
            hi def link hamlTag                    Special
            hi def link hamlClass                  Type
            hi def link hamlId                     Identifier
            hi def link hamlPlainChar              Special
            hi def link hamlInterpolatableChar     hamlRubyChar
            hi def link hamlRubyOutputChar         hamlRubyChar
            hi def link hamlRubyChar               Special
            hi def link hamlInterpolationDelimiter Delimiter
            hi def link hamlInterpolationEscape    Special
            hi def link hamlAttributeString        String
            hi def link hamlAttributeVariable      Identifier
            hi def link hamlDocType                PreProc
            hi def link hamlFilter                 PreProc
            hi def link hamlAttributesDelimiter    Delimiter
            hi def link hamlObjectDelimiter        Delimiter
            hi def link hamlHelper                 Function
            hi def link hamlHtmlComment            hamlComment
            hi def link hamlComment                Comment
            hi def link hamlIEConditional          SpecialComment
            hi def link hamlError                  Error
            
            let b:current_syntax = "haml"
            
            if main_syntax == "haml"
              unlet main_syntax
            endif
            
            " vim:set sw=2:
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/haskell.vim
            ================================================
            " Vim syntax file
            " Language: Haskell
            " Author: Tristan Ravitch
            " Maintainer: Tristan Ravitch
            " Version: 0.0.1
            
            if version < 600
              syntax clear
            elseif exists('b:current_syntax')
              finish
            endif
            
            syn sync minlines=50 maxlines=200
            
            " These basic lexical definitions are taken from the orignal haskell syntax
            " description from vim 7.3.
            syn match  hsSpecialChar      contained "\\\([0-9]\+\|o[0-7]\+\|x[0-9a-fA-F]\+\|[\"\\'&\\abfnrtv]\|^[A-Z^_\[\\\]]\)"
            syn match  hsSpecialChar      contained "\\\(NUL\|SOH\|STX\|ETX\|EOT\|ENQ\|ACK\|BEL\|BS\|HT\|LF\|VT\|FF\|CR\|SO\|SI\|DLE\|DC1\|DC2\|DC3\|DC4\|NAK\|SYN\|ETB\|CAN\|EM\|SUB\|ESC\|FS\|GS\|RS\|US\|SP\|DEL\)"
            syn match  hsSpecialCharError contained "\\&\|'''\+"
            syn region hsString           start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=hsSpecialChar
            syn match  hsCharacter        "[^a-zA-Z0-9_']'\([^\\]\|\\[^']\+\|\\'\)'"lc=1 contains=hsSpecialChar,hsSpecialCharError
            syn match  hsCharacter        "^'\([^\\]\|\\[^']\+\|\\'\)'" contains=hsSpecialChar,hsSpecialCharError
            syn match  hsNumber           "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>"
            syn match  hsFloat            "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>"
            
            " This case matches the names of types and constructors: names beginning with
            " a capital letter.  Note that this also handles the case of @M.lookup@ where
            " M is a qualified import.  There is a big negative lookbehind assertion here
            " so that we don't highlight import and module statements oddly. 
            syn match hsTypeName "\(^import\s.*\|^module\s.*\)\@\|-->\|-\(-\)\@!\|[%\~\&\*/\$\^|@:+=#!\?]\+"
            " A bare . is an operator (but not surrounded by alnum chars)
            syn match hsOperator "\s\@<=\.\s\@="
            " . is also an operator if adjacent to some other operator char
            syn match hsOperator "[%\~\&\*\$\^|@:+=#!\?]\+\.[%\~\&\*\$\^|@:+<\.!>=#!\?]*"
            syn match hsOperator "[%\~\&\*\$\^|@:+=#!\?]*\.[%\~\&\*\$\^|@:+\.=#!\?]\+"
            " Include support for infix functions as operators
            syn match hsOperator "`[a-zA-Z0-9\.]\+`"
            
            " Highlight function/value names in type signatures.  Looks ahead to find a ::
            " after a name.  This allows whitespace before the name so that it can match
            " in a 'where,' but it won't match local type annotations on random little
            " things.
            syn match hsFunctionList "^\s*\([a-z][a-zA-Z0-9']*[[:space:]\n,]\+\)*[a-z][a-zA-Z0-9']*[[:space:]\n]*::" contains=hsFunction
            syn match hsFunction "\s*[a-z][a-zA-Z0-9']*[[:space:]\n]*\(::\|,\)\@=" contained
            " Also support the style where the first where binding is on the same line as
            " the where keyword.
            syn match hsFunction "\(^\s\+where\s\+\)\@<=[a-z][a-zA-Z0-9']*\(\s*::\)\@="
            
            " FIXME Ignoring proc for now, also mdo and rec
            
            " Give undefined a bit of special treatment
            syn keyword hsScary undefined
            
            " C Preprocessor stuff
            syn match hsCPP '\(^\s*\)\@<=#\(warning\|pragma\|error\)\W\@='
            syn match hsCPPCond '\(^\s*\)\@<=#\(if\|ifdef\|elif\)\W\@='
            syn match hsCPPCond '\(^\s*\)\@<=#\(endif\|else\)\(\s*$\|\W\)\@='
            syn match hsCPPInclude '\(^\s*\)\@<=#include\W\@='
            syn match hsCPPDefine '\(^\s*\)\@<=#define\W\@='
            syn match hsCPPDefined '\(^\s*.*\W\)\@<=defined(\w\+)'
            
            if version >= 508 || !exists('did_hs_syntax_inits')
              if version < 508
                let did_hs_syntax_inits = 1
                command -nargs=+ HiLink hi link 
              else
                command -nargs=+ HiLink hi def link 
              endif
            
              " CPP
              HiLink hsCPP PreProc
              HiLink hsCPPCond PreCondit
              HiLink hsCPPInclude Include
              HiLink hsCPPDefine Define
              HiLink hsCPPDefined PreProc
            
              " Comments
              HiLink hsLineComment Comment
              HiLink hsBlockComment Comment
              HiLink hsPragma Comment
              HiLink hsHaddockComment SpecialComment
              HiLink hsHaddockSection SpecialComment
            
              HiLink hsKeyword Keyword
              HiLink hsConditional Conditional
              HiLink hsImport Include
              HiLink hsTypeDecls Keyword
            
              HiLink hsFIXME Todo
            
              HiLink hsOperator Operator
            
              HiLink hsModuleQualifier StorageClass
            
              HiLink hsFunction Function
              HiLink hsTypeName Type
            
              " Literals
              HiLink hsSpecialChar SpecialChar
              HiLink hsFloat Float
              HiLink hsNumber Number
              HiLink hsCharacter Character
              HiLink hsString String
            
              HiLink hsScary Todo
            
              delcommand HiLink
            endif
            
            let b:current_syntax = "haskell"
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/html/aria.vim
            ================================================
            " Vim syntax file
            " Language:	    WAI-ARIA
            " Maintainer:	othree 
            " URL:		    http://github.com/othree/html5-syntax.vim
            " Last Change:  2010-09-25
            " License:      MIT
            " Changes:      update to Draft 16 September 2010
            
            setlocal iskeyword+=-
            
            " WAI-ARIA States and Properties
            " http://www.w3.org/TR/wai-aria/states_and_properties
            syn keyword  htmlArg contained role
            
            " Global States and Properties
            syn keyword  htmlArg contained aria-atomic aria-busy aria-controls aria-describedby
            syn keyword  htmlArg contained aria-disabled aria-dropeffect aria-flowto aria-grabbed
            syn keyword  htmlArg contained aria-haspopup aria-hidden aria-invalid aria-label
            syn keyword  htmlArg contained aria-labelledby aria-live aria-owns aria-relevant
            
            " Widget Attributes
            syn keyword  htmlArg contained aria-autocomplete aria-checked aria-disabled aria-expanded
            syn keyword  htmlArg contained aria-haspopup aria-hidden aria-invalid aria-label
            syn keyword  htmlArg contained aria-level aria-multiline aria-multiselectable aria-orientation
            syn keyword  htmlArg contained aria-pressed aria-readonly aria-required aria-selected
            syn keyword  htmlArg contained aria-sort aria-valuemax aria-valuemin aria-valuenow aria-valuetext
            
            " Live Region Attributes
            syn keyword  htmlArg contained aria-atomic aria-busy aria-live aria-relevant
            
            " Drag-and-Drop attributes
            syn keyword  htmlArg contained aria-dropeffect aria-grabbed
            
            " Relationship Attributes
            syn keyword  htmlArg contained aria-activedescendant aria-controls aria-describedby aria-flowto
            syn keyword  htmlArg contained aria-labelledby aria-owns aria-posinset aria-setsize
            
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/html/rdfa.vim
            ================================================
            " Vim syntax file
            " Language:     RDFa
            " Maintainer:   othree 
            " URL:          http://github.com/othree/html5-syntax.vim
            " Last Change:  2012-06-08
            " License:      MIT
            " Changes:      update to Rec 07 June 2012
            
            " RDFa
            " http://www.w3.org/TR/rdfa-syntax/#s_syntax
            syn keyword htmlArg contained about content datatype href inlist prefix property rel resource rev src typeof vocab
            
            
            ================================================
            FILE: .vim/bundle/vim-polyglot/syntax/html.vim
            ================================================
            " Vim syntax file
            " Language:	HTML (version 5)
            " Maintainer:	Rodrigo Machado 
            " URL:		http://rm.blog.br/vim/syntax/html.vim
            " Last Change:  2009 Aug 19
            " License:      Public domain
            "               (but let me know if you like :) )
            "
            " Note: This file just adds the new tags from HTML 5
            "       and don't replace default html.vim syntax file
            "
            " Modified:     othree 
            " Changes:      update to Draft 13 January 2011
            "               add complete new attributes
            "               add microdata Attributes
            "               add bdi element
            " Modified:     htdebeer 
            " Changes:      add common SVG elements and attributes for inline SVG
            
            " HTML 5 tags
            syn keyword htmlTagName contained article aside audio canvas command
            syn keyword htmlTagName contained datalist details dialog embed figcaption figure footer
            syn keyword htmlTagName contained header hgroup keygen main mark meter menu nav output
            syn keyword htmlTagName contained progress ruby rt rp section source summary time track video data
            syn keyword htmlTagName contained template content shadow
            syn keyword htmlTagName contained wbr bdi
            
            " SVG tags
            " http://www.w3.org/TR/SVG/
            " as found in http://www.w3.org/TR/SVG/eltindex.html
            syn keyword htmlTagName contained svg 
            syn keyword htmlTagName contained altGlyph altGlyphDef altGlyphItem 
            syn keyword htmlTagName contained animate animateColor animateMotion animateTransform 
            syn keyword htmlTagName contained circle ellipse rect line polyline polygon image path
            syn keyword htmlTagName contained clipPath color-profile cursor 
            syn keyword htmlTagName contained defs desc g symbol view use switch foreignObject
            syn keyword htmlTagName contained filter feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence 
            syn keyword htmlTagName contained font font-face font-face-format font-face-name font-face-src font-face-uri 
            syn keyword htmlTagName contained glyph glyphRef hkern 
            syn keyword htmlTagName contained linearGradient marker mask pattern radialGradient set stop
            syn keyword htmlTagName contained missing-glyph mpath 
            syn keyword htmlTagName contained text textPath tref tspan vkern
            
            " Custom Element
            syn match htmlTagName contained "\<[a-z_]\+\(\-[a-z_]\+\)\+\>"
            
            " HTML 5 arguments
            " Core Attributes
            syn keyword htmlArg contained accesskey class contenteditable contextmenu dir 
            syn keyword htmlArg contained draggable hidden id is lang spellcheck style tabindex title translate
            " Event-handler Attributes
            syn keyword htmlArg contained onabort onblur oncanplay oncanplaythrough onchange
            syn keyword htmlArg contained onclick oncontextmenu ondblclick ondrag ondragend ondragenter ondragleave ondragover 
            syn keyword htmlArg contained ondragstart ondrop ondurationchange onemptied onended onerror onfocus onformchange 
            syn keyword htmlArg contained onforminput oninput oninvalid onkeydown onkeypress onkeyup onload onloadeddata 
            syn keyword htmlArg contained onloadedmetadata onloadstart onmousedown onmousemove onmouseout onmouseover onmouseup
            syn keyword htmlArg contained onmousewheel onpause onplay onplaying onprogress onratechange onreadystatechange 
            syn keyword htmlArg contained onscroll onseeked onseeking onselect onshow onstalled onsubmit onsuspend ontimeupdate 
            syn keyword htmlArg contained onvolumechange onwaiting
            " XML Attributes
            syn keyword htmlArg contained xml:lang xml:space xml:base xmlns
            " new features
            " 
            syn keyword htmlArg contained onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload 
            syn keyword htmlArg contained onmessage onoffline ononline onpopstate onredo onresize onstorage onundo onunload
            "