[
  {
    "path": ".gitignore",
    "content": "*~\n.DS_Store\n.cache\n.netrwhist\n.rake_tasks~\n.undo/*\nautoload/\nbin/elm-format\nbundle/\nftplugin/\ngobin/\ngopath/\ngotags/\nplugged/\nsessions/\ntags\nview/\n.netrwbook\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"scripts/shell-colors-vim-hybrid\"]\n\tpath = scripts/shell-colors-vim-hybrid\n\turl = https://gist.github.com/0d27cb34e81af344d742.git\n[submodule \"scripts/base16-shell\"]\n\tpath = scripts/base16-shell\n\turl = https://github.com/chriskempson/base16-shell.git\n"
  },
  {
    "path": ".travis.yml",
    "content": "dist: trusty\nsudo: false\n\nenv:\n  global:\n    - DEPS=$HOME/deps\n    - PATH=$DEPS/bin:$PATH\n\naddons: { apt: { packages: [python3-dev] } }\n\nmatrix:\n  include:\n    - env: ENV=neovim\n    - env: ENV=vim8\n\ninstall: |\n  pyenv global 3.6\n  mkdir -p ${DEPS}/bin\n  pip3 install vim-vint\n\n  if [ \"$ENV\" == \"vim8\" ]; then\n    C_OPTS=\"--prefix=$DEPS --with-features=huge --disable-gui \"\n    case \"$ENV\" in\n      python)\n        C_OPTS+=--enable-pythoninterp\n        ;;\n      python3)\n        C_OPTS+=--enable-python3interp\n        ;;\n      ruby*)\n        C_OPTS+=--enable-rubyinterp\n        ;;\n    esac\n    git clone --depth 1 https://github.com/vim/vim\n    cd vim\n    ./configure $C_OPTS\n    make\n    make install\n    cd -\n  elif [ \"$ENV\" == \"neovim\" ]; then\n    eval \"$(curl -Ss https://raw.githubusercontent.com/neovim/bot-ci/master/scripts/travis-setup.sh) nightly-x64\" ||\n    pip3 install neovim\n    ln -s $(which nvim) ${DEPS}/bin/vim\n  fi\n\nscript: scripts/test\n"
  },
  {
    "path": ".vintrc.yaml",
    "content": "cmdargs:\n  severity: style_problem\n  color: true\n  env:\n    neovim: true\n\npolicies:\n  # this doesn't seem to work very reliably\n  ProhibitEncodingOptionAfterScriptEncoding:\n    enabled: false\n"
  },
  {
    "path": "CNAME",
    "content": "vimfiles.luan.sh"
  },
  {
    "path": "Plug.vim",
    "content": "call plug#begin('~/.vim/plugged')\n\n\" Defaults {{{\nPlug 'tpope/vim-sensible'\n\" }}}\n\n\" Navigation {{{\n\" Displays tags in a window, ordered by scope\nPlug 'majutsushi/tagbar'\n\n\" A tree explorer plugin for vim\nPlug 'scrooloose/nerdtree'\n\n\" combine with netrw to create a delicious salad dressing\nPlug 'tpope/vim-vinegar'\n\n\" project configuration via 'projections'\nPlug 'tpope/vim-projectionist'\n\n\" A command-line fuzzy finder written in Go\nlet g:fzf_command_prefix = 'FZF'\nPlug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }\nPlug 'junegunn/fzf.vim'\n\n\" Active fork of kien/ctrlp.vim. Fuzzy file, buffer, mru, tag, etc finder.\nPlug 'ctrlpvim/ctrlp.vim'\n\" }}}\n\n\" UI Additions {{{\n\" Colors {{{\nPlug 'dolio/vim-hybrid'\nPlug 'morhetz/gruvbox'\nPlug 'chriskempson/base16-vim'\nPlug 'mhartington/oceanic-next'\nPlug 'ayu-theme/ayu-vim'\n\" }}}\n\n\" lean & mean status/tabline for vim that's light as air\nPlug 'vim-airline/vim-airline'\nPlug 'vim-airline/vim-airline-themes'\n\n\" Show a diff via Vim sign column.\nPlug 'mhinz/vim-signify'\n\n\" Plugin to toggle, display and navigate marks\nPlug 'kshenoy/vim-signature'\n\n\" Better whitespace highlighting for Vim\nPlug 'ntpeters/vim-better-whitespace'\n\n\" Toggle the cursor shape in the terminal for Vim.\nPlug 'jszakmeister/vim-togglecursor'\n\" }}}\n\n\" Commands {{{\nfunction! InstallVipe(info)\n  if a:info.status ==# 'installed' || a:info.force\n    if has('unix')\n      let s:uname = system('uname -s')\n      if s:uname =~? 'Darwin'\n        silent !rm -f /usr/local/bin/vipe\n        silent !ln -s `pwd`/vipe /usr/local/bin || true\n      else\n        silent !ln -s `pwd`/vipe ~/bin || true\n      endif\n    endif\n  endif\nendfunction\n\nfunction! InstallVimProc(info)\n  if a:info.status ==# 'installed' || a:info.force\n    if has('unix')\n      let s:uname = system('uname -s')\n      if s:uname =~? 'Darwin'\n        silent !make -f make_mac.mak\n      elseif s:uname =~? 'Linux'\n        silent !make\n      else\n        silent !gmake\n      endif\n    elseif has('win32unix')\n      silent !make -f make_cygwin.mak\n    elseif has('win32')\n      silent !tools\\update-dll-mingw\n    endif\n  endif\nendfunction\n\n\" asynchronous process manager; run :VimProcBang to run a command and echo the results\nPlug 'Shougo/vimproc.vim', { 'do': function('InstallVimProc') }\n\n\" comment stuff out (via leader-/)\nPlug 'tomtom/tcomment_vim'\n\n\" quoting/parenthesizing made simple; e.g. ysiw) to wrap word in parens\nPlug 'tpope/vim-surround'\n\n\" a Git wrapper so awesome, it should be illegal; :Gblame, etc\nPlug 'tpope/vim-fugitive'\nPlug 'tpope/vim-rhubarb'\n\n\" easily search for, substitute, and abbreviate multiple variants of a word\nPlug 'tpope/vim-abolish'\n\n\" Vim sugar for the UNIX shell commands that need it the most; e.g. :Find, :Wall\nPlug 'tpope/vim-eunuch'\n\n\" Run a command over every entry in the quickfix list (:Cdo) or location list (:Ldo).\nPlug 'Peeja/vim-cdo'\n\n\" Vim script for text filtering and alignment; e.g. :Tabularize /,\nPlug 'godlygeek/tabular'\n\n\" Vim plugin for the Perl module / CLI script 'ack'\nPlug 'mileszs/ack.vim'\n\n\" Send test commands to a pipe.\nPlug 'luan/vipe', { 'do': function('InstallVipe') }\n\n\" Asynchronous Lint Engine\nPlug 'w0rp/ale'\n\n\" Functions to toggle the [Location List] and the [Quickfix List] windows.\nPlug 'milkypostman/vim-togglelist'\n\n\" True Sublime Text style multiple selections for Vim\nPlug 'terryma/vim-multiple-cursors'\n\n\" Add emacs/bash/cocoa key bindings to vim, in insert and command-line modes.\nPlug 'maxbrunsfeld/vim-emacs-bindings'\n\n\" The ultimate undo history visualizer for VIM\nPlug 'mbbill/undotree'\n\n\" Distraction-free writing in Vim\nPlug 'junegunn/goyo.vim'\n\n\" All the world's indeed a stage and we are merely players\nPlug 'junegunn/limelight.vim'\n\n\" Make ^a and ^x work properly with dates\nPlug 'tpope/vim-speeddating'\n\" }}}\n\n\" Automatic Helpers {{{\n\" wisely add \"end\" in ruby, endfunction/endif/more in vim script, etc\nPlug 'tpope/vim-endwise'\n\n\" enable repeating supported plugin maps with '.'\nPlug 'tpope/vim-repeat'\n\n\" automatically adjusts 'shiftwidth' and 'expandtab' heuristically based on the current file\nPlug 'tpope/vim-sleuth'\n\n\" pairs of handy bracket mappings; e.g. [<Space> and ]<Space> add newlines before and after the cursor line\nPlug 'tpope/vim-unimpaired'\n\n\" Reorder delimited items\nPlug 'machakann/vim-swap'\n\n\" Simplifies the transition between multiline and single-line code\nPlug 'AndrewRadev/splitjoin.vim'\n\n\" Dark powered asynchronous completion framework for neovim/Vim8\nif has('nvim')\n  Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }\nelse\n  Plug 'Shougo/deoplete.nvim'\n  Plug 'roxma/nvim-yarp'\n  Plug 'roxma/vim-hug-neovim-rpc'\nendif\nPlug 'zchee/deoplete-clang' \" C/C++\nPlug 'zchee/deoplete-go' \" Golang\nPlug 'sebastianmarkow/deoplete-rust' \" Rust\nPlug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern' } \" Javascript\nPlug 'Shougo/neco-syntax'\nPlug 'Shougo/neco-vim'\nlet g:deoplete#enable_at_startup = 1\n\n\" Clang based syntax highlighting for Neovim\nPlug 'arakashic/chromatica.nvim'\n\nif !has('nvim') || $ALL_PLUGINS ==# 'true'\n  Plug 'roxma/vim-hug-neovim-rpc'\nendif\n\n\" Provide easy code formatting in Vim by integrating existing code formatters.\nPlug 'Chiel92/vim-autoformat'\n\n\" displays information in echo area from echodoc plugin.\nPlug 'Shougo/echodoc.vim'\n\n\" Make Vim persist editing state without fuss\nPlug 'kopischke/vim-stay'\n\n\" Make Vim handle line and column numbers in file names with a minimum of fuss\nPlug 'kopischke/vim-fetch'\n\n\" Speed up Vim by updating folds only when called-for.\nPlug 'Konfekt/FastFold'\n\" }}}\n\n\" Text objects {{{\n\" allows you to configure % to match more than just single characters\nPlug 'vim-scripts/matchit.zip'\n\n\" Create your own text objects\nPlug 'kana/vim-textobj-user'\n\n\" Underscore text-object for Vim\nPlug 'lucapette/vim-textobj-underscore'\n\n\" custom text object for selecting ruby blocks\nPlug 'nelstrom/vim-textobj-rubyblock'\n\n\" A convenient text object for last pasted text\nPlug 'saaguero/vim-textobj-pastedtext'\n\n\"Text objects for functions\nPlug 'kana/vim-textobj-function'\n\n\" A Vim text object for ERB blocks.\nPlug 'whatyouhide/vim-textobj-erb'\n\n\" Vim plugin that provides additional text objects\nPlug 'wellle/targets.vim'\n\n\" Text objects for foldings\nPlug 'kana/vim-textobj-fold'\n\" }}}'\n\n\" Snippets {{{\n\"UltiSnips - The ultimate snippet solution for Vim. Send pull requests to SirVer/ultisnips!\nif has('python') || has('python3')\n  Plug 'SirVer/ultisnips'\n  Plug 'honza/vim-snippets'\nendif\n\" }}}\n\n\" Language specific {{{\n\" Ruby {{{\nPlug 'tpope/vim-rails', { 'for': ['ruby', 'rake'] }\nPlug 'tpope/vim-rake', { 'for': ['ruby', 'rake'] }\nPlug 'tpope/vim-bundler', { 'for': ['ruby', 'rake'] }\nPlug 'ecomba/vim-ruby-refactoring', { 'for': ['ruby', 'rake'] }\nPlug 'tpope/vim-cucumber', { 'for': ['cucumber'] }\n\" }}}\n\n\" Clojure {{{\nPlug 'tpope/vim-classpath'\nPlug 'tpope/vim-fireplace', { 'for': 'clojure' }\nPlug 'tpope/vim-salve', { 'for': 'clojure' }\nPlug 'guns/vim-sexp', { 'for': 'clojure' }\nPlug 'tpope/vim-sexp-mappings-for-regular-people', { 'for': 'clojure' }\n\" }}}\n\n\" Go {{{\nPlug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }\n\" }}}\n\n\" Markdown {{{\nPlug 'tpope/vim-markdown', { 'for': 'markdown' }\nPlug 'shime/vim-livedown', { 'for': 'markdown' }\n\" }}}\n\n\" JavaScript {{{\nPlug 'othree/yajs.vim'\nPlug 'othree/es.next.syntax.vim'\nPlug 'othree/javascript-libraries-syntax.vim'\nPlug 'ternjs/tern_for_vim', {'do': 'npm install'}\nPlug 'mxw/vim-jsx'\n\" }}}\n\n\" TypeScript {{{\nPlug 'leafgarland/typescript-vim'\n\" }}}\n\n\" Vue {{{\nPlug 'posva/vim-vue', { 'for': 'vue' }\n\" }}}\n\n\" CSS / HTML {{{\nPlug 'othree/html5.vim'\nPlug 'mattn/emmet-vim'\nPlug 'cakebaker/scss-syntax.vim'\nPlug 'hail2u/vim-css3-syntax'\nPlug 'gregsexton/MatchTag'\n\" }}}\n\n\" VimL {{{\nPlug 'ynkdir/vim-vimlparser', { 'for': 'vim' }\nPlug 'syngan/vim-vimlint', { 'for': 'vim' }\n\" }}}\n\n\" Fish {{{\nPlug 'dag/vim-fish', { 'for': 'fish' }\n\" }}}\n\n\" Elm {{{\nPlug 'elmcast/elm-vim', { 'for': 'elm' }\n\" }}}\n\n\" Rust {{{\nPlug 'rust-lang/rust.vim', { 'for': 'rust' }\n\" }}}\n\n\" Misc {{{\nPlug 'PotatoesMaster/i3-vim-syntax'\nPlug 'keith/tmux.vim'\nPlug 'kurayama/systemd-vim-syntax'\nPlug 'iloginow/vim-stylus'\nPlug 'chr4/nginx.vim'\nPlug 'uarun/vim-protobuf'\nPlug 'peterhoeg/vim-qml'\nPlug 'keith/rspec.vim'\nPlug 'hashivim/vim-terraform'\nPlug 'PProvost/vim-ps1'\nPlug 'ciaranm/securemodelines' \" Secure modeline https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md\nPlug 'jceb/vim-orgmode'\n\" }}}\n\" }}}\n\nsource $HOME/.vimrc.local.plugins\n\ncall plug#end()\n\n"
  },
  {
    "path": "README.md",
    "content": "# The Vim Configuration. [![Build Status](https://travis-ci.org/luan/vimfiles.svg?branch=master)](https://travis-ci.org/luan/vimfiles)\n\nIf you're trying to use this config checkout this [cheat\nsheet](https://github.com/luan/vimfiles/wiki/Luan's-Vim-Cheat-Sheet).\n\n---\n\nThis vimfiles support both standard [vim](http://www.vim.org/) and\n[neovim](https://neovim.io/), I'd encourage you to give neovim a try.\n\nIf you're using neovim follow [this\nguide](https://github.com/neovim/neovim/wiki/Installing-Neovim) in order to get\nit properly setup. The autocompletion plugin we use needs [python3\nsupport](https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim) too.\n\nIf you choose regular vim you can install it on ubuntu via the `vim-nox` package, or\non macOS with Homebrew via `brew install vim`.\n\n### Table of Contents\n\n1. [Using This Configuration](#using-this-configuration)\n1. [Installation](#installation)\n  1. [Additional Dependencies](#additional-dependencies)\n    1. [ctags](#ctags)\n1. [Updating](#updating)\n1. [Customizing](#customizing)\n  1. [Changing Configuration](#changing-configuration)\n  1. [Adding Plugins](#adding-plugins)\n1. [Functionality](#functionality)\n  1. [Defaults Overridden](#defaults-overridden)\n1. [Screenshots](#screenshots)\n\n## Using This Configuration\n\nThis configuration is supposed to be used directly, **not** forked. If you intend\nto keep up to date with changes made to this repo it's recommended that you\njust clone this repository and customize the config using the [provided\nhooks](#customizing). If you have a feature or fix to submit, feel free to fork\nand send a PR.\n\n---\n\n## Installation\n\nAs simple as:\n```bash\ncurl vimfiles.luan.sh/install | bash\n\n# To override you current config:\n# curl vimfiles.luan.sh/install | FORCE=1 bash\n```\n\n### Additional Dependencies\n\nMost of the dependencies are installed automatically, assuming you have a\nminimal development environment for you language. For example we download all\nthe tools for golang and elm automatically.  `git` is assumed to be installed\nand so is [`ag`](https://github.com/ggreer/the_silver_searcher) or `ack`, if either of those is not, some plugins may not behave\nas expected.\n\n#### ctags\n\n`ctags` is used to jump to function definitions, it is not strictly necessary if\nyou don't need that functionality, if you want to be able to jump effectively\nto definitions install the correct version of ctags.\n\n**OSX**\n\n```bash\nbrew uninstall ctags\nbrew install --HEAD universal-ctags/universal-ctags/universal-ctags\n```\n\n**Linux**\n\n*exuberant-ctags* from your OS is generally enough for most things, but if you\nwant more CSS, ruby and other goodnesses you will need to manually compile and\nreplace your ctags installation with: https://github.com/fishman/ctags\n\n\n---\n\n## Updating\n\nYou should frequently update you copy of this config, to get latest fixes and\nimprovements. To do so you can run:\n```bash\nvim-update\n```\n\nAssuming `/usr/local/bin` is on your `PATH` on OSX or `~/bin/` on Linux.\n\nIf that doesn't work you can always run the script directly:\n```bash\n~/.vim/update\n```\n\nOn 11/18/2018 the Python package `neovim` was renamed to `pynvim`\nDue to issues with pip the `neovim` pip package cannot be upgraded and will break neovim's python bindings.\n\nTo resolve this you can run\n```bash\npip uninstall neovim pynvim\npip install pynvim\n```\n\nSee https://github.com/neovim/neovim/wiki/Following-HEAD#20181118 for more details\n\n---\n\n## Customizing\n\nWe load 3 extra configuration files that are **NOT** part of this repo:\n\n* `~/.vimrc.local.before` (*to open: `,vb`*): Configuration to be set before everything else, this\n  runs before any plugin or any config from this repository.\n* `~/.vimrc.local` (*to open: `,vl`*): Configuration to be set after everything else, this runs\n  after all other configuration is loaded and all plugins are setup.\n* `~/.vimrc.local.plugins` (*to open: `,vp`*): Extra plugins to be loaded (along with maybe\n  optional configuration for them). Is loaded after all the default plugins are\n  installed.\n\nA common pattern is for individuals or teams to have those 3 files checked in\nto a separate [dotfiles](https://github.com/luan/dotfiles) repository and have\nthem be symlinked into your `$HOME` directory. Symlink them before you run the\ninstall script and everything should work.\n\n### Changing Configuration\n\nYou might want to change some config such as disabling autocompletion or\nenabling auto save, or maybe just changing your colorscheme.  You can do so by\nediting the `~/.vimrc.local` file, for example:\n\nChanging colorscheme:\n```vim\ncolorscheme gruvbox\n```\n\nEnabling auto save:\n```vim\n\" will save automatically when leaving the buffer\n\" 0 or 1, defaults 0\nlet g:autosave = 1\n```\n\nDisabling deoplete:\n```vim\nlet g:deoplete#enable_at_startup = 0   \" disable deoplete\n```\n\nSome configuration values need to be set before loading plugins, for that we\nhave the `~/.vimrc.local.before`, that get's loaded before everything else, one\nexample usage of it is enabling fancy characters for the airline plugin:\n```vim\nlet g:airline_powerline_fonts = 1\n```\n\n### Adding Plugins\n\nIf you have a favorite plugin you want to install but couldn't convince me to\nadd it as a default you can still have it be installed by just putting it in\nthe `~/.vimrc.local.plugins`, like such:\n```vim\n\" Plugin to navigate between camelCase words\nPlug 'bkad/CamelCaseMotion'\n```\n\n---\n\n## Functionality\n\nThis config packs a considerable amount of plugins, there are descriptions for\nmost of them [here](Plug.vim) in the comments. It also strives to not override\ndefault behavior, although that's not always possible.\n\nThere's [space to write some\nguides](https://github.com/luan/vimfiles/issues/56) as to how to effectively\nuse this config for certain languages. The main targets are golang and ruby,\nalthough this configuration should be usable with most languages.\n\n### Defaults Overridden\n\nThese bindings are known to be overridden in this config. Please open an\n[issue](https://github.com/luan/vimfiles/issues/new) if you find any other.\n* `|`: Default behavior is jump to column. We have it set to `:NERDTreeFocus`.\n* `,`: Default is reverse repeat a `f`, `t`, `F`, or `T` search. We have it set to `<leader>`.\n* `\\`: Is the default `<leader>`. We have it set to `:NERDTreeToggle`.\n* `<enter>` or `<cr>`: Default behavior is to move the cursor one line down. We\n  have it set to save if modified (basically `:w` when the file has a change).\n\nA lot of small defaults are overridden everywhere else, and those are just to\nmake editing a better experience and should in no way make this vim not feel\nlike vim. For a glance in some of the changes look at\n[config/basic.vim](config/basic.vim).\n\nA few overridden are worth mentioning:\n\n```vim\nset splitright\n```\nThese change where new splits are open, when you for example do `:vs` the\ndefault behavior is to open a split on the left, it feels more natural to open\none on the right instead.\n\n```vim\nset iskeyword+=$,@,-\n```\nAdd extra characters that are valid parts of variables.\n\n---\n\n## Screenshots\n\n**Default colorscheme: hybrid**\n\n[![hybrid](https://github.com/luan/vimfiles/raw/master/screenshots/hybrid.png)](https://github.com/luan/vimfiles/raw/master/screenshots/hybrid.png)\n\n**Alternate colorscheme: monokai**\n\n[![monokai](https://github.com/luan/vimfiles/raw/master/screenshots/monokai.png)](https://github.com/luan/vimfiles/raw/master/screenshots/monokai.png)\n\n"
  },
  {
    "path": "UltiSnips/go.snippets",
    "content": "# More snippets for Go\n\nsnippet println \"fmt.Println(...)\"\nfmt.Println(${0:${VISUAL}})\nendsnippet\n\nsnippet printf \"fmt.Printf(format, ...)\"\nfmt.Printf(\"${1:%s}\", ${0:${VISUAL}})\nendsnippet\n\nsnippet iferr \"if err != nil {...}\"\nif err != nil {\n\t${0}\n}\nendsnippet\n\nsnippet desc \"Ginkgo Describe\" b\nDescribe(\"${1:something}\", func() {\n\t${0:${VISUAL}}\n})\nendsnippet\n\nsnippet cont \"Ginkgo Context\" b\nContext(\"${1:something}\", func() {\n\t${0:${VISUAL}}\n})\nendsnippet\n\nsnippet when \"Ginkgo When\" b\nWhen(\"${1:something}\", func() {\n\t${0:${VISUAL}}\n})\nendsnippet\n\nsnippet bef \"Ginkgo BeforeEach\" b\nBeforeEach(func() {\n\t${0:${VISUAL}}\n})\nendsnippet\n\nsnippet aft \"Ginkgo AfterEach\" b\nAfterEach(func() {\n\t${0:${VISUAL}}\n})\nendsnippet\n\nsnippet just \"Ginkgo JustBeforeEach\" b\nJustBeforeEach(func() {\n\t${0:${VISUAL}}\n})\nendsnippet\n\nsnippet it \"Ginkgo It\" b\nIt(\"${1:does something}\", func() {\n\t${0:${VISUAL}}\n})\nendsnippet\n\nsnippet exto \"Gomega Expect(...).To(...)\" b\nExpect(${1:actual}).To(${0:${VISUAL}})\nendsnippet\n\nsnippet exnt \"Gomega Expect(...).NotTo(...)\" b\nExpect(${1:actual}).NotTo(${0:${VISUAL}})\nendsnippet\n\nsnippet extn \"Gomega Expect(...).ToNot(...)\" b\nExpect(${1:actual}).ToNot(${0:${VISUAL}})\nendsnippet\n\nsnippet exeo \"Gomega Expect(err).To(HaveOccurred())\" b\nExpect(err).To(HaveOccurred())\nendsnippet\n\nsnippet exen \"Gomega Expect(err).NotTo(HaveOccurred())\" b\nExpect(err).NotTo(HaveOccurred())\nendsnippet\n\nsnippet exme \"Gomega Expect(err).To(MatchError(...))\" b\nExpect(err).To(MatchError(${0:\"something failed\"}))\nendsnippet\n\nsnippet exes \"Gomega Expect(err).To(MatchError(ContainSubstring(...)))\" b\nExpect(err).To(MatchError(ContainSubstring(${0:\"something failed\"})))\nendsnippet\n\n# vim:ft=snippets:\n\n"
  },
  {
    "path": "bin/install",
    "content": "#!/usr/bin/env bash\n\nset -eu -o pipefail\n\ndeclare UPDATE=0 INTERACTIVE=1\ndeclare VIMCMD='vim'\ndeclare NPM='npm'\ndeclare PIP='pip'\n\nreadonly VIMFILES_PATH=\"${HOME}/.vim\"\nreadonly VIMFILES_REPO_NAME='luan/vimfiles'\nreadonly VIMFILES_REPO_URL=\"https://github.com/${VIMFILES_REPO_NAME}\"\nreadonly FILES_TO_LINK=\"vimrc gvimrc\"\nreadonly LOCALS=\".vimrc.local.before .vimrc.local .vimrc.local.plugins\"\n\nreadonly GREEN='\\033[0;32m'\nreadonly YELLOW='\\033[0;33m'\nreadonly RED='\\033[0;31m'\nreadonly BOLD=$(tput bold)\nreadonly NORMAL=$(tput sgr0)\nreadonly END_COLOR='\\033[0;m'\n\nDEBUG=${DEBUG:-}\nif [[ ${DEBUG} ]]; then\n  set -x\nfi\n\nprint_usage() {\n  echo -e \"Unsupported option: $*\"\n  echo -e \"Supported options:\"\n  echo -e \"\\\\t-u, --update          \\\\tUpdate all plugins.\"\n  echo -e \"\\\\t-n, --non-interactive \\\\tDon't show vim while installing plugins.\"\n}\n\nparse_flags() {\n  if [[ -t 0 ]]\n  then\n    INTERACTIVE=1\n  else\n    echo \"Detected non-interactive shell, forcing --non-interactive\"\n    INTERACTIVE=0\n  fi\n\n  while [[ $# -gt 0 ]]; do\n    key=\"$1\"\n\n    case $key in\n      -n|--non-interactive)\n        INTERACTIVE=0\n        shift\n        ;;\n      -u|--update)\n        UPDATE=1\n        shift\n        ;;\n      *)\n        print_usage \"$key\"\n        exit 1\n        ;;\n    esac\n  done\n\n  readonly INTERACTIVE UPDATE\n}\n\nfail() {\n  declare message=$1\n  echo -e \"${RED}${BOLD}${message}${NORMAL}\"\n  exit 1\n}\n\nfrom_repo() {\n  declare dir=$1\n\n  (\n  [[ -d \"${dir}\" ]] && cd \"${dir}\" || return 1\n  [[ -e \"${dir}/.git\" && \"$(git remote -v)\" == *\"${VIMFILES_REPO_NAME}\"* ]]\n  )\n}\n\nhas_neovim() {\n  which nvim > /dev/null\n}\n\nhas_go() {\n  which go > /dev/null\n}\n\nhas_elm() {\n  which elm > /dev/null\n}\n\nmust_have_pip3() {\n  if which pip3 > /dev/null; then\n    PIP=pip3\n    return\n  elif which pip > /dev/null; then\n    PIP=pip\n    return\n  fi\n  echo -e \"\\\\t${RED}ERROR${END_COLOR} You need python3 with pip installed in\" \\\n    \"order for this configuration to work. Please make sure to install\" \\\n    \"python3 on your system and run this intaller again.\"\n  exit 1\n}\n\nhas_npm() {\n  if which npm > /dev/null; then\n    if [[ $(which npm) == '/usr/bin/npm' ]]; then\n      NPM='sudo npm'\n    fi\n    return 0\n  fi\n  return 1\n}\n\nsetup_vimfiles_dir() {\n  declare script_name=$0\n  local dir\n\n  dir=\"$(cd \"$(dirname \"${script_name}\")\" && pwd)\"\n  if [[ \"$(basename \"${dir}\")\" == \"bin\" ]]; then\n    dir=\"$(cd \"${dir}\"/.. && pwd)\"\n  fi\n\n  if ! from_repo \"${dir}\"; then\n    echo \"vimfiles repository not yet cloned. Cloning...\"\n    dir=\"${VIMFILES_PATH}\"\n    git clone \"${VIMFILES_REPO_URL}\" \"${dir}\"\n  fi\n\n  if [[ \"${dir}\" != \"${VIMFILES_PATH}\" ]]; then\n    if [[ ! -e \"${VIMFILES_PATH}\" ]]; then\n      echo \"Detected clone outside of ~/.vim, symlinking\"\n      ln -s \"${dir}\" \"${VIMFILES_PATH}\"\n    fi\n  fi\n}\n\nsetup_neovim_config() {\n  mkdir -p \"${XDG_CONFIG_HOME:=\"${HOME}/.config\"}\"\n  if [[ ! -e \"${XDG_CONFIG_HOME}/nvim\" ]]; then\n    ln -s \"${VIMFILES_PATH}\" \"${XDG_CONFIG_HOME}/nvim\"\n  fi\n}\n\ninitialize_vimfiles() {\n  (\n  cd \"${VIMFILES_PATH}\" || exit 2\n  if [ -e bundle ]; then\n    rm -rf bundle\n  fi\n  git submodule update --init --recursive\n\n  for file in ${LOCALS}; do\n    dot_file=\"${HOME}/${file}\"\n    touch \"${dot_file}\"\n  done\n\n  for file in ${FILES_TO_LINK}; do\n    dot_file=\"${HOME}/.${file}\"\n    if [[ ! -e \"${dot_file}\" ]]; then\n      ln -s \"${PWD}/${file}\" \"${dot_file}\"\n    fi\n  done\n  )\n}\n\ninstall_vim_update() {\n  local install_path\n\n  if [[ \"$(uname)\" == \"Darwin\" ]]; then\n    install_path=/usr/local/bin\n  elif [[ \"$(uname)\" == *\"Linux\"* ]]; then\n    install_path=\"${HOME}/bin\"\n  fi\n\n  if [[ -L \"${install_path}/vim-update\" ]]; then\n    rm -f \"${install_path}/vim-update\"\n  fi\n\n  if [[ ! -L \"${install_path}/vim-update\" ]]; then\n    mkdir -p \"${install_path}\"\n    ln -s \"${VIMFILES_PATH}/bin/update\" \"${install_path}/vim-update\"\n  fi\n}\n\nsetup_elm_dependencies() {\n  echo -e \"${YELLOW}INSTALL${END_COLOR} ${BOLD}elm${NORMAL} dependencies...\"\n  if has_npm; then\n    npmpackages=\"\\\n      elm-test \\\n      elm-oracle \\\n      \"\n\n    for p in $npmpackages; do\n      (\n      echo -e \"\\\\t${YELLOW}INSTALL${END_COLOR} ${BOLD}${p}${NORMAL}...\"\n      if $NPM install -g \"${p}\"; then\n        echo -e \"\\\\t${GREEN}DONE${END_COLOR}    ${BOLD}${p}${NORMAL}\"\n      else\n        echo -e \"\\\\t${RED}ERROR${END_COLOR}    ${BOLD}${p}${NORMAL}\"\n      fi\n      ) &\n    done\n  else\n    echo -e \"\\\\t${RED}ERROR${END_COLOR} ${BOLD}NPM not found, some elm dependencies were skipped${NORMAL}!\"\n  fi\n\n  (\n  echo -e \"\\\\t${YELLOW}INSTALL${END_COLOR} ${BOLD}elm-format${NORMAL}...\"\n  if [[ \"$OSTYPE\" == \"linux-gnu\" ]]; then\n    elm_format_url='https://github.com/avh4/elm-format/releases/download/0.2.0-alpha/elm-format-0.2.0-alpha-linux-x64.tgz'\n  elif [[ \"$OSTYPE\" == \"darwin\"* ]]; then\n    elm_format_url='https://github.com/avh4/elm-format/releases/download/0.2.0-alpha/elm-format-0.2.0-alpha-mac-x64.tgz'\n  fi\n  tar xz -O < <(curl -L $elm_format_url) > bin/elm-format\n  chmod a+x bin/elm-format\n  echo -e \"\\\\t${GREEN}DONE${END_COLOR}    ${BOLD}elm-format${NORMAL}\"\n  ) &\n  wait\n  echo -e \"${GREEN}DONE${END_COLOR}    ${BOLD}elm${NORMAL} dependencies\"\n}\n\nsetup_livedown() {\n  $NPM install -g livedown\n}\n\nsetup_neovim_python3() {\n  if which pacman > /dev/null ; then\n    sudo $PIP uninstall -y greenlet 2>/dev/null >/dev/null || true\n    sudo pacman -S --needed --noconfirm python-greenlet\n    sudo $PIP install --upgrade neovim\n    return 0\n  fi\n\n  $PIP install --upgrade neovim\n}\n\nsetup_vim_calls() {\n  if has_neovim; then\n    VIMCMD=nvim\n  fi\n\n  exec 4>&1 3>/dev/null\n  if [[ $INTERACTIVE != 1 ]] ; then\n    if has_neovim; then\n      VIMCMD='nvim --headless'\n    else\n      exec 4>&1 1>&3 2>&3\n    fi\n  fi\n}\n\nsetup_go_dependencies() {\n  (\n  cd \"${VIMFILES_PATH}\" || exit 2\n  mkdir -p gobin gopath\n  echo -e \"${YELLOW}INSTALL${END_COLOR} ${BOLD}go binaries${NORMAL} (may take a while)...\" >&4\n  GOPATH=\"${PWD}/gopath\" ${VIMCMD} +'GoUpdateBinaries' +'qall!'\n  echo\n  echo -e \"${GREEN}DONE${END_COLOR} ${BOLD}go binaries${NORMAL}\" >&4\n  set +e\n  GOPATH=\"${PWD}/gopath\" GOBIN=\"${PWD}/gobin\" \"${PWD}/gobin/gocode\" close 2>/dev/null\n  set -e\n  )\n}\n\ninstall_plugins() {\n  echo -e \"${YELLOW}INSTALL${END_COLOR} ${BOLD}vim plugins${NORMAL} (may take a while)...\"\n\n  ALL_PLUGINS='true' ${VIMCMD} +'PlugClean!' +'PlugUpdate!' +'qall!'\n\n  if has_neovim; then\n    ${VIMCMD} +'UpdateRemotePlugins' +'qall!'\n    echo\n  fi\n\n  echo -e \"${GREEN}DONE${END_COLOR} ${BOLD}vim plugins${NORMAL}\" >&4\n}\n\nmain() {\n  parse_flags \"$@\"\n\n  setup_vimfiles_dir\n  has_neovim && setup_neovim_config\n\n  initialize_vimfiles\n  install_vim_update\n\n  has_elm && setup_elm_dependencies\n  has_npm && setup_livedown\n\n  must_have_pip3\n  setup_neovim_python3\n\n  setup_vim_calls\n\n  install_plugins\n\n  has_go && setup_go_dependencies\n  return 0\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "bin/update",
    "content": "#!/usr/bin/env bash\n\npushd $HOME/.vim > /dev/null\ngit pull\n~/.vim/bin/install -u $@\npopd > /dev/null\n"
  },
  {
    "path": "config/basic.vim",
    "content": "\" ----------------------------------------\n\" Regular Vim Configuration (No Plugins Needed)\n\" ----------------------------------------\n\n\" Config {{{\nif has('persistent_undo')\n  set undofile\n  set undodir=~/.vim/.undo\nendif\n\n\" We rely on bash for some things, make sure we use that for shelling out\nset shell=/bin/bash\n\n\" Prevent netrw buffers from being set as alternate\nlet g:netrw_altfile = 1\n\" }}}\n\n\" Backups {{{\nset swapfile                    \" Keep swapfiles\nset directory=~/.vim-tmp,~/tmp,/var/tmp,/tmp\nset backupdir=~/.vim-tmp,~/tmp,/var/tmp,/tmp\n\" }}}\n\n\" UI {{{\nset number         \" Line numbers on\nset nowrap         \" Line wrapping off\nset cmdheight=1    \" Make the command area two lines high\nset noshowmode     \" don't need to show mode since we have airline\nset numberwidth=4\nset encoding=utf-8\nset guioptions=cg\nset guicursor=n-v-c:block-Cursor-blinkon0,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor,r-cr:hor20-Cursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175\nif !has('nvim')\n  set ttyfast\nendi\nset lazyredraw\n\nif !has('nvim')\n  if has('mouse_sgr')\n    set ttymouse=sgr\n  else\n    set ttymouse=xterm2\n  end\nend\n\" }}}\n\n\" Behaviors {{{\nfiletype plugin indent on  \" Automatically detect file types. (must turn on after Vundle)\nset wildmode=list:longest \" use emacs-style tab completion when selecting files, etc\nset hidden             \" Change buffer - without saving\nset autowriteall       \" Writes on make/shell commands\nset foldlevelstart=99\nset formatoptions=crql\nset iskeyword+=$,@,-     \" Add extra characters that are valid parts of variables\nset tags=./tags;/,tags;/\nset splitright\nif v:version >= 704\n  set completeopt=menu,noinsert,noselect\nendif\nset viewoptions=cursor,folds,slash,unix\nset scrolloff=5\n\" }}}\n\n\" Security {{{\nset nomodeline\n\" }}}\n\n\" Text Format {{{\nset tabstop=2\nset shiftwidth=2 \" Tabs under smart indent\nset expandtab\n\" }}}\n\n\" Searching {{{\nset ignorecase\nset smartcase  \" Non-case sensitive search\nset hlsearch\nset wildignore+=.final_builds/*,*/node_modules/*,*.o,*.obj,*.exe,*.so,*.dll,*.pyc,.svn,.hg,.bzr,.git,.sass-cache,*.class,*.scssc,*/Godeps/*\n\nif executable('rg')\n  set grepprg=rg\\ --vimgrep\nelseif executable('ag')\n  set grepprg=ag\\ --nogroup\\ --column\\ --smart-case\\ --nocolor\\ --follow\n  set grepformat=%f:%l:%c:%m\nelseif executable('ack')\n  set grepprg=ack\\ --nogroup\\ --column\\ --smart-case\\ --nocolor\\ --follow\\ $*\n  set grepformat=%f:%l:%c:%m\nendif\n\" }}}\n\n\" Visual {{{\nset noshowmatch \" Disable jumping to matching bracket when typing\n\" }}}\n\n\" Sounds {{{\nset noerrorbells\nset novisualbell\n\" }}}\n\n\" Mouse {{{\nset mousehide  \" Hide mouse after chars typed\nset mouse=a  \" Mouse in all modes\n\" }}}\n\n"
  },
  {
    "path": "config/bindings.vim",
    "content": "\" ----------------------------------------\n\" Bindings\n\" ----------------------------------------\n\n\" Note: This line MUST come before any <leader> mappings\nlet g:mapleader=','\nlet g:maplocalleader = '-'\n\n\" Basics {{{\n\nset pastetoggle=<F6>\nmap <F6> :set invpaste<CR>:set paste?<CR>\n\n\" Edit vimrc with ,vi\nnmap <silent> <leader>vi :e ~/.vim/vimrc<CR>\nnmap <silent> <leader>vb :e ~/.vimrc.local.before<CR>\nnmap <silent> <leader>vl :e ~/.vimrc.local<CR>\nnmap <silent> <leader>vp :e ~/.vimrc.local.plugins<CR>\n\nnnoremap j gj\nnnoremap k gk\n\nnoremap <c-\\> ,\n\" }}}\n\n\" Common typos {{{\ncommand! W w\ncommand! Q q\ncommand! WQ wq\ncommand! Wq wq\n\nnnoremap <silent> <C-Right> <c-w>l\nnnoremap <silent> <C-Left> <c-w>h\nnnoremap <silent> <C-Up> <c-w>k\nnnoremap <silent> <C-Down> <c-w>j\n\n\" }}}\n\n\" Other {{{\nvnoremap < <gv\nvnoremap > >gv\n\" make Y consistent with C and D. See :help Y.\nnnoremap Y y$\n\" Y in visual mode copies to system clipboard\nvmap Y \"+y\n\" }}}\n\n\" Open files in current directory {{{\ncnoremap %% <C-R>=expand('%:h').'/'<cr>\nnmap <leader>e :edit %%\nnmap <leader>v :view %%\n\nnnoremap <leader><leader> <c-^>\n\" }}}\n\n\" Switch between test and production code {{{\nnnoremap <leader>. :A<cr>\n\" }}}\n\n\" ---------------\n\" Leader Commands\n\" ---------------\n\n\" {{{ File Jumping\n\"Move back and forth through previous and next buffers\n\"with ,z and ,x\nnnoremap <silent> <leader>z :bp<CR>\nnnoremap <silent> <leader>x :bn<CR>\n\" }}}\n\n\" Spelling {{{\n\" Toggle spelling mode with ,s\nnmap <silent> <leader>ss :set spell!<CR>\nnmap <silent> <leader>sf :QuickSpellingFix<CR>\n\" }}}\n\n\" Window {{{\n\" Window Movement\n\" Equal Size Windows\nnmap <silent> <leader>w= :wincmd =<CR>\n\" Swap Windows\nnmap <silent> <leader>wx :wincmd x<CR>\n\n\" Window Splitting\nnmap <silent> <leader>hs :split<CR>\nnmap <silent> <leader>vs :vsplit<CR>\nnmap <silent> <leader>sc :close<CR>\n\" }}}\n\n\" Other {{{\nmap <leader>YY :let @* = expand(\"%\").\":\".line(\".\")<CR>:echo \"Copied: \".expand(\"%\")<CR>\nmap <leader>YL :let @* = expand(\"%\").\":\".line(\".\")<CR>:echo \"Copied: \".expand(\"%\").\":\".line(\".\")<CR>\n\nnnoremap <silent> <space> :noh<cr>\nnnoremap <leader>=  gg=G``\n\nnnoremap <unique> <expr> <CR> empty(&buftype) ? ':w<CR>' : '<CR>'\n\nnnoremap <silent><leader><C-]> <C-w><C-]><C-w>T\n\" }}}\n\n\" Test runner {{{\n\" Run this file\nmap <leader>t :call RunTestFile()<cr>\n\" Run only the example under the cursor\nmap <leader>T :call RunNearestTest()<cr>\n\nmap <leader><space> :Vipe <CR>\nmap <leader>p :VipePop <CR>\n\" }}}\n"
  },
  {
    "path": "config/colors.vim",
    "content": "let g:gruvbox_italic=1\n\nlet s:colors = [\n      \\ 'hybrid',\n      \\ 'gruvbox',\n      \\ 'base16-3024',\n      \\ 'base16-apathy',\n      \\ 'base16-ashes',\n      \\ 'base16-atelier-dune',\n      \\ 'base16-atelier-forest',\n      \\ 'base16-atelier-heath',\n      \\ 'base16-atelier-lakeside',\n      \\ 'base16-atelier-seaside',\n      \\ 'base16-bespin',\n      \\ 'base16-brewer',\n      \\ 'base16-bright',\n      \\ 'base16-chalk',\n      \\ 'base16-codeschool',\n      \\ 'base16-default-dark',\n      \\ 'base16-eighties',\n      \\ 'base16-embers',\n      \\ 'base16-flat',\n      \\ 'base16-google-dark',\n      \\ 'base16-grayscale-dark',\n      \\ 'base16-greenscreen',\n      \\ 'base16-harmonic-dark',\n      \\ 'base16-isotope',\n      \\ 'base16-marrakesh',\n      \\ 'base16-mocha',\n      \\ 'base16-monokai',\n      \\ 'base16-ocean',\n      \\ 'base16-paraiso',\n      \\ 'base16-pop',\n      \\ 'base16-railscasts',\n      \\ 'base16-shapeshifter',\n      \\ 'base16-solarized-dark',\n      \\ 'base16-summerfruit-dark',\n      \\ 'base16-tomorrow',\n      \\ 'base16-twilight',\n      \\ ]\n\nfunction! colors#_change(index)\n  let l:idx = a:index\n  if l:idx < 0\n    let l:idx = len(s:colors) - 1\n  elseif l:idx > len(s:colors) - 1\n    let l:idx = 0\n  endif\n\n  let l:name = s:colors[l:idx]\n  silent! execute 'colorscheme '.l:name\nendfunction\n\nfunction! colors#_callback()\n  hi MatchParen cterm=underline ctermbg=none ctermfg=none gui=underline guifg=NONE guibg=NONE\nendfunction\n\nfunction! colors#next()\n  let l:next_index = index(s:colors, g:colors_name) + 1\n  call colors#_change(l:next_index)\nendfunction\n\nfunction! colors#prev()\n  let l:prev_index = index(s:colors, g:colors_name) - 1\n  call colors#_change(l:prev_index)\nendfunction\n\nfunction! colors#toggle_background()\n  if &background ==# 'light'\n    set background=dark\n  else\n    set background=light\n  endif\nendfunction\n\nfunction! colors#peek()\n  echo g:colors_name . ' - ' . &background\nendfunction\n\ncommand! ColorsPrev call colors#prev()\ncommand! ColorsNext call colors#next()\ncommand! ColorsToggleBG call colors#toggle_background()\ncommand! ColorsPeek call colors#peek()\n\nmap <silent><F2> :ColorsPrev<cr>\nmap <silent><F3> :ColorsNext<cr>\nmap <silent><F4> :ColorsToggleBG<cr>\nmap <silent><F1> :ColorsPeek<cr>\nset background=dark\n\nif has('termguicolors')\n  set termguicolors\n  if &term =~# '^screen' || &term =~# '^tmux'\n    let &t_8f = \"\\<Esc>[38;2;%lu;%lu;%lum\"\n    let &t_8b = \"\\<Esc>[48;2;%lu;%lu;%lum\"\n  endif\nendif\n\naugroup luan_colors\n  autocmd! ColorScheme * silent! call colors#_callback()\naugroup END\n\ntry\n  colorscheme hybrid\ncatch\nendtry\n"
  },
  {
    "path": "config/lang/c.vim",
    "content": "let s:projections = {\n      \\ '*.c': {'type': 'c', 'alternate': ['{}.h']},\n      \\ '*.h': {'type': 'c', 'alternate': ['{}.c']},\n      \\ '*.cpp': {'type': 'cpp', 'alternate': ['{}.hpp']},\n      \\ '*.hpp': {'type': 'cpp', 'alternate': ['{}.cpp']},\n      \\ '*': {}\n      \\ }\n\nfunction! s:ProjectionistDetect() abort\n  if &filetype ==# 'c' || &filetype ==# 'cpp'\n    let l:projections = deepcopy(s:projections)\n    call projectionist#append(getcwd(), l:projections)\n  endif\nendfunction\n\naugroup luan_c\n  autocmd!\n  autocmd User ProjectionistDetect call s:ProjectionistDetect()\n  au FileType cpp setlocal foldmethod=syntax\naugroup END\n\n"
  },
  {
    "path": "config/lang/crontab.vim",
    "content": "augroup luan_crontab\n  autocmd!\n  autocmd FileType crontab setlocal nobackup nowritebackup\naugroup END\n"
  },
  {
    "path": "config/lang/elm.vim",
    "content": "\" show types in autocomplete menu\nlet g:elm_detailed_complete = 1\nlet g:elm_format_autosave = 1\nlet g:elm_syntastic_show_warnings = 1\n"
  },
  {
    "path": "config/lang/golang.vim",
    "content": "\" vim-go setup\nlet g:go_fmt_autosave = 0\nlet g:go_fmt_command = 'goimports'\nlet g:go_fmt_fail_silently = 1\n\n\" this breaks folding on vim < 8.0 or neovim\nif v:version >= 800 || has('nvim')\n  let g:go_fmt_experimental = 1\nendif\n\nlet g:go_highlight_build_constraints = 1\nlet g:go_highlight_fields = 1\nlet g:go_highlight_functions = 1\nlet g:go_highlight_generate_tags = 1\nlet g:go_highlight_operators = 1\nlet g:go_highlight_structs = 1\nlet g:go_highlight_types = 1\nlet g:go_highlight_functions = 1\nlet g:go_highlight_function_calls = 1\n\nlet g:go_snippet_engine = 'ultisnips'\n\nlet g:go_bin_path = resolve(expand('<sfile>:h') . '/../../gobin')\nlet $PATH .= ':' . g:go_bin_path\n\nlet s:go_tags_path = resolve(expand('<sfile>:h') . '/../../gotags')\n\nlet s:go_tags_script_path = resolve(expand('<sfile>:h') . '/../../scripts/gotags')\nlet s:go_tags_lock_path = resolve(expand('<sfile>:h') . '/../../tmp/gotagslock')\n\nlet g:go_auto_type_info = 0\nlet g:ale_go_golangci_lint_package = 1\nlet g:ale_go_golangci_lint_options = '--enable-all\n\\ --tests\n\\ --fast\n\\ --disable gochecknoglobals\n\\ --disable gochecknoinits'\n\nfunction! golang#project_tags_path()\n  return s:go_tags_path . '/' . substitute(expand('%:p'), '/', '--', 'g') . '--tags'\nendfunction\n\nfunction! golang#global_tags_path()\n  return s:go_tags_path . '/' . substitute($GOPATH, '/', '--', 'g') . '--tags'\nendfunction\n\nfunction! golang#generate()\n  let l:tags_path = golang#project_tags_path()\n  let l:global_tags_path = golang#global_tags_path()\n  call vimproc#system_bg(\n        \\ \"bash -c 'LOCKDIR=\\\"\" . s:go_tags_lock_path . '\" '.\n        \\ s:go_tags_script_path . ' ' . l:tags_path . ' ' . l:global_tags_path .\n        \\ \"'\"\n        \\ )\nendfunction\n\nfunction! golang#buffcommands()\n  command! -buffer -bar -nargs=0 GoTags call golang#generate()\n  setlocal foldmethod=syntax shiftwidth=2 tabstop=2 softtabstop=2 noexpandtab\n\n  let l:tags_path = golang#project_tags_path()\n  let l:global_tags_path = golang#global_tags_path()\n  exec 'setlocal tags=' . l:tags_path . ',' . l:global_tags_path . ',tags'\nendfunction\n\nlet s:projections = {\n      \\ '*.go': {'type': 'go', 'alternate': '{}_test.go'},\n      \\ '*_test.go': {'type': 'go', 'alternate': '{}.go'},\n      \\ }\n\nfunction! s:ProjectionistDetect() abort\n  if &filetype ==# 'go'\n    let l:projections = deepcopy(s:projections)\n    call projectionist#append(getcwd(), l:projections)\n  endif\nendfunction\n\naugroup luan_golang\n  autocmd!\n  autocmd User ProjectionistDetect call s:ProjectionistDetect()\n  autocmd Filetype go command! -bang A call go#alternate#Switch(<bang>0, 'edit')\n  autocmd Filetype go command! -bang AV call go#alternate#Switch(<bang>0, 'vsplit')\n  autocmd Filetype go command! -bang AS call go#alternate#Switch(<bang>0, 'split')\n  autocmd FileType go compiler go\n  autocmd! BufEnter *.go call golang#buffcommands()\naugroup END\n\naugroup luan_go_gotags\n  autocmd!\n  autocmd BufWritePost *.go call golang#generate()\naugroup END\n\n"
  },
  {
    "path": "config/lang/javascript.vim",
    "content": "let g:javascript_plugin_flow = 1\nlet g:used_javascript_libs = 'jquery,underscore,vue,jasmine,ramda,d3,react'\n\naugroup luan_js\n  autocmd!\n  autocmd FileType javascript setlocal foldmethod=syntax expandtab tabstop=2 shiftwidth=2 softtabstop=2\n  autocmd BufRead,BufNewFile .eslintrc setlocal filetype=json\naugroup END\n\n"
  },
  {
    "path": "config/lang/markdown.vim",
    "content": "augroup luan_markdown\n  autocmd!\n  autocmd BufNewFile,BufRead *.md setlocal spell | setlocal lbr | setlocal nonu\naugroup END\nlet g:markdown_fenced_languages = ['html', 'json', 'css', 'javascript', 'vim', 'go', 'ruby', 'python', 'bash=sh']\n"
  },
  {
    "path": "config/lang/ruby.vim",
    "content": "augroup luan_ruby\n  autocmd FileType ruby setlocal ts=2 sts=2 sw=2 norelativenumber nocursorline re=1 foldmethod=syntax\naugroup END\n"
  },
  {
    "path": "config/lang/rust.vim",
    "content": "let g:rustfmt_autosave = 0\n"
  },
  {
    "path": "config/lang/vue.vim",
    "content": "augroup luan_vue\n  autocmd!\n  autocmd BufWritePost *.vue syntax sync fromstart\n  autocmd BufReadPost *.vue syntax sync fromstart\n  autocmd FileType vue syntax sync fromstart\naugroup END\nlet g:vue_disable_pre_processors=1\n"
  },
  {
    "path": "config/lang/yaml.vim",
    "content": "\" disable fucking stupid yaml indenting logic\naugroup luan_yml\n  autocmd!\n  autocmd FileType yaml setlocal indentexpr=\n  autocmd FileType yaml setlocal norelativenumber nocursorline\naugroup END\n"
  },
  {
    "path": "config/paste.vim",
    "content": "\" I haven't found how to hide this function (yet)\nfunction! RestoreRegister()\n  let @\" = s:restore_reg\n  return ''\nendfunction\n\nfunction! s:Repl()\n    let s:restore_reg = @\"\n    return \"p@=RestoreRegister()\\<cr>\"\nendfunction\n\n\" NB: this supports \"rp that replaces the selection by the contents of @r\nvnoremap <silent> <expr> p <sid>Repl()\n"
  },
  {
    "path": "config/plugin/ack.vim",
    "content": "if executable('rg')\n  let g:ackprg = 'rg --vimgrep'\nelseif executable('ag')\n  let g:ackprg = 'ag --vimgrep'\nendif\n\ncnoreabbrev Ag Ack\ncnoreabbrev Rg Ack\n\nnnoremap <Leader>a :Ack!<Space>\n\n"
  },
  {
    "path": "config/plugin/airline.vim",
    "content": "let g:airline_theme = 'tomorrow'\nif !exists('g:airline_powerline_fonts')\n  if (has('gui_running') && &guifont =~# 'for Powerline')\n    let g:airline_powerline_fonts = 1\n  else\n    let g:airline_powerline_fonts = 0\n  endif\nend\n\nif !g:airline_powerline_fonts\n  let g:airline_left_sep = ''\n  let g:airline_left_alt_sep = ''\n  let g:airline_right_sep = ''\n  let g:airline_right_alt_sep = ''\nendif\n\nlet g:airline_extensions = ['branch', 'netrw', 'ale', 'tabline']\n\n"
  },
  {
    "path": "config/plugin/ale.vim",
    "content": "scriptencoding utf-8\n\nnmap <silent> <C-S-k> <Plug>(ale_previous_wrap)\nnmap <silent> <C-S-j> <Plug>(ale_next_wrap)\n\nlet g:ale_sign_error = '✘'\nlet g:ale_sign_warning = '➤'\nlet g:ale_sign_info = '➟'\nlet g:ale_sign_column_always = 1\n\nlet g:ale_linters = {\n\\   'go': ['go build', 'gofmt', 'golangci-lint'],\n\\   'typescript': ['tsserver', 'typecheck'],\n\\   'javascript': ['eslint'],\n\\}\n\n\" Enable completion where available.\nlet g:ale_completion_enabled = 1\n"
  },
  {
    "path": "config/plugin/autoformat.vim",
    "content": "let g:autoformat_autoindent = 0\nlet g:autoformat_retab = 0\n\nlet g:formatters_javascript = ['eslint_local']\nlet g:formatters_vue = ['eslint_local']\n\naugroup luan_autoformat\n  autocmd!\n  autocmd BufWrite *.c,*.h,*.cpp,*.hpp,*.go,*.js,*.vue,*.rs :Autoformat\naugroup END\n"
  },
  {
    "path": "config/plugin/better-whitespace.vim",
    "content": "let g:better_whitespace_operator='_s'\n\n"
  },
  {
    "path": "config/plugin/ctrlp.vim",
    "content": "let g:ctrlp_match_window = 'bottom,order:ttb,min:1,max:10,results:50'\nlet g:ctrlp_clear_cache_on_exit = 1\nlet g:ctrlp_cache_dir='~/.vim/.cache/ctrlp'\nlet g:ctrlp_switch_buffer = '0'\n\nlet g:ctrlp_map = ''\nnnoremap <C-p> :CtrlPCurWD<cr>\nnnoremap <leader>f :CtrlPCurWD<cr>\nnnoremap <leader>m :CtrlPMRUFiles<cr>\nnnoremap <leader>F :CtrlPBufTag<cr>\nnnoremap <leader>S :CtrlPTag<cr>\nnnoremap <leader>L :CtrlPLine<cr>\nnnoremap <leader>b :CtrlPBuffer<cr>\n\nfunction! s:define_user_command()\n  let l:expr = '\\.final_builds/*\\|node_modules/*\\|\\.o$\\|\\.obj$\\|\\.exe$\\|\\.so$\\'\n  let l:expr = l:expr . '|\\.dll$\\|\\.pyc$\\|\\.svn\\|\\.hg\\|\\.bzr\\|\\.git\\|\\.sass-cache\\'\n  let l:expr = l:expr . '|\\.class\\|\\.scssc\\|Godeps/*'\n\n  \" Set the user_command option\n  if executable('ag')\n    let g:ctrlp_use_caching = 0\n    let l:cmd = 'ag %s -U -l --hidden --nocolor -g \"\"'\n  else\n    let l:cmd = 'find %s -type f'\n  endif\n\n  \" Set the user_command option\n  let g:ctrlp_user_command = has('win32') || has('win64')\n        \\ ? 'dir %s /-n /b /s /a-d | findstr /V /l \"' . l:expr . '\"'\n        \\ : l:cmd . ' | grep -v \"'. l:expr .'\"'\nendfunction\n\ncall s:define_user_command()\n"
  },
  {
    "path": "config/plugin/fugitive.vim",
    "content": "nnoremap <leader>gs :Gstatus<cr>\nnnoremap <leader>gb :Gblame<cr>\nnnoremap <leader>gg :Gbrowse<cr>\nnnoremap <leader>gl :Glog<cr>\nnnoremap <leader>gv :Gitv<cr>\nnnoremap <leader>gpl :Git pull --rebase<cr>\nnnoremap <leader>gps :Git push origin head<cr>\n"
  },
  {
    "path": "config/plugin/fzf.vim",
    "content": "function! s:buflist()\n  redir => l:ls\n  silent ls\n  redir END\n  return split(l:ls, '\\n')\nendfunction\n\nfunction! s:bufopen(e)\n  execute 'buffer' matchstr(a:e, '^[ 0-9]*')\nendfunction\n\nlet g:ctrlp_map = ''\nlet g:ctrlp_cmd = ''\nif executable('rg')\n  let $FZF_DEFAULT_COMMAND = 'rg --files --hidden --follow --glob \"!.git/*\"'\nelseif executable('ag')\n  let g:ackprg = 'ag --vimgrep'\n  let $FZF_DEFAULT_COMMAND = 'ag -g \"\"'\nendif\n\ncommand! -bang -nargs=* FZFRg\n      \\ call fzf#vim#grep(\n      \\   'rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob \"!.git/*\" --color \"always\" '\n      \\      . shellescape(<q-args>), 1, <bang>0\n      \\ )\n\nnnoremap <C-p>     :FZFFiles<cr>\nnnoremap <leader>f :FZFFiles<cr>\nnnoremap <leader>m :FZFHistory<cr>\nnnoremap <leader>F :FZFBTags<cr>\nnnoremap <leader>S :FZFTags<cr>\nnnoremap <leader>L :FZFLines<cr>\nnnoremap <leader>b :FZFBuffers<cr>\nnnoremap <leader>C :FZFColors<cr>\nnnoremap <leader>G :FZFRg<space>\nnnoremap <leader>: :FZFHistory:<cr>\nnnoremap <leader>? :FZFHistory/<cr>\nnnoremap <leader><c-j> :FZFSnippets<cr>\nnnoremap <leader>d :FZFCommands<cr>\n\n"
  },
  {
    "path": "config/plugin/goyo.vim",
    "content": "function! s:goyo_enter()\n  silent !i3-msg fullscreen || true\n  silent !tmux set status off || true\n  silent !tmux list-panes -F \\#F | grep -q Z || tmux resize-pane -Z || true\n  set noshowmode\n  set noshowcmd\n  set scrolloff=999\n  set nolazyredraw\n  execute 'SignifyDisable'\n  execute 'Limelight'\nendfunction\n\nfunction! s:goyo_leave()\n  silent !i3-msg fullscreen || true\n  silent !tmux set status on || true\n  silent !tmux list-panes -F \\#F | grep -q Z && tmux resize-pane -Z || true\n  set showmode\n  set showcmd\n  set scrolloff=5\n  execute ':SignifyEnable'\n  execute ':Limelight!'\nendfunction\n\nlet g:limelight_default_coefficient = 0.7\nlet g:limelight_paragraph_span = 1\n\naugroup luan_goyo\n  autocmd! User GoyoEnter nested call <SID>goyo_enter()\n  autocmd! User GoyoLeave nested call <SID>goyo_leave()\n  autocmd VimResized * if exists('#goyo') | exe \"normal \\<c-w>=\" | redraw! | endif\naugroup END\n\nnmap <leader>Z :Goyo<cr>\nnmap <leader>X :Limelight!!<cr>\nnmap <Leader>i <Plug>(Limelight)\nxmap <Leader>i <Plug>(Limelight)\n\n"
  },
  {
    "path": "config/plugin/livedown.vim",
    "content": "nmap gm :LivedownToggle<CR>\n"
  },
  {
    "path": "config/plugin/multicursor.vim",
    "content": "\" Called once right before you start selecting multiple cursors\nfunction! Multiple_cursors_before()\n  if exists(':NeoCompleteLock')==2\n    exe 'NeoCompleteLock'\n  endif\nendfunction\n\n\" Called once only when the multiple selection is canceled (default <Esc>)\nfunction! Multiple_cursors_after()\n  if exists(':NeoCompleteUnlock')==2\n    exe 'NeoCompleteUnlock'\n  endif\nendfunction\n"
  },
  {
    "path": "config/plugin/ncm.vim",
    "content": "if !has('python3')\n  augroup luan_ncm\n    autocmd!\n    autocmd VimEnter *\n          \\ echohl Error | echomsg '[vimfiles] cannot setup autocomplete, install vim with python3 or try neovim' | echohl None\n    finish\n  augroup END\nendif\n\ninoremap <expr> <Tab> pumvisible() ? \"\\<C-n>\" : \"\\<Tab>\"\ninoremap <expr> <S-Tab> pumvisible() ? \"\\<C-p>\" : \"\\<S-Tab>\"\n\n"
  },
  {
    "path": "config/plugin/nerdtree.vim",
    "content": "\" ---------------\n\" NERDTree\n\" ---------------\nnnoremap <leader>nn :NERDTreeToggle<CR>\nnnoremap \\ :NERDTreeToggle<CR>\nnnoremap <leader>nf :NERDTreeFind<CR>\nnnoremap \\| :NERDTreeFind<CR>\nlet g:NERDTreeShowBookmarks=1\nlet g:NERDTreeChDirMode=2 \" Change the NERDTree directory to the root node\nlet g:NERDTreeHijackNetrw=0\naugroup luan_nerdtree\n  autocmd!\n  autocmd bufenter * if (winnr(\"$\") == 1 && exists(\"b:NERDTreeType\") && b:NERDTreeType == \"primary\") | q | endif\naugroup END\n\n"
  },
  {
    "path": "config/plugin/signify.vim",
    "content": "let g:signify_update_on_bufenter = 1\nlet g:signify_disable_by_default = 0\n\n"
  },
  {
    "path": "config/plugin/tagbar.vim",
    "content": "let g:tagbar_type_css = {\n    \\ 'ctagstype' : 'Css',\n    \\ 'kinds'     : [\n        \\ 'c:classes',\n        \\ 's:selectors',\n        \\ 'i:identities'\n    \\ ]\n    \\ }\n\nlet g:tagbar_type_ruby = {\n    \\ 'kinds' : [\n        \\ 'm:modules',\n        \\ 'c:classes',\n        \\ 'd:describes',\n        \\ 'C:contexts',\n        \\ 'f:methods',\n        \\ 'F:singleton methods'\n    \\ ]\n    \\ }\n\nnmap <F8> :TagbarToggle<CR>\n"
  },
  {
    "path": "config/plugin/tcomment.vim",
    "content": "nmap <leader>ci :TComment<cr>\nxmap <leader>ci :TComment<cr>\n\nnmap <leader>/ :TComment<cr>\nxmap <leader>/ :TComment<cr>\n"
  },
  {
    "path": "config/plugin/ultisnips.vim",
    "content": "let g:UltiSnipsExpandTrigger='<c-j>'\nlet g:UltiSnipsJumpForwardTrigger='<c-f>'\nlet g:UltiSnipsJumpBackwardTrigger='<c-b>'\nlet g:UltiSnipsSnippetDir=$HOME.'/.vim/UltiSnips'\n\n"
  },
  {
    "path": "config/plugin/undotree.vim",
    "content": "nnoremap <leader>u :UndotreeToggle<cr>\n"
  },
  {
    "path": "gvimrc",
    "content": "\" Unbind these keys for different bindings in vimrc\nif has('gui_macvim')\n  \" D-p\n  macmenu &File.Print key=<nop>\n\n  \" D-p\n  macmenu Edit.Find.Find\\.\\.\\. key=<nop>\n\n  \" D-b\n  macmenu &Tools.Make key=<nop>\n  \" D-l\n  macmenu &Tools.List\\ Errors key=<nop>\nendif\n"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en-us\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <title>Vimfiles by luan</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheets/normalize.css\" media=\"screen\">\n    <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheets/stylesheet.css\" media=\"screen\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheets/github-light.css\" media=\"screen\">\n  </head>\n  <body>\n    <section class=\"page-header\">\n      <h1 class=\"project-name\">Vimfiles</h1>\n      <h2 class=\"project-tagline\">The Vim Configuration. Uses vim-plug to manage plugins.</h2>\n      <a href=\"https://github.com/luan/vimfiles\" class=\"btn\">View on GitHub</a>\n      <a href=\"https://github.com/luan/vimfiles/zipball/master\" class=\"btn\">Download .zip</a>\n      <a href=\"https://github.com/luan/vimfiles/tarball/master\" class=\"btn\">Download .tar.gz</a>\n    </section>\n\n    <section class=\"main-content\">\n      <h1>\n<a id=\"the-vim-configuration-\" class=\"anchor\" href=\"#the-vim-configuration-\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>The Vim Configuration. <a href=\"https://travis-ci.org/luan/vimfiles\"><img src=\"https://travis-ci.org/luan/vimfiles.svg?branch=master\" alt=\"Build Status\"></a>\n</h1>\n\n<p>If you're trying to use this config checkout this <a href=\"https://github.com/luan/vimfiles/wiki/Luan's-Vim-Cheat-Sheet\">cheat\nsheet</a>.</p>\n\n<hr>\n\n<p>This vimfiles support both standard <a href=\"http://www.vim.org/\">vim</a> and\n<a href=\"https://neovim.io/\">neovim</a>, I'd encourage you to give neovim a try.</p>\n\n<p>If you're using neovim follow <a href=\"https://github.com/neovim/neovim/wiki/Installing-Neovim\">this\nguide</a> in order to get\nit properly setup. The autocompletion plugin we use needs <a href=\"https://neovim.io/doc/user/nvim_python.html\">python3\nsupport</a> too.</p>\n\n<p>If you're using regular vim make sure to install it with lua support, on ubuntu\nthat's provided with the <code>vim-nox</code> package and on OSX it can be installed with\nHomebrew by doing <code>brew install vim --with-lua</code>.</p>\n\n<h3>\n<a id=\"table-of-contents\" class=\"anchor\" href=\"#table-of-contents\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Table of Contents</h3>\n\n<ol>\n<li><a href=\"#using-this-configuration\">Using This Configuration</a></li>\n<li>\n<a href=\"#installation\">Installation</a>\n\n<ol>\n<li>\n<a href=\"#additional-dependencies\">Additional Dependencies</a>\n\n<ol>\n<li><a href=\"#ctags\">ctags</a></li>\n</ol>\n</li>\n</ol>\n</li>\n<li><a href=\"#updating\">Updating</a></li>\n<li>\n<a href=\"#customizing\">Customizing</a>\n\n<ol>\n<li><a href=\"#changing-configuration\">Changing Configuration</a></li>\n<li><a href=\"#adding-plugins\">Adding Plugins</a></li>\n</ol>\n</li>\n<li>\n<a href=\"#functionality\">Functionality</a>\n\n<ol>\n<li><a href=\"#defaults-overridden\">Defaults Overridden</a></li>\n</ol>\n</li>\n<li><a href=\"#screenshots\">Screenshots</a></li>\n</ol>\n\n<h2>\n<a id=\"using-this-configuration\" class=\"anchor\" href=\"#using-this-configuration\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Using This Configuration</h2>\n\n<p>This configuration is supposed to be used directly, <strong>not</strong> forked. If you intend\nto keep up to date with changes made to this repo it's recommended that you\njust clone this repository and customize the config using the <a href=\"#customizing\">provided\nhooks</a>. If you have a feature or fix to submit, feel free to fork\nand send a PR.</p>\n\n<hr>\n\n<h2>\n<a id=\"installation\" class=\"anchor\" href=\"#installation\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Installation</h2>\n\n<p>As simple as:</p>\n\n<div class=\"highlight highlight-source-shell\"><pre>curl vimfiles.luan.sh/install <span class=\"pl-k\">|</span> bash\n\n<span class=\"pl-c\"># To override you current config:</span>\n<span class=\"pl-c\"># curl vimfiles.luan.sh/install | FORCE=1 bash</span></pre></div>\n\n<h3>\n<a id=\"additional-dependencies\" class=\"anchor\" href=\"#additional-dependencies\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Additional Dependencies</h3>\n\n<p>Most of the dependencies are installed automatically, assuming you have a\nminimal development environment for you language. For example we download all\nthe tools for golang and elm automatically.  <code>git</code> is assumed to be installed\nand so is <code>ag</code> or <code>ack</code>, if either of those is not, some plugins may not behave\nas expected.</p>\n\n<h4>\n<a id=\"ctags\" class=\"anchor\" href=\"#ctags\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>ctags</h4>\n\n<p><code>ctags</code> is used to jump to function definitions, it is not strictly necessary if\nyou don't need that functionality, if you want to be able to jump effectively\nto definitions install the correct version of ctags.</p>\n\n<p><strong>OSX</strong></p>\n\n<div class=\"highlight highlight-source-shell\"><pre>brew uninstall ctags\nbrew tap universal-ctags/universal-ctags\nbrew install universal-ctags --HEAD</pre></div>\n\n<p><strong>Linux</strong></p>\n\n<p><em>exuberant-ctags</em> from your OS is generally enough for most things, but if you\nwant more CSS, ruby and other goodnesses you will need to manually compile and\nreplace your ctags installation with: <a href=\"https://github.com/fishman/ctags\">https://github.com/fishman/ctags</a></p>\n\n<hr>\n\n<h2>\n<a id=\"updating\" class=\"anchor\" href=\"#updating\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Updating</h2>\n\n<p>You should frequently update you copy of this config, to get latest fixes and\nimprovements. To do so you can run:</p>\n\n<div class=\"highlight highlight-source-shell\"><pre>vim-update</pre></div>\n\n<p>Assuming <code>/usr/local/bin</code> is on your <code>PATH</code> on OSX or <code>~/bin/</code> on Linux.</p>\n\n<p>If that doesn't work you can always run the script directly:</p>\n\n<div class=\"highlight highlight-source-shell\"><pre><span class=\"pl-k\">~</span>/.vim/update</pre></div>\n\n<hr>\n\n<h2>\n<a id=\"customizing\" class=\"anchor\" href=\"#customizing\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Customizing</h2>\n\n<p>We load 3 extra configuration files that are <strong>NOT</strong> part of this repo:</p>\n\n<ul>\n<li>\n<code>~/.vimrc.local.before</code> (<em>to open: <code>,vb</code></em>): Configuration to be set before everything else, this\nruns before any plugin or any config from this repository.</li>\n<li>\n<code>~/.vimrc.local</code> (<em>to open: <code>,vl</code></em>): Configuration to be set after everything else, this runs\nafter all other configuration is loaded and all plugins are setup.</li>\n<li>\n<code>~/.vimrc.local.plugins</code> (<em>to open: <code>,vp</code></em>): Extra plugins to be loaded (along with maybe\noptional configuration for them). Is loaded after all the default plugins are\ninstalled.</li>\n</ul>\n\n<p>A common pattern is for individuals or teams to have those 3 files checked in\nto a separate <a href=\"https://github.com/luan/dotfiles\">dotfiles</a> repository and have\nthem be symlinked into your <code>$HOME</code> directory. Symlink them before you run the\ninstall script and everything should work.</p>\n\n<h3>\n<a id=\"changing-configuration\" class=\"anchor\" href=\"#changing-configuration\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Changing Configuration</h3>\n\n<p>You might want to change some config such as disabling autocompletion or\nenabling auto save, or maybe just changing your colorscheme.  You can do so by\nediting the <code>~/.vimrc.local</code> file, for example:</p>\n\n<p>Changing colorscheme:</p>\n\n<div class=\"highlight highlight-source-viml\"><pre><span class=\"pl-c1\">colorscheme</span> gruvbox</pre></div>\n\n<p>Enabling auto save:</p>\n\n<div class=\"highlight highlight-source-viml\"><pre><span class=\"pl-c\">\" will save automatically when leaving the buffer</span>\n<span class=\"pl-c\">\" 0 or 1, defaults 0</span>\n<span class=\"pl-k\">let</span> <span class=\"pl-smi\"><span class=\"pl-k\">g:</span>autosave</span> <span class=\"pl-k\">=</span> <span class=\"pl-c1\">1</span></pre></div>\n\n<p>Disabling neocomplete:</p>\n\n<div class=\"highlight highlight-source-viml\"><pre><span class=\"pl-k\">let</span> <span class=\"pl-smi\"><span class=\"pl-k\">g:</span>neocomplete</span><span class=\"pl-c1\">#e</span>nable_at_startup <span class=\"pl-k\">=</span> <span class=\"pl-c1\">0</span><span class=\"pl-c\">   \" disable neocomplete</span>\n<span class=\"pl-k\">let</span> <span class=\"pl-smi\"><span class=\"pl-k\">g:</span>neocomplcache_enable_at_startup</span> <span class=\"pl-k\">=</span> <span class=\"pl-c1\">0</span><span class=\"pl-c\"> \" disable the fallback version when no LUA</span></pre></div>\n\n<p>Some configuration values need to be set before loading plugins, for that we\nhave the <code>~/.vimrc.local.before</code>, that get's loaded before everything else, one\nexample usage of it is enabling fancy characters for the airline plugin:</p>\n\n<div class=\"highlight highlight-source-viml\"><pre><span class=\"pl-k\">let</span> <span class=\"pl-smi\"><span class=\"pl-k\">g:</span>airline_powerline_fonts</span> <span class=\"pl-k\">=</span> <span class=\"pl-c1\">1</span></pre></div>\n\n<h3>\n<a id=\"adding-plugins\" class=\"anchor\" href=\"#adding-plugins\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Adding Plugins</h3>\n\n<p>If you have a favorite plugin you want to install but couldn't convince me to\nadd it as a default you can still have it be installed by just putting it in\nthe <code>~/.vimrc.local.plugins</code>, like such:</p>\n\n<div class=\"highlight highlight-source-viml\"><pre><span class=\"pl-c\">\" Plugin to navigate between camelCase words</span>\nPlug <span class=\"pl-s\"><span class=\"pl-pds\">'</span>bkad/CamelCaseMotion<span class=\"pl-pds\">'</span></span></pre></div>\n\n<hr>\n\n<h2>\n<a id=\"functionality\" class=\"anchor\" href=\"#functionality\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Functionality</h2>\n\n<p>This config packs a considerable amount of plugins, there are descriptions for\nmost of them <a href=\"Plug.vim\">here</a> in the comments. It also strives to not override\ndefault behavior, although that's not always possible.</p>\n\n<p>There's <a href=\"https://github.com/luan/vimfiles/issues/56\">space to write some\nguides</a> as to how to effectively\nuse this config for certain languages. The main targets are golang and ruby,\nalthough this configuration should be usable with most languages.</p>\n\n<h3>\n<a id=\"defaults-overridden\" class=\"anchor\" href=\"#defaults-overridden\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Defaults Overridden</h3>\n\n<p>These bindings are known to be overridden in this config. Please open an\n<a href=\"https://github.com/luan/vimfiles/issues/new\">issue</a> if you find any other.</p>\n\n<ul>\n<li>\n<code>|</code>: Default behavior is jump to column. We have it set to <code>:NERDTreeFocus</code>.</li>\n<li>\n<code>,</code>: Default is reverse repeat a <code>f</code>, <code>t</code>, <code>F</code>, or <code>T</code> search. We have it set to <code>&lt;leader&gt;</code>.</li>\n<li>\n<code>\\</code>: Is the default <code>&lt;leader&gt;</code>. We have it set to <code>:NERDTreeToggle</code>.</li>\n<li>\n<code>&lt;enter&gt;</code> or <code>&lt;cr&gt;</code>: Default behavior is to move the cursor one line down. We\nhave it set to save if modified (basically <code>:w</code> when the file has a change).</li>\n</ul>\n\n<p>A lot of small defaults are overridden everywhere else, and those are just to\nmake editing a better experience and should in no way make this vim not feel\nlike vim. For a glance in some of the changes look at\n<a href=\"config/basic.vim\">config/basic.vim</a>.</p>\n\n<p>A few overridden are worth mentioning:</p>\n\n<div class=\"highlight highlight-source-viml\"><pre><span class=\"pl-c1\">set</span> <span class=\"pl-c1\">splitright</span></pre></div>\n\n<p>These change where new splits are open, when you for example do <code>:vs</code> the\ndefault behavior is to open a split on the left, it feels more natural to open\none on the right instead.</p>\n\n<div class=\"highlight highlight-source-viml\"><pre><span class=\"pl-c1\">set</span> <span class=\"pl-c1\">iskeyword</span><span class=\"pl-k\">+</span><span class=\"pl-k\">=</span><span class=\"pl-smi\">$</span>,<span class=\"pl-smi\">@</span>,<span class=\"pl-k\">-</span></pre></div>\n\n<p>Add extra characters that are valid parts of variables.</p>\n\n<hr>\n\n<h2>\n<a id=\"screenshots\" class=\"anchor\" href=\"#screenshots\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"></span></a>Screenshots</h2>\n\n<p><strong>Default colorscheme: hybrid</strong></p>\n\n<p><a href=\"https://github.com/luan/vimfiles/raw/master/screenshots/hybrid.png\"><img src=\"https://github.com/luan/vimfiles/raw/master/screenshots/hybrid.png\" alt=\"hybrid\"></a></p>\n\n<p><strong>Alternate colorscheme: monokai</strong></p>\n\n<p><a href=\"https://github.com/luan/vimfiles/raw/master/screenshots/monokai.png\"><img src=\"https://github.com/luan/vimfiles/raw/master/screenshots/monokai.png\" alt=\"monokai\"></a></p>\n\n      <footer class=\"site-footer\">\n        <span class=\"site-footer-owner\"><a href=\"https://github.com/luan/vimfiles\">Vimfiles</a> is maintained by <a href=\"https://github.com/luan\">luan</a>.</span>\n\n        <span class=\"site-footer-credits\">This page was generated by <a href=\"https://pages.github.com\">GitHub Pages</a> using the <a href=\"https://github.com/jasonlong/cayman-theme\">Cayman theme</a> by <a href=\"https://twitter.com/jasonlong\">Jason Long</a>.</span>\n      </footer>\n\n    </section>\n\n  \n  </body>\n</html>\n"
  },
  {
    "path": "lib/autocommands.vim",
    "content": "\" ----------------------------------------\n\" Auto Commands\n\" ----------------------------------------\n\naugroup luan_general\n  autocmd!\n  \" No formatting on o key newlines\n  autocmd BufNewFile,BufEnter * set formatoptions-=o\n\n  \" Fix trailing whitespace in my most used programming langauges\n  autocmd FileType vim set fdm=marker foldmarker={{{,}}}\n\n  if exists('g:autosave') && g:autosave == 1\n    autocmd FocusLost * silent! wa\n  endif\n\n  au FileType qf nnoremap <buffer> <Enter> <Enter>\n\n  \" quickfix list takes full width & wraps lines\n  autocmd FileType qf wincmd J\n  autocmd FileType qf setlocal wrap\naugroup END\n\naugroup luan_vimrcEx\n  \" Clear all autocmds in the group\n  autocmd!\n  \" Jump to last cursor position unless it's invalid or in an event handler\n  autocmd BufReadPost *\n        \\ if &filetype != \"gitcommit\" && line(\"'\\\"\") > 0 && line(\"'\\\"\") <= line(\"$\") |\n        \\   exe \"normal g`\\\"\" |\n        \\ endif\naugroup END\n\n"
  },
  {
    "path": "lib/functions.vim",
    "content": "\" ----------------------------------------\n\" Functions\n\" ----------------------------------------\n\n\" ---------------\n\" Convert Ruby 1.8 hash rockets to 1.9 JSON style hashes.\n\" From: http://git.io/cxmJDw\n\" Note: Defaults to the entire file unless in visual mode.\n\" ---------------\ncommand! -bar -range=% NotRocket execute '<line1>,<line2>s/:\\(\\w\\+\\)\\s*=>/\\1:/e' . (&gdefault ? '' : 'g')\n\n\" ---------------\n\" Strip Trailing White Space\n\" ---------------\n\" From http://vimbits.com/bits/377\n\" Preserves/Saves the state, executes a command, and returns to the saved state\nfunction! Preserve(command)\n  \" Preparation: save last search, and cursor position.\n  let l:_s = getreg('/')\n  let l:l = line('.')\n  let l:c = col('.')\n  \" Do the business:\n  execute a:command\n  \" Clean up: restore previous search history, and cursor position\n  call setreg('/', l:_s)\n  call cursor(l:l, l:c)\nendfunction\n\"strip all trailing white space\ncommand! StripTrailingWhiteSpace :call Preserve(\"%s/\\\\s\\\\+$//e\")<CR>\n\n\" ---------------\n\" Quick spelling fix (first item in z= list)\n\" ---------------\nfunction! QuickSpellingFix()\n  if &spell\n    normal! 1z=\n  else\n    \" Enable spelling mode and do the correction\n    set spell\n    normal! 1z=\n    set nospell\n  endif\nendfunction\n\ncommand! QuickSpellingFix call QuickSpellingFix()\n\n\" ---------------\n\" Convert Ruby 1.8 hash rockets to 1.9 JSON style hashes.\n\" From: http://git.io/cxmJDw\n\" Note: Defaults to the entire file unless in visual mode.\n\" ---------------\ncommand! -bar -range=% NotRocket execute '<line1>,<line2>s/:\\(\\w\\+\\)\\s*=>/\\1:/e' . (&gdefault ? '' : 'g')\n\n\" ---------------\n\" Tests\n\" ---------------\nfunction! RunTestFile(...)\n  if a:0\n    let l:command_suffix = a:1\n  else\n    let l:command_suffix = ''\n  endif\n\n  \" Run the tests for the previously-marked file.\n  let l:in_test_file = match(expand('%'), '\\(.feature\\|_spec.rb\\|_test.go\\|_test.js\\|_spec.js\\|.bats\\|.test.js\\|.spec.js\\)$') != -1\n  if l:in_test_file\n    call RunTests(expand('%') . l:command_suffix)\n  else\n    call RunTests('')\n  end\nendfunction\n\nfunction! RunNearestTest()\n  let l:spec_line_number = line('.')\n  let s:last_command = ':' . l:spec_line_number\n  call RunTestFile(':' . l:spec_line_number)\nendfunction\n\nfunction! RunTests(filename)\n  :wa\n\n  if a:filename ==# ''\n    call vipe#peek()\n    return\n  endif\n\n  let l:command = ''\n\n  if match(a:filename, '\\.feature') != -1\n    if filereadable('script/features')\n      let l:command = 'script/features ' . a:filename\n    elseif filereadable('Gemfile')\n      let l:command = 'bundle exec cucumber ' . a:filename\n    else\n      let l:command = 'cucumber ' . a:filename\n    end\n  elseif match(a:filename, '_test\\.go') != -1\n    if filereadable('script/test')\n      let l:command = 'script/test ' . fnamemodify(a:filename, ':h')\n    elseif filereadable('scripts/test')\n      let l:command = 'scripts/test ' . fnamemodify(a:filename, ':h')\n    elseif filereadable('scripts/test-unit')\n      let l:command = 'scripts/test-unit ' . fnamemodify(a:filename, ':h')\n    else\n      let l:command = 'ginkgo ' . fnamemodify(a:filename, ':h')\n    end\n  elseif match(a:filename, '_spec\\.js') != -1\n    if filereadable('package.json')\n      let l:command = 'npm test ' . a:filename\n    else\n      let l:command = 'jasmine ' . a:filename\n    end\n  elseif match(a:filename, '\\.bats') != -1\n    let l:command = 'bats ' . a:filename\n  else\n    if filereadable('script/test')\n      let l:command = 'script/test ' . a:filename\n    elseif filereadable('scripts/test')\n      let l:command = 'scripts/test ' . a:filename\n    elseif (exists('g:force_bundle_exec') && g:force_bundle_exec == 1) || filereadable('Gemfile')\n      let l:command = 'bundle exec rspec --color ' . a:filename\n    else\n      let l:command = 'rspec --color ' . a:filename\n    end\n  end\n\n  call vipe#push(l:command)\nendfunction\n"
  },
  {
    "path": "lib/watchforchanges.vim",
    "content": "\" If you are using a console version of Vim, or dealing\n\" with a file that changes externally (e.g. a web server log)\n\" then Vim does not always check to see if the file has been changed.\n\" The GUI version of Vim will check more often (for example on Focus change),\n\" and prompt you if you want to reload the file.\n\"\n\" There can be cases where you can be working away, and Vim does not\n\" realize the file has changed. This command will force Vim to check\n\" more often.\n\"\n\" Calling this command sets up autocommands that check to see if the\n\" current buffer has been modified outside of vim (using checktime)\n\" and, if it has, reload it for you.\n\"\n\" This check is done whenever any of the following events are triggered:\n\" * BufEnter\n\" * CursorMoved\n\" * CursorMovedI\n\" * CursorHold\n\" * CursorHoldI\n\"\n\" In other words, this check occurs whenever you enter a buffer, move the cursor,\n\" or just wait without doing anything for 'updatetime' milliseconds.\n\"\n\" Normally it will ask you if you want to load the file, even if you haven't made\n\" any changes in vim. This can get annoying, however, if you frequently need to reload\n\" the file, so if you would rather have it to reload the buffer *without*\n\" prompting you, add a bang (!) after the command (WatchForChanges!).\n\" This will set the autoread option for that buffer in addition to setting up the\n\" autocommands.\n\"\n\" If you want to turn *off* watching for the buffer, just call the command again while\n\" in the same buffer. Each time you call the command it will toggle between on and off.\n\"\n\" WatchForChanges sets autocommands that are triggered while in *any* buffer.\n\" If you want vim to only check for changes to that buffer while editing the buffer\n\" that is being watched, use WatchForChangesWhileInThisBuffer instead.\n\"\ncommand! -bang WatchForChanges                  :call WatchForChanges(@%,  {'toggle': 1, 'autoread': <bang>0})\ncommand! -bang WatchForChangesWhileInThisBuffer :call WatchForChanges(@%,  {'toggle': 1, 'autoread': <bang>0, 'while_in_this_buffer_only': 1})\ncommand! -bang WatchForChangesAllFile           :call WatchForChanges('*', {'toggle': 1, 'autoread': <bang>0})\n\" WatchForChanges function\n\"\n\" This is used by the WatchForChanges* commands, but it can also be\n\" useful to call this from scripts. For example, if your script executes a\n\" long-running process, you can have your script run that long-running process\n\" in the background so that you can continue editing other files, redirects its\n\" output to a file, and open the file in another buffer that keeps reloading itself\n\" as more output from the long-running command becomes available.\n\"\n\" Arguments:\n\" * bufname: The name of the buffer/file to watch for changes.\n\"     Use '*' to watch all files.\n\" * options (optional): A Dict object with any of the following keys:\n\"   * autoread: If set to 1, causes autoread option to be turned on for the buffer in\n\"     addition to setting up the autocommands.\n\"   * toggle: If set to 1, causes this behavior to toggle between on and off.\n\"     Mostly useful for mappings and commands. In scripts, you probably want to\n\"     explicitly enable or disable it.\n\"   * disable: If set to 1, turns off this behavior (removes the autocommand group).\n\"   * while_in_this_buffer_only: If set to 0 (default), the events will be triggered no matter which\n\"     buffer you are editing. (Only the specified buffer will be checked for changes,\n\"     though, still.) If set to 1, the events will only be triggered while\n\"     editing the specified buffer.\n\"   * more_events: If set to 1 (the default), creates autocommands for the events\n\"     listed above. Set to 0 to not create autocommands for CursorMoved, CursorMovedI,\n\"     (Presumably, having too much going on for those events could slow things down,\n\"     since they are triggered so frequently...)\nfunction! WatchForChanges(bufname, ...)\n  \" Figure out which options are in effect\n  if a:bufname ==# '*'\n    let l:id = 'WatchForChanges'.'AnyBuffer'\n    \" If you try to do checktime *, you'll get E93: More than one match for * is given\n    let l:bufspec = ''\n  else\n    if bufnr(a:bufname) == -1\n      echoerr 'Buffer ' . a:bufname . \" doesn't exist\"\n      return\n    end\n    let l:id = 'WatchForChanges'.bufnr(a:bufname)\n    let l:bufspec = a:bufname\n  end\n  if len(a:000) == 0\n    let l:options = {}\n  else\n    if type(a:1) == type({})\n      let l:options = a:1\n    else\n      echoerr 'Argument must be a Dict'\n    end\n  end\n  let l:autoread    = has_key(l:options, 'autoread')    ? l:options['autoread']    : 0\n  let l:toggle      = has_key(l:options, 'toggle')      ? l:options['toggle']      : 0\n  let l:disable     = has_key(l:options, 'disable')     ? l:options['disable']     : 0\n  let l:more_events = has_key(l:options, 'more_events') ? l:options['more_events'] : 0\n  let l:while_in_this_buffer_only = has_key(l:options, 'while_in_this_buffer_only') ? l:options['while_in_this_buffer_only'] : 0\n  if l:while_in_this_buffer_only\n    let l:event_bufspec = a:bufname\n  else\n    let l:event_bufspec = '*'\n  end\n  let l:reg_saved = @\"\n  \"let autoread_saved = &autoread\n  \" Check to see if the autocommand already exists\n  redir @\"\n    silent! exec 'au '.l:id\n  redir END\n  let l:defined = (@\" !~# 'E216: No such group or event:')\n  \" If not yet defined...\n  if !l:defined\n    if l:autoread\n      if a:bufname ==# '*'\n        set autoread\n      else\n        setlocal autoread\n      end\n    end\n    silent! exec 'augroup '.l:id\n      if a:bufname !=# '*'\n        exec 'au BufDelete    '.a:bufname . \" execute 'au! \".l:id.\"' | execute 'augroup! \".l:id.\"'\"\n      end\n        exec 'au BufEnter     '.l:event_bufspec . ' :checktime '.l:bufspec\n        exec 'au CursorHold   '.l:event_bufspec . ' :checktime '.l:bufspec\n        exec 'au CursorHoldI  '.l:event_bufspec . ' :checktime '.l:bufspec\n      \" The following events might slow things down so we provide a way to disable them...\n      \" vim docs warn:\n      \"   Careful: Don't do anything that the user does\n      \"   not expect or that is slow.\n      if l:more_events\n        exec 'au CursorMoved  '.l:event_bufspec . ' :checktime '.l:bufspec\n        exec 'au CursorMovedI '.l:event_bufspec . ' :checktime '.l:bufspec\n      end\n    augroup END\n  end\n  \" If they want to disable it, or it is defined and they want to toggle it,\n  if l:disable || (l:toggle && l:defined)\n    if l:autoread\n      if a:bufname ==# '*'\n        set noautoread\n      else\n        setlocal noautoread\n      end\n    end\n    \" Using an autogroup allows us to remove it easily with the following\n    \" command. If we do not use an autogroup, we cannot remove this\n    \" single :checktime command\n    \" augroup! checkforupdates\n    silent! exec 'au! '.l:id\n    silent! exec 'augroup! '.l:id\n  end\n  let @\"=l:reg_saved\nendfunction\n\nlet s:autoreadargs={'autoread':1}\nexecute WatchForChanges('*',s:autoreadargs)\n"
  },
  {
    "path": "params.json",
    "content": "{\n  \"name\": \"Vimfiles\",\n  \"tagline\": \"The Vim Configuration. Uses vim-plug to manage plugins.\",\n  \"body\": \"# The Vim Configuration. [![Build Status](https://travis-ci.org/luan/vimfiles.svg?branch=master)](https://travis-ci.org/luan/vimfiles)\\r\\n\\r\\nIf you're trying to use this config checkout this [cheat\\r\\nsheet](https://github.com/luan/vimfiles/wiki/Luan's-Vim-Cheat-Sheet).\\r\\n\\r\\n---\\r\\n\\r\\nThis vimfiles support both standard [vim](http://www.vim.org/) and\\r\\n[neovim](https://neovim.io/), I'd encourage you to give neovim a try.\\r\\n\\r\\nIf you're using neovim follow [this\\r\\nguide](https://github.com/neovim/neovim/wiki/Installing-Neovim) in order to get\\r\\nit properly setup. The autocompletion plugin we use needs [python3\\r\\nsupport](https://neovim.io/doc/user/nvim_python.html) too.\\r\\n\\r\\nIf you're using regular vim make sure to install it with lua support, on ubuntu\\r\\nthat's provided with the `vim-nox` package and on OSX it can be installed with\\r\\nHomebrew by doing `brew install vim --with-lua`.\\r\\n\\r\\n### Table of Contents\\r\\n\\r\\n1. [Using This Configuration](#using-this-configuration)\\r\\n1. [Installation](#installation)\\r\\n  1. [Additional Dependencies](#additional-dependencies)\\r\\n    1. [ctags](#ctags)\\r\\n1. [Updating](#updating)\\r\\n1. [Customizing](#customizing)\\r\\n  1. [Changing Configuration](#changing-configuration)\\r\\n  1. [Adding Plugins](#adding-plugins)\\r\\n1. [Functionality](#functionality)\\r\\n  1. [Defaults Overridden](#defaults-overridden)\\r\\n1. [Screenshots](#screenshots)\\r\\n\\r\\n## Using This Configuration\\r\\n\\r\\nThis configuration is supposed to be used directly, **not** forked. If you intend\\r\\nto keep up to date with changes made to this repo it's recommended that you\\r\\njust clone this repository and customize the config using the [provided\\r\\nhooks](#customizing). If you have a feature or fix to submit, feel free to fork\\r\\nand send a PR.\\r\\n\\r\\n---\\r\\n\\r\\n## Installation\\r\\n\\r\\nAs simple as:\\r\\n```bash\\r\\ncurl vimfiles.luan.sh/install | bash\\r\\n\\r\\n# To override you current config:\\r\\n# curl vimfiles.luan.sh/install | FORCE=1 bash\\r\\n```\\r\\n\\r\\n### Additional Dependencies\\r\\n\\r\\nMost of the dependencies are installed automatically, assuming you have a\\r\\nminimal development environment for you language. For example we download all\\r\\nthe tools for golang and elm automatically.  `git` is assumed to be installed\\r\\nand so is `ag` or `ack`, if either of those is not, some plugins may not behave\\r\\nas expected.\\r\\n\\r\\n#### ctags\\r\\n\\r\\n`ctags` is used to jump to function definitions, it is not strictly necessary if\\r\\nyou don't need that functionality, if you want to be able to jump effectively\\r\\nto definitions install the correct version of ctags.\\r\\n\\r\\n**OSX**\\r\\n\\r\\n```bash\\r\\nbrew uninstall ctags\\r\\nbrew tap universal-ctags/universal-ctags\\r\\nbrew install universal-ctags --HEAD\\r\\n```\\r\\n\\r\\n**Linux**\\r\\n\\r\\n*exuberant-ctags* from your OS is generally enough for most things, but if you\\r\\nwant more CSS, ruby and other goodnesses you will need to manually compile and\\r\\nreplace your ctags installation with: https://github.com/fishman/ctags\\r\\n\\r\\n\\r\\n---\\r\\n\\r\\n## Updating\\r\\n\\r\\nYou should frequently update you copy of this config, to get latest fixes and\\r\\nimprovements. To do so you can run:\\r\\n```bash\\r\\nvim-update\\r\\n```\\r\\n\\r\\nAssuming `/usr/local/bin` is on your `PATH` on OSX or `~/bin/` on Linux.\\r\\n\\r\\nIf that doesn't work you can always run the script directly:\\r\\n```bash\\r\\n~/.vim/update\\r\\n```\\r\\n\\r\\n---\\r\\n\\r\\n## Customizing\\r\\n\\r\\nWe load 3 extra configuration files that are **NOT** part of this repo:\\r\\n\\r\\n* `~/.vimrc.local.before` (*to open: `,vb`*): Configuration to be set before everything else, this\\r\\n  runs before any plugin or any config from this repository.\\r\\n* `~/.vimrc.local` (*to open: `,vl`*): Configuration to be set after everything else, this runs\\r\\n  after all other configuration is loaded and all plugins are setup.\\r\\n* `~/.vimrc.local.plugins` (*to open: `,vp`*): Extra plugins to be loaded (along with maybe\\r\\n  optional configuration for them). Is loaded after all the default plugins are\\r\\n  installed.\\r\\n\\r\\nA common pattern is for individuals or teams to have those 3 files checked in\\r\\nto a separate [dotfiles](https://github.com/luan/dotfiles) repository and have\\r\\nthem be symlinked into your `$HOME` directory. Symlink them before you run the\\r\\ninstall script and everything should work.\\r\\n\\r\\n### Changing Configuration\\r\\n\\r\\nYou might want to change some config such as disabling autocompletion or\\r\\nenabling auto save, or maybe just changing your colorscheme.  You can do so by\\r\\nediting the `~/.vimrc.local` file, for example:\\r\\n\\r\\nChanging colorscheme:\\r\\n```vim\\r\\ncolorscheme gruvbox\\r\\n```\\r\\n\\r\\nEnabling auto save:\\r\\n```vim\\r\\n\\\" will save automatically when leaving the buffer\\r\\n\\\" 0 or 1, defaults 0\\r\\nlet g:autosave = 1\\r\\n```\\r\\n\\r\\nDisabling neocomplete:\\r\\n```vim\\r\\nlet g:neocomplete#enable_at_startup = 0   \\\" disable neocomplete\\r\\nlet g:neocomplcache_enable_at_startup = 0 \\\" disable the fallback version when no LUA\\r\\n```\\r\\n\\r\\nSome configuration values need to be set before loading plugins, for that we\\r\\nhave the `~/.vimrc.local.before`, that get's loaded before everything else, one\\r\\nexample usage of it is enabling fancy characters for the airline plugin:\\r\\n```vim\\r\\nlet g:airline_powerline_fonts = 1\\r\\n```\\r\\n\\r\\n### Adding Plugins\\r\\n\\r\\nIf you have a favorite plugin you want to install but couldn't convince me to\\r\\nadd it as a default you can still have it be installed by just putting it in\\r\\nthe `~/.vimrc.local.plugins`, like such:\\r\\n```vim\\r\\n\\\" Plugin to navigate between camelCase words\\r\\nPlug 'bkad/CamelCaseMotion'\\r\\n```\\r\\n\\r\\n---\\r\\n\\r\\n## Functionality\\r\\n\\r\\nThis config packs a considerable amount of plugins, there are descriptions for\\r\\nmost of them [here](Plug.vim) in the comments. It also strives to not override\\r\\ndefault behavior, although that's not always possible.\\r\\n\\r\\nThere's [space to write some\\r\\nguides](https://github.com/luan/vimfiles/issues/56) as to how to effectively\\r\\nuse this config for certain languages. The main targets are golang and ruby,\\r\\nalthough this configuration should be usable with most languages.\\r\\n\\r\\n### Defaults Overridden\\r\\n\\r\\nThese bindings are known to be overridden in this config. Please open an\\r\\n[issue](https://github.com/luan/vimfiles/issues/new) if you find any other.\\r\\n* `|`: Default behavior is jump to column. We have it set to `:NERDTreeFocus`.\\r\\n* `,`: Default is reverse repeat a `f`, `t`, `F`, or `T` search. We have it set to `<leader>`.\\r\\n* `\\\\`: Is the default `<leader>`. We have it set to `:NERDTreeToggle`.\\r\\n* `<enter>` or `<cr>`: Default behavior is to move the cursor one line down. We\\r\\n  have it set to save if modified (basically `:w` when the file has a change).\\r\\n\\r\\nA lot of small defaults are overridden everywhere else, and those are just to\\r\\nmake editing a better experience and should in no way make this vim not feel\\r\\nlike vim. For a glance in some of the changes look at\\r\\n[config/basic.vim](config/basic.vim).\\r\\n\\r\\nA few overridden are worth mentioning:\\r\\n\\r\\n```vim\\r\\nset splitright\\r\\n```\\r\\nThese change where new splits are open, when you for example do `:vs` the\\r\\ndefault behavior is to open a split on the left, it feels more natural to open\\r\\none on the right instead.\\r\\n\\r\\n```vim\\r\\nset iskeyword+=$,@,-\\r\\n```\\r\\nAdd extra characters that are valid parts of variables.\\r\\n\\r\\n---\\r\\n\\r\\n## Screenshots\\r\\n\\r\\n**Default colorscheme: hybrid**\\r\\n\\r\\n[![hybrid](https://github.com/luan/vimfiles/raw/master/screenshots/hybrid.png)](https://github.com/luan/vimfiles/raw/master/screenshots/hybrid.png)\\r\\n\\r\\n**Alternate colorscheme: monokai**\\r\\n\\r\\n[![monokai](https://github.com/luan/vimfiles/raw/master/screenshots/monokai.png)](https://github.com/luan/vimfiles/raw/master/screenshots/monokai.png)\\r\\n\\r\\n\",\n  \"note\": \"Don't delete this file! It's used internally to help with page regeneration.\"\n}"
  },
  {
    "path": "scripts/gotags",
    "content": "#!/bin/bash\n\nif mkdir \"$LOCKDIR\"\nthen\n\tgotags -silent -L <(find . -iname '*.go') > \"$1\"\n\tgotags -silent -L <(find \"$(go env GOROOT GOPATH)\" -iname '*.go') > \"$2\"\n\trmdir \"$LOCKDIR\"\nfi\n"
  },
  {
    "path": "scripts/test",
    "content": "#!/bin/bash\n\nset -xeu\n\necho \"PATH: $PATH\"\necho \"Using vim: $(which vim)\"\nvim --version\n\nfind config lib -name '*.vim' -print0 | xargs -0 vint -c vimrc\nln -s \"$PWD\" \"$HOME/.vim\"\nmkdir -p \"$HOME/bin\"\n\nif [ \"$ENV\" == \"vim8\" ]; then\n  ./bin/install\nelif [ \"$ENV\" == \"neovim\" ]; then\n  ./bin/install --non-interactive\nfi\n"
  },
  {
    "path": "stylesheets/github-light.css",
    "content": "/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 GitHub, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\n.pl-c /* comment */ {\n  color: #969896;\n}\n\n.pl-c1 /* constant, variable.other.constant, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header */,\n.pl-s .pl-v /* string variable */ {\n  color: #0086b3;\n}\n\n.pl-e /* entity */,\n.pl-en /* entity.name */ {\n  color: #795da3;\n}\n\n.pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */,\n.pl-s .pl-s1 /* string source */ {\n  color: #333;\n}\n\n.pl-ent /* entity.name.tag */ {\n  color: #63a35c;\n}\n\n.pl-k /* keyword, storage, storage.type */ {\n  color: #a71d5d;\n}\n\n.pl-s /* string */,\n.pl-pds /* punctuation.definition.string, string.regexp.character-class */,\n.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,\n.pl-sr /* string.regexp */,\n.pl-sr .pl-cce /* string.regexp constant.character.escape */,\n.pl-sr .pl-sre /* string.regexp source.ruby.embedded */,\n.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ {\n  color: #183691;\n}\n\n.pl-v /* variable */ {\n  color: #ed6a43;\n}\n\n.pl-id /* invalid.deprecated */ {\n  color: #b52a1d;\n}\n\n.pl-ii /* invalid.illegal */ {\n  color: #f8f8f8;\n  background-color: #b52a1d;\n}\n\n.pl-sr .pl-cce /* string.regexp constant.character.escape */ {\n  font-weight: bold;\n  color: #63a35c;\n}\n\n.pl-ml /* markup.list */ {\n  color: #693a17;\n}\n\n.pl-mh /* markup.heading */,\n.pl-mh .pl-en /* markup.heading entity.name */,\n.pl-ms /* meta.separator */ {\n  font-weight: bold;\n  color: #1d3e81;\n}\n\n.pl-mq /* markup.quote */ {\n  color: #008080;\n}\n\n.pl-mi /* markup.italic */ {\n  font-style: italic;\n  color: #333;\n}\n\n.pl-mb /* markup.bold */ {\n  font-weight: bold;\n  color: #333;\n}\n\n.pl-md /* markup.deleted, meta.diff.header.from-file */ {\n  color: #bd2c00;\n  background-color: #ffecec;\n}\n\n.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {\n  color: #55a532;\n  background-color: #eaffea;\n}\n\n.pl-mdr /* meta.diff.range */ {\n  font-weight: bold;\n  color: #795da3;\n}\n\n.pl-mo /* meta.output */ {\n  color: #1d3e81;\n}\n\n"
  },
  {
    "path": "stylesheets/normalize.css",
    "content": "/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; /* 1 */\n  font: inherit; /* 2 */\n  margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n  cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */ /* 2 */\n  box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"
  },
  {
    "path": "stylesheets/stylesheet.css",
    "content": "* {\n  box-sizing: border-box; }\n\nbody {\n  padding: 0;\n  margin: 0;\n  font-family: \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 16px;\n  line-height: 1.5;\n  color: #606c71; }\n\na {\n  color: #1e6bb8;\n  text-decoration: none; }\n  a:hover {\n    text-decoration: underline; }\n\n.btn {\n  display: inline-block;\n  margin-bottom: 1rem;\n  color: rgba(255, 255, 255, 0.7);\n  background-color: rgba(255, 255, 255, 0.08);\n  border-color: rgba(255, 255, 255, 0.2);\n  border-style: solid;\n  border-width: 1px;\n  border-radius: 0.3rem;\n  transition: color 0.2s, background-color 0.2s, border-color 0.2s; }\n  .btn + .btn {\n    margin-left: 1rem; }\n\n.btn:hover {\n  color: rgba(255, 255, 255, 0.8);\n  text-decoration: none;\n  background-color: rgba(255, 255, 255, 0.2);\n  border-color: rgba(255, 255, 255, 0.3); }\n\n@media screen and (min-width: 64em) {\n  .btn {\n    padding: 0.75rem 1rem; } }\n\n@media screen and (min-width: 42em) and (max-width: 64em) {\n  .btn {\n    padding: 0.6rem 0.9rem;\n    font-size: 0.9rem; } }\n\n@media screen and (max-width: 42em) {\n  .btn {\n    display: block;\n    width: 100%;\n    padding: 0.75rem;\n    font-size: 0.9rem; }\n    .btn + .btn {\n      margin-top: 1rem;\n      margin-left: 0; } }\n\n.page-header {\n  color: #fff;\n  text-align: center;\n  background-color: #159957;\n  background-image: linear-gradient(120deg, #155799, #159957); }\n\n@media screen and (min-width: 64em) {\n  .page-header {\n    padding: 5rem 6rem; } }\n\n@media screen and (min-width: 42em) and (max-width: 64em) {\n  .page-header {\n    padding: 3rem 4rem; } }\n\n@media screen and (max-width: 42em) {\n  .page-header {\n    padding: 2rem 1rem; } }\n\n.project-name {\n  margin-top: 0;\n  margin-bottom: 0.1rem; }\n\n@media screen and (min-width: 64em) {\n  .project-name {\n    font-size: 3.25rem; } }\n\n@media screen and (min-width: 42em) and (max-width: 64em) {\n  .project-name {\n    font-size: 2.25rem; } }\n\n@media screen and (max-width: 42em) {\n  .project-name {\n    font-size: 1.75rem; } }\n\n.project-tagline {\n  margin-bottom: 2rem;\n  font-weight: normal;\n  opacity: 0.7; }\n\n@media screen and (min-width: 64em) {\n  .project-tagline {\n    font-size: 1.25rem; } }\n\n@media screen and (min-width: 42em) and (max-width: 64em) {\n  .project-tagline {\n    font-size: 1.15rem; } }\n\n@media screen and (max-width: 42em) {\n  .project-tagline {\n    font-size: 1rem; } }\n\n.main-content :first-child {\n  margin-top: 0; }\n.main-content img {\n  max-width: 100%; }\n.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 {\n  margin-top: 2rem;\n  margin-bottom: 1rem;\n  font-weight: normal;\n  color: #159957; }\n.main-content p {\n  margin-bottom: 1em; }\n.main-content code {\n  padding: 2px 4px;\n  font-family: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n  font-size: 0.9rem;\n  color: #383e41;\n  background-color: #f3f6fa;\n  border-radius: 0.3rem; }\n.main-content pre {\n  padding: 0.8rem;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  font: 1rem Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n  color: #567482;\n  word-wrap: normal;\n  background-color: #f3f6fa;\n  border: solid 1px #dce6f0;\n  border-radius: 0.3rem; }\n  .main-content pre > code {\n    padding: 0;\n    margin: 0;\n    font-size: 0.9rem;\n    color: #567482;\n    word-break: normal;\n    white-space: pre;\n    background: transparent;\n    border: 0; }\n.main-content .highlight {\n  margin-bottom: 1rem; }\n  .main-content .highlight pre {\n    margin-bottom: 0;\n    word-break: normal; }\n.main-content .highlight pre, .main-content pre {\n  padding: 0.8rem;\n  overflow: auto;\n  font-size: 0.9rem;\n  line-height: 1.45;\n  border-radius: 0.3rem; }\n.main-content pre code, .main-content pre tt {\n  display: inline;\n  max-width: initial;\n  padding: 0;\n  margin: 0;\n  overflow: initial;\n  line-height: inherit;\n  word-wrap: normal;\n  background-color: transparent;\n  border: 0; }\n  .main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after {\n    content: normal; }\n.main-content ul, .main-content ol {\n  margin-top: 0; }\n.main-content blockquote {\n  padding: 0 1rem;\n  margin-left: 0;\n  color: #819198;\n  border-left: 0.3rem solid #dce6f0; }\n  .main-content blockquote > :first-child {\n    margin-top: 0; }\n  .main-content blockquote > :last-child {\n    margin-bottom: 0; }\n.main-content table {\n  display: block;\n  width: 100%;\n  overflow: auto;\n  word-break: normal;\n  word-break: keep-all; }\n  .main-content table th {\n    font-weight: bold; }\n  .main-content table th, .main-content table td {\n    padding: 0.5rem 1rem;\n    border: 1px solid #e9ebec; }\n.main-content dl {\n  padding: 0; }\n  .main-content dl dt {\n    padding: 0;\n    margin-top: 1rem;\n    font-size: 1rem;\n    font-weight: bold; }\n  .main-content dl dd {\n    padding: 0;\n    margin-bottom: 1rem; }\n.main-content hr {\n  height: 2px;\n  padding: 0;\n  margin: 1rem 0;\n  background-color: #eff0f1;\n  border: 0; }\n\n@media screen and (min-width: 64em) {\n  .main-content {\n    max-width: 64rem;\n    padding: 2rem 6rem;\n    margin: 0 auto;\n    font-size: 1.1rem; } }\n\n@media screen and (min-width: 42em) and (max-width: 64em) {\n  .main-content {\n    padding: 2rem 4rem;\n    font-size: 1.1rem; } }\n\n@media screen and (max-width: 42em) {\n  .main-content {\n    padding: 2rem 1rem;\n    font-size: 1rem; } }\n\n.site-footer {\n  padding-top: 2rem;\n  margin-top: 2rem;\n  border-top: solid 1px #eff0f1; }\n\n.site-footer-owner {\n  display: block;\n  font-weight: bold; }\n\n.site-footer-credits {\n  color: #819198; }\n\n@media screen and (min-width: 64em) {\n  .site-footer {\n    font-size: 1rem; } }\n\n@media screen and (min-width: 42em) and (max-width: 64em) {\n  .site-footer {\n    font-size: 1rem; } }\n\n@media screen and (max-width: 42em) {\n  .site-footer {\n    font-size: 0.9rem; } }\n"
  },
  {
    "path": "tmp/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "vimrc",
    "content": "\" =======================================\n\" Initially based on/forked from: Jeremy Mack (@mutewinter)\n\" [http://github.com/luan/vimfiles]\n\" Maintained By: Luan Santos (GitHub: @luan)\n\" =======================================\n\nsilent! source ~/.vimrc.local.before\n\nruntime! Plug.vim\n\nruntime! config/basic.vim\nruntime! config/bindings.vim\nruntime! config/colors.vim\nruntime! config/paste.vim\n\n\" ----------------------------------------\n\" Plugin Configuration\n\" ----------------------------------------\n\nruntime! config/plugin/ack.vim\nruntime! config/plugin/airline.vim\nruntime! config/plugin/ale.vim\nruntime! config/plugin/autoformat.vim\nruntime! config/plugin/better-whitespace.vim\nruntime! config/plugin/fugitive.vim\nruntime! config/plugin/livedown.vim\nruntime! config/plugin/goyo.vim\nruntime! config/plugin/multicursor.vim\nruntime! config/plugin/ncm.vim\nruntime! config/plugin/nerdtree.vim\nruntime! config/plugin/signify.vim\nruntime! config/plugin/tagbar.vim\nruntime! config/plugin/tcomment.vim\nruntime! config/plugin/ultisnips.vim\nruntime! config/plugin/undotree.vim\n\nif has('gui_running')\n  runtime! config/plugin/ctrlp.vim\nelse\n  runtime! config/plugin/fzf.vim\nend\n\n\" ----------------------------------------\n\" Language Configuration\n\" ----------------------------------------\n\nruntime! config/lang/c.vim\nruntime! config/lang/crontab.vim\nruntime! config/lang/elm.vim\nruntime! config/lang/golang.vim\nruntime! config/lang/javascript.vim\nruntime! config/lang/markdown.vim\nruntime! config/lang/ruby.vim\nruntime! config/lang/rust.vim\nruntime! config/lang/vue.vim\nruntime! config/lang/yaml.vim\n\n\" ----------------------------------------\n\" Lib load path\n\" ----------------------------------------\n\nruntime! lib/functions.vim\nruntime! lib/autocommands.vim\nruntime! lib/watchforchanges.vim\n\nsilent! source ~/.vimrc.local\n\n"
  }
]