[
  {
    "path": ".gitignore",
    "content": "*~\n/benchmarks/\n/spell/\n/.vault.vim\n/.local.vimrc\n/.stignore\n/.stfolder\n/.stversions\n.vim\n"
  },
  {
    "path": "Makefile",
    "content": "SHELL = /bin/bash\nvim := $(if $(shell which nvim),nvim,$(shell which vim))\nvim_version := '${shell $(vim) --version}'\nXDG_CACHE_HOME ?= $(HOME)/.cache\n\ndefault: install\n\ninstall: create-dirs update-plugins\n\nupdate: update-repo update-plugins\n\nupgrade: update\n\ncreate-dirs:\n\t@mkdir -vp \"$(XDG_CACHE_HOME)/vim/\"{backup,session,swap,tags,undo}\n\nupdate-repo:\n\tgit pull --ff --ff-only\n\nupdate-plugins:\n\t$(vim) -V1 -es -i NONE -N --noplugin -u config/init.vim \\\n\t\t-c \"try | call dein#clear_state() | call dein#update() | finally | messages | qall! | endtry\"\n\nuninstall:\n\trm -rf \"$(XDG_CACHE_HOME)/vim\"\n\ntest:\nifeq ('$(vim)','nvim')\n\t$(info Testing NVIM 0.5+...)\n\t$(if $(shell echo \"$(vim_version)\" | egrep \"NVIM v0\\.[5-9]\"),\\\n\t\t$(info OK),\\\n\t\t$(error   .. You need Neovim 0.5.x or newer))\nelse\n\t$(info Testing VIM 8.x...)\n\t$(if $(shell echo \"$(vim_version)\" | egrep \"VIM .* 8\\.\"),\\\n\t\t$(info OK),\\\n\t\t$(error   .. You need Vim 8.x))\n\n\t$(info Testing +python3... )\n\t$(if $(findstring +python3,$(vim_version)),\\\n\t\t$(info OK),\\\n\t\t$(error .. MISSING! Install Vim 8.x with \"+python3\" enabled))\nendif\n\t@echo All tests passed, hooray!\n\n.PHONY: install create-dirs update-repo update-plugins uninstall test\n"
  },
  {
    "path": "README.md",
    "content": "# Rafael Bodill's Neo/vim Config\n\nLean mean Neo/vim machine, 30-45ms startup time.\n\nBest with [Neovim] 0.5.x or [Vim] 8.x and `python3` enabled.\n\n> I encourage you to fork this repo and create your own experience.\n> Learn how to tweak and change Neo/vim to the way YOU like it.\n> This is my cultivation of years of tweaking, use it as a git remote\n> and stay in-touch with upstream for reference or cherry-picking.\n\n<details>\n  <summary>\n    <strong>Table of Contents</strong>\n    <small><i>(🔎 Click to expand/collapse)</i></small>\n  </summary>\n\n<!-- vim-markdown-toc GFM -->\n\n* [Features](#features)\n* [Screenshot](#screenshot)\n* [Prerequisites](#prerequisites)\n* [Install](#install)\n* [Language-Server Protocol (LSP)](#language-server-protocol-lsp)\n* [Upgrade](#upgrade)\n  * [Recommended Fonts](#recommended-fonts)\n  * [Recommended Linters](#recommended-linters)\n  * [Recommended Tools](#recommended-tools)\n* [User Custom Config](#user-custom-config)\n* [Structure](#structure)\n* [Plugin Highlights](#plugin-highlights)\n* [Plugins Included](#plugins-included)\n  * [Non Lazy-Loaded Plugins](#non-lazy-loaded-plugins)\n  * [Lazy-Loaded Plugins](#lazy-loaded-plugins)\n    * [Language](#language)\n    * [Commands](#commands)\n    * [Interface](#interface)\n    * [Completion & Code-Analysis](#completion--code-analysis)\n    * [Denite & Clap](#denite--clap)\n    * [Operators & Text Objects](#operators--text-objects)\n* [Custom Key-mappings](#custom-key-mappings)\n  * [Navigation](#navigation)\n  * [File Operations](#file-operations)\n  * [Edit](#edit)\n  * [Search & Replace](#search--replace)\n  * [Clipboard](#clipboard)\n  * [Command & History](#command--history)\n  * [Editor UI](#editor-ui)\n  * [Custom Tools & Plugins](#custom-tools--plugins)\n  * [Window Management](#window-management)\n  * [Git Version Control](#git-version-control)\n  * [Plugin: Denite](#plugin-denite)\n  * [Plugin: Defx](#plugin-defx)\n  * [Plugin: Clap](#plugin-clap)\n  * [Plugin: Asyncomplete and Emmet](#plugin-asyncomplete-and-emmet)\n  * [Plugin: Any-Jump](#plugin-any-jump)\n  * [Plugin: Signature](#plugin-signature)\n* [Credits & Contribution](#credits--contribution)\n\n<!-- vim-markdown-toc -->\n</details>\n\n## Features\n\n* Fast startup time\n* Robust, yet light-weight\n* Lazy-load 95% of plugins with [Shougo/dein.vim]\n* Custom side-menu (try it out! <kbd>Space</kbd>+<kbd>l</kbd>)\n* Custom context-menu (try it! <kbd>;</kbd>+<kbd>c</kbd>)\n* Modular configuration (see [structure](#structure))\n* Auto-complete [prabirshrestha/asyncomplete.vim] extensive setup\n* [Shougo/denite.nvim] centric work-flow (lists)\n* Structure view with [liuchengxu/vista.vim]\n* Open SCM detailed URL in OS browser\n* Light-weight but informative status/tabline\n* Easy customizable theme\n* Premium color-schemes\n* Central location for tags and sessions\n\n## Screenshot\n\n![Vim screenshot](http://rafi.io/static/img/project/vim-config/features.png)\n\n## Prerequisites\n\n* Python 3 (`brew install python`)\n* Neovim or Vim (`brew install neovim` and/or `brew install vim`)\n\n*Caveat*: You must have **one** of these tools installed:\n[yj](https://github.com/sclevine/yj), [yq](https://github.com/mikefarah/yq),\n[yaml2json](https://github.com/bronze1man/yaml2json), Ruby, or Python with\nPyYAML in-order for the YAML configuration to be parsed.\n\n## Install\n\n**_1._** Let's clone this repo! Clone to `~/.config/nvim`,\nwe'll also symlink it for regular Vim:\n\n```bash\nmkdir ~/.config\ngit clone git://github.com/PegasusWang/vim-config.git ~/.config/nvim\ncd ~/.config/nvim\nln -s ~/.config/nvim ~/.vim  # For \"regular\" Vim\n```\n\n* _**Note**:_ If you set a custom `$XDG_CONFIG_HOME`,\n  use that instead of `~/.config` in the commands above.\n  Neovim follows the XDG base-directories convention, Vim doesn't.\n\n**_2._** Install the Python 3 `pynvim` library. This is also needed for Vim 8\nif you want to use Denite and Defx.\n\n> Neovim: `./venv.sh` or `pip3 install --user pynvim`\n\n> Vim: `pip3 install --user pynvim`\n\n**_3._** Run `make test` to test your nvim/vim version and capabilities.\n\n**_4._** Run `make` to install all plugins.\n\n**_5._** If you are experiencing problems, run and read `nvim -c checkhealth`\n\nTest Python 3 availability with `:py3 print(sys.version_info)`\n\nEnjoy! :smile:\n\n## Language-Server Protocol (LSP)\n\nTo leverage LSP auto-completions and other functionalities, once you open a\nfile in Neo/vim, run `:LspInstallServer <name>` to use [mattn/vim-lsp-settings]\ninstallation feature, use <kbd>Tab</kbd> to list available servers.\n\nHere are a few useful commands:\n* For example, open a `.go` file, and run: `:LspInstallServer gopls`\n* In a `go` file, use action `:LspCodeAction source.organizeImports`\n* See [config/plugins/lsp.vim] for special code intellisense mappings\n\n## Upgrade\n\n```bash\ncd ~/.config/nvim\nmake update\n```\n\nThis will run `git pull --ff --ff-only` and update all plugins using\n[Shougo/dein.vim] package-manager (`:call dein#update()`).\n\n### Recommended Fonts\n\n* [Pragmata Pro] (€19 – €1,990): My preferred font\n* Any of the [Nerd Fonts]\n\nOn macOS with Homebrew, choose one of the [Nerd Fonts],\nfor example, to install the [Hack](https://sourcefoundry.org/hack/) font:\n\n```bash\nbrew tap homebrew/cask-fonts\nbrew search nerd-font\nbrew cask install font-hack-nerd-font\nbrew cask install font-iosevka-nerd-font-mono\nbrew cask install font-jetbrains-mono\nbrew cask install font-fira-code\n```\n\n[Pragmata Pro]: https://www.fsd.it/shop/fonts/pragmatapro/\n[Nerd Fonts]: https://www.nerdfonts.com\n\n### Recommended Linters\n\n* macOS with Homebrew:\n\n```sh\nbrew install shellcheck jsonlint yamllint tflint ansible-lint\nbrew install tidy-html5 proselint write-good\n```\n\n* Node.js based linters:\n\n```sh\nyarn global add eslint jshint jsxhint stylelint sass-lint\nyarn global add markdownlint-cli raml-cop\n```\n\n* Python based linters:\n\n```sh\npip3 install --user vim-vint pycodestyle pyflakes flake8\n```\n\n### Recommended Tools\n\n* **ag** [ggreer/the_silver_searcher](https://github.com/ggreer/the_silver_searcher)\n  (macOS: `brew install the_silver_searcher`)\n  * and/or **ripgrep**: [BurntSushi/ripgrep](https://github.com/BurntSushi/ripgrep)\n  (macOS: `brew install rg`)\n* Jump around with **z**: [rupa/z](https://github.com/rupa/z)\n  (macOS: `brew install z`)\n  * or **z.lua**: [acme/zlua](https://github.com/skywind3000/z.lua)\n* **[Universal ctags](https://ctags.io/)** for syntax tokenization\n  (macOS: `brew install universal-ctags/universal-ctags/universal-ctags`)\n* Fuzzy file finders:\n  **[fzf](https://github.com/junegunn/fzf)**,\n  **[fzy](https://github.com/jhawthorn/fzy)**, or\n  **[peco](https://github.com/peco/peco)**\n  (macOS: `brew install fzf`)\n\n## User Custom Config\n\nIf you want to add your own configuration, create the `config/local.vim` file\nand add your personal vimscript there. If you'd like to install plugins by\nyourself, create a `config/local.plugins.yaml` file and manage your own plugin\ncollection.\n\nIf you want to disable some of the plugins I use, you can overwrite them, e.g.:\n\n```yaml\n- { repo: mattn/vim-lsp-settings, if: 0 }\n```\n\n### Disable built-in statusline & tabline\n\nYou can use your local `config/local.vim` to disable status and tab lines:\n\n```vim\nlet g:tabline_plugin_enable = 0\nlet g:statusline_plugin_enable = 0\n```\n\nNow, using `config/local.plugins.yaml` you can install any line plugin you\nwant, _e.g._:\n\n```yaml\n# Use only one!\n- repo: itchyny/lightline.vim\n- repo: vim-airline/vim-airline\n- repo: glepnir/galaxyline.nvim\n- repo: glepnir/spaceline.vim\n- repo: liuchengxu/eleline.vim\n```\n\n## Structure\n\n* [config/](./config) - Configuration\n  * [plugins/](./config/plugins) - Plugin configurations\n    * [all.vim](./config/plugins/all.vim) - Plugin mappings\n    * […](./config/plugins)\n  * [filetype.vim](./config/filetype.vim) - Language behavior\n  * [general.vim](./config/general.vim) - General configuration\n  * **local.plugins.yaml** - Custom user plugins\n  * **local.vim** - Custom user settings\n  * [mappings.vim](./config/mappings.vim) - Key-mappings\n  * [plugins.yaml](./config/plugins.yaml) - My favorite _**Plugins!**_\n  * [terminal.vim](./config/terminal.vim) - Terminal configuration\n  * [vimrc](./config/vimrc) - Initialization\n* [ftplugin/](./ftplugin) - Language specific custom settings\n* [plugin/](./plugin) - Customized small plugins\n* [snippets/](./snippets) - Personal code snippets\n* [themes/](./themes) - Colorscheme overrides\n* [filetype.vim](./filetype.vim) - Custom filetype detection\n\n## Plugin Highlights\n\n* Plugin management with cache and lazy loading for speed\n* Auto-completion with Language-Server Protocol (LSP)\n* Project-aware tabs and labels\n* Defx as file-manager + Git status icons\n* Extensive language extensions library\n\n_Note_ that 95% of the plugins are **[lazy-loaded]**.\n\n## Plugins Included\n\n<details open>\n  <summary><strong>List</strong> <small><i>(🔎 Click to expand/collapse)</i></small></summary>\n\n### Non Lazy-Loaded Plugins\n\n| Name           | Description\n| -------------- | ----------------------\n| [Shougo/dein.vim] | Dark powered Vim/Neovim plugin manager\n| [rafi/awesome-colorschemes] | Awesome color-schemes\n| [thinca/vim-localrc] | Enable configuration file of each directory\n| [romainl/vim-cool] | Simple plugin that makes hlsearch more useful\n| [sgur/vim-editorconfig] | EditorConfig plugin written entirely in Vimscript\n| [christoomey/tmux-navigator] | Seamless navigation between tmux panes and vim splits\n| [tpope/vim-sleuth] | Heuristically set buffer indent options\n| [antoinemadec/FixCursorHold.nvim] | Neovim CursorHold workaround\n| [roxma/nvim-yarp] | Vim8 remote plugin framework for Neovim\n| [roxma/vim-hug-neovim-rpc] | Vim8 compatibility layer for neovim rpc client\n\n### Lazy-Loaded Plugins\n\n#### Language\n\n| Name           | Description\n| -------------- | ----------------------\n| [hail2u/vim-css3-syntax] | CSS3 syntax support to vim's built-in `syntax/css.vim`\n| [othree/csscomplete.vim] | Updated built-in CSS complete with latest standards\n| [cakebaker/scss-syntax.vim] | Syntax file for scss (Sassy CSS)\n| [groenewege/vim-less] | Syntax for LESS\n| [iloginow/vim-stylus] | Syntax, indentation and autocomplete for Stylus\n| [mustache/vim-mustache-handlebars] | Mustache and handlebars syntax\n| [digitaltoad/vim-pug] | Pug (formerly Jade) syntax and indentation\n| [othree/html5.vim] | HTML5 omnicomplete and syntax\n| [plasticboy/vim-markdown] | Markdown syntax highlighting\n| [pangloss/vim-javascript] | Enhanced Javascript syntax\n| [HerringtonDarkholme/yats.vim] | Advanced TypeScript Syntax Highlighting\n| [MaxMEllon/vim-jsx-pretty] | React JSX syntax pretty highlighting\n| [leafOfTree/vim-svelte-plugin] | Syntax and indent plugin for Svelte\n| [heavenshell/vim-jsdoc] | Generate JSDoc to your JavaScript code\n| [jparise/vim-graphql] | GraphQL file detection, syntax highlighting, and indentation\n| [moll/vim-node] | Superb development with Node.js\n| [kchmck/vim-coffee-script] | CoffeeScript support\n| [elzr/vim-json] | Better JSON support\n| [posva/vim-vue] | Syntax Highlight for Vue.js components\n| [vim-python/python-syntax] | Enhanced version of the original Python syntax\n| [Vimjas/vim-python-pep8-indent] | A nicer Python indentation style\n| [vim-scripts/python_match.vim] | Extend the % motion for Python files\n| [raimon49/requirements.txt.vim] | Python requirements file format\n| [StanAngeloff/php.vim] | Up-to-date PHP syntax file (5.3 – 7.1 support)\n| [tbastos/vim-lua] | Lua 5.3 syntax and indentation improved support\n| [vim-ruby/vim-ruby] | Ruby support\n| [keith/swift.vim] | Swift support\n| [rust-lang/rust.vim] | Rust support\n| [vim-jp/syntax-vim-ex] | Improved Vim syntax highlighting\n| [chrisbra/csv.vim] | Handling column separated data\n| [tpope/vim-git] | Git runtime files\n| [ekalinin/Dockerfile.vim] | Syntax and snippets for Dockerfile\n| [tmux-plugins/vim-tmux] | Plugin for tmux.conf\n| [MTDL9/vim-log-highlighting] | Syntax highlighting for generic log files\n| [cespare/vim-toml] | Syntax for TOML\n| [mboughaba/i3config.vim] | i3 window manager config syntax\n| [dag/vim-fish] | Fish shell edit support\n| [jstrater/mpvim] | Macports portfile configuration files\n| [robbles/logstash.vim] | Highlights logstash configuration files\n| [lifepillar/pgsql.vim] | PostgreSQL syntax and indent\n| [chr4/nginx.vim] | Improved nginx syntax and indent\n| [towolf/vim-helm] | Syntax for Helm templates (yaml + gotmpl + sprig)\n| [udalov/kotlin-vim] | Kotlin syntax and indent\n| [reasonml-editor/vim-reason-plus] | Reason syntax and indent\n| [pearofducks/ansible-vim] | Improved YAML support for Ansible\n| [hashivim/vim-terraform] | Base Terraform integration\n\n#### Commands\n\n| Name           | Description\n| -------------- | ----------------------\n| [Shougo/defx.nvim] | Dark powered file explorer implementation\n| [kristijanhusak/defx-git] | Git status implementation for Defx\n| [kristijanhusak/defx-icons] | Filetype icons for Defx\n| [tyru/caw.vim] | Robust comment plugin with operator support\n| [Shougo/context_filetype.vim] | Context filetype detection for nested code\n| [lambdalisue/fin.vim] | Filter the buffer content in-place\n| [mbbill/undotree] | Ultimate undo history visualizer\n| [jreybert/vimagit] | Ease your git work-flow within Vim\n| [tweekmonster/helpful.vim] | Display vim version numbers in docs\n| [lambdalisue/gina.vim] | Asynchronously control git repositories\n| [mhinz/vim-grepper] | Helps you win at grep\n| [kana/vim-altr] | Switch to the alternate file without interaction\n| [Shougo/vinarise.vim] | Hex editor\n| [guns/xterm-color-table.vim] | Display 256 xterm colors with their RGB equivalents\n| [cocopon/colorswatch.vim] | Generate a beautiful color swatch for the current buffer\n| [dstein64/vim-startuptime] | Visually profile Vim's startup time\n| [lambdalisue/suda.vim] | An alternative sudo.vim for Vim and Neovim\n| [liuchengxu/vim-which-key] | Shows key-bindings in pop-up\n| [brooth/far.vim] | Fast find and replace plugin\n| [pechorin/any-jump.vim] | Jump to any definition and references without overhead\n| [jaawerth/nrun.vim] | \"which\" and \"exec\" functions targeted at local node project bin\n| [Vigemus/iron.nvim] | Interactive REPL over Neovim\n| [kana/vim-niceblock] | Make blockwise Visual mode more useful\n| [t9md/vim-choosewin] | Choose window to use, like tmux's 'display-pane'\n| [wfxr/minimap.vim] | Blazing fast minimap for vim, powered by code-minimap\n| [mzlogin/vim-markdown-toc] | Generate table of contents for Markdown files\n| [reedes/vim-wordy] | Uncover usage problems in your writing\n| [liuchengxu/vista.vim] | Viewer & Finder for LSP symbols and tags in Vim\n| [junegunn/fzf] | Powerful command-line fuzzy finder\n| [junegunn/fzf.vim] | Fzf integration\n| [Ron89/thesaurus_query.vim] | Multi-language thesaurus query and replacement\n\n#### Interface\n\n| Name           | Description\n| -------------- | ----------------------\n| [itchyny/vim-gitbranch] | Lightweight git branch detection\n| [itchyny/vim-parenmatch] | Efficient alternative to the standard matchparen plugin\n| [haya14busa/vim-asterisk] | Improved * motions\n| [rhysd/accelerated-jk] | Up/down movement acceleration\n| [haya14busa/vim-edgemotion] | Jump to the edge of block\n| [t9md/vim-quickhl] | Highlight words quickly\n| [rafi/vim-sidemenu] | Small side-menu useful for terminal users\n| [machakann/vim-highlightedyank] | Make the yanked region apparent\n| [itchyny/cursorword] | Underlines word under cursor\n| [airblade/vim-gitgutter] | Show git changes at Vim gutter and un/stages hunks\n| [kshenoy/vim-signature] | Display and toggle marks\n| [nathanaelkane/vim-indent-guides] | Visually display indent levels in code\n| [rhysd/committia.vim] | Pleasant editing on Git commit messages\n| [junegunn/goyo] | Distraction-free writing\n| [junegunn/limelight] | Hyperfocus-writing\n| [itchyny/calendar.vim] | Calendar application\n| [deris/vim-shot-f] | Highlight characters to move directly with f/t/F/T\n| [vimwiki/vimwiki] | Personal Wiki for Vim\n| [norcalli/nvim-colorizer.lua] | The fastest Neovim colorizer\n\n#### Completion & Code-Analysis\n\n| Name           | Description\n| -------------- | ----------------------\n| [prabirshrestha/async.vim] | Normalize async job control API for Vim and Neovim\n| [prabirshrestha/asyncomplete.vim] | Async-completion in pure Vimscript for Vim8 and Neovim\n| [prabirshrestha/asyncomplete-lsp.vim] | Provide Language Server Protocol autocompletion source\n| [prabirshrestha/vim-lsp] | Async Language Server Protocol plugin for Vim and Neovim\n| [mattn/vim-lsp-settings] | Auto LSP configurations for vim-lsp\n| [Shougo/neco-vim] | Completion source for Vimscript\n| [prabirshrestha/asyncomplete-necovim.vim] | Provides syntax autocomplete via neco-vim\n| [prabirshrestha/asyncomplete-buffer.vim] | Provides buffer autocomplete\n| [prabirshrestha/asyncomplete-tags.vim] | Provides tag autocomplete via vim tagfiles\n| [prabirshrestha/asyncomplete-file.vim] | Provides file autocomplete\n| [wellle/tmux-complete.vim] | Completion of words in adjacent tmux panes\n| [prabirshrestha/asyncomplete-ultisnips.vim] | Provides UltiSnips autocomplete\n| [SirVer/ultisnips] | Ultimate snippet solution\n| [honza/vim-snippets] | Community-maintained snippets for programming languages\n| [mattn/emmet-vim] | Provides support for expanding abbreviations alá emmet\n| [ludovicchabant/vim-gutentags] | Manages your tag files\n| [Raimondi/delimitMate] | Auto-completion for quotes, parens, brackets\n\n#### Denite & Clap\n\n| Name           | Description\n| -------------- | ----------------------\n| [Shougo/denite.nvim] | Dark powered asynchronous unite all interfaces\n| [Shougo/neomru.vim] | Denite plugin for MRU\n| [Shougo/neoyank.vim] | Denite plugin for yank history\n| [Shougo/junkfile.vim] | Denite plugin for temporary files\n| [chemzqm/unite-location] | Denite location & quickfix lists\n| [rafi/vim-denite-session] | Browse and open sessions\n| [rafi/vim-denite-z] | Filter and browse Z (jump around) data file\n| [liuchengxu/vim-clap] | Modern performant generic finder and dispatcher\n\n#### Operators & Text Objects\n\n| Name           | Description\n| -------------- | ----------------------\n| [kana/vim-operator-user] | Define your own custom operators\n| [kana/vim-operator-replace] | Operator to replace text with register content\n| [machakann/vim-sandwich] | Search, select, and edit sandwich text objects\n| [kana/vim-textobj-user] | Create your own text objects\n| [terryma/vim-expand-region] | Visually select increasingly larger regions of text\n| [AndrewRadev/sideways.vim] | Match function arguments\n| [AndrewRadev/splitjoin.vim] | Transition code between multi-line and single-line\n| [AndrewRadev/linediff.vim] | Perform diffs on blocks of code\n| [AndrewRadev/dsf.vim] | Delete surrounding function call\n| [kana/vim-textobj-function] | Text objects for functions\n\n[Shougo/dein.vim]: https://github.com/Shougo/dein.vim\n[rafi/awesome-colorschemes]: https://github.com/rafi/awesome-vim-colorschemes\n[thinca/vim-localrc]: https://github.com/thinca/vim-localrc\n[romainl/vim-cool]: https://github.com/romainl/vim-cool\n[sgur/vim-editorconfig]: https://github.com/sgur/vim-editorconfig\n[christoomey/tmux-navigator]: https://github.com/christoomey/vim-tmux-navigator\n[tpope/vim-sleuth]: https://github.com/tpope/vim-sleuth\n[antoinemadec/FixCursorHold.nvim]: https://github.com/antoinemadec/FixCursorHold.nvim\n[roxma/nvim-yarp]: https://github.com/roxma/nvim-yarp\n[roxma/vim-hug-neovim-rpc]: https://github.com/roxma/vim-hug-neovim-rpc\n\n[hail2u/vim-css3-syntax]: https://github.com/hail2u/vim-css3-syntax\n[othree/csscomplete.vim]: https://github.com/othree/csscomplete.vim\n[cakebaker/scss-syntax.vim]: https://github.com/cakebaker/scss-syntax.vim\n[groenewege/vim-less]: https://github.com/groenewege/vim-less\n[iloginow/vim-stylus]: https://github.com/iloginow/vim-stylus\n[mustache/vim-mustache-handlebars]: https://github.com/mustache/vim-mustache-handlebars\n[digitaltoad/vim-pug]: https://github.com/digitaltoad/vim-pug\n[othree/html5.vim]: https://github.com/othree/html5.vim\n[plasticboy/vim-markdown]: https://github.com/plasticboy/vim-markdown\n[pangloss/vim-javascript]: https://github.com/pangloss/vim-javascript\n[HerringtonDarkholme/yats.vim]: https://github.com/HerringtonDarkholme/yats.vim\n[MaxMEllon/vim-jsx-pretty]: https://github.com/MaxMEllon/vim-jsx-pretty\n[leafOfTree/vim-svelte-plugin]: https://github.com/leafOfTree/vim-svelte-plugin\n[heavenshell/vim-jsdoc]: https://github.com/heavenshell/vim-jsdoc\n[jparise/vim-graphql]: https://github.com/jparise/vim-graphql\n[moll/vim-node]: https://github.com/moll/vim-node\n[kchmck/vim-coffee-script]: https://github.com/kchmck/vim-coffee-script\n[elzr/vim-json]: https://github.com/elzr/vim-json\n[posva/vim-vue]: https://github.com/posva/vim-vue\n[vim-python/python-syntax]: https://github.com/vim-python/python-syntax\n[Vimjas/vim-python-pep8-indent]: https://github.com/Vimjas/vim-python-pep8-indent\n[vim-scripts/python_match.vim]: https://github.com/vim-scripts/python_match.vim\n[raimon49/requirements.txt.vim]: https://github.com/raimon49/requirements.txt.vim\n[StanAngeloff/php.vim]: https://github.com/StanAngeloff/php.vim\n[tbastos/vim-lua]: https://github.com/tbastos/vim-lua\n[vim-ruby/vim-ruby]: https://github.com/vim-ruby/vim-ruby\n[keith/swift.vim]: https://github.com/keith/swift.vim\n[rust-lang/rust.vim]: https://github.com/rust-lang/rust.vim\n[vim-jp/syntax-vim-ex]: https://github.com/vim-jp/syntax-vim-ex\n[chrisbra/csv.vim]: https://github.com/chrisbra/csv.vim\n[tpope/vim-git]: https://github.com/tpope/vim-git\n[ekalinin/Dockerfile.vim]: https://github.com/ekalinin/Dockerfile.vim\n[tmux-plugins/vim-tmux]: https://github.com/tmux-plugins/vim-tmux\n[MTDL9/vim-log-highlighting]: https://github.com/MTDL9/vim-log-highlighting\n[cespare/vim-toml]: https://github.com/cespare/vim-toml\n[mboughaba/i3config.vim]: https://github.com/mboughaba/i3config.vim\n[dag/vim-fish]: https://github.com/dag/vim-fish\n[jstrater/mpvim]: https://github.com/jstrater/mpvim\n[robbles/logstash.vim]: https://github.com/robbles/logstash.vim\n[lifepillar/pgsql.vim]: https://github.com/lifepillar/pgsql.vim\n[chr4/nginx.vim]: https://github.com/chr4/nginx.vim\n[towolf/vim-helm]: https://github.com/towolf/vim-helm\n[udalov/kotlin-vim]: https://github.com/udalov/kotlin-vim\n[reasonml-editor/vim-reason-plus]: https://github.com/reasonml-editor/vim-reason-plus\n[pearofducks/ansible-vim]: https://github.com/pearofducks/ansible-vim\n[hashivim/vim-terraform]: https://github.com/hashivim/vim-terraform\n\n[Shougo/defx.nvim]: https://github.com/Shougo/defx.nvim\n[kristijanhusak/defx-git]: https://github.com/kristijanhusak/defx-git\n[kristijanhusak/defx-icons]: https://github.com/kristijanhusak/defx-icons\n[tyru/caw.vim]: https://github.com/tyru/caw.vim\n[Shougo/context_filetype.vim]: https://github.com/Shougo/context_filetype.vim\n[lambdalisue/fin.vim]: https://github.com/lambdalisue/fin.vim\n[mbbill/undotree]: https://github.com/mbbill/undotree\n[jreybert/vimagit]: https://github.com/jreybert/vimagit\n[tweekmonster/helpful.vim]: https://github.com/tweekmonster/helpful.vim\n[lambdalisue/gina.vim]: https://github.com/lambdalisue/gina.vim\n[mhinz/vim-grepper]: https://github.com/mhinz/vim-grepper\n[kana/vim-altr]: https://github.com/kana/vim-altr\n[Shougo/vinarise.vim]: https://github.com/Shougo/vinarise.vim\n[guns/xterm-color-table.vim]: https://github.com/guns/xterm-color-table.vim\n[cocopon/colorswatch.vim]: https://github.com/cocopon/colorswatch.vim\n[dstein64/vim-startuptime]: https://github.com/dstein64/vim-startuptime\n[lambdalisue/suda.vim]: https://github.com/lambdalisue/suda.vim\n[liuchengxu/vim-which-key]: https://github.com/liuchengxu/vim-which-key\n[brooth/far.vim]: https://github.com/brooth/far.vim\n[pechorin/any-jump.vim]: https://github.com/pechorin/any-jump.vim\n[jaawerth/nrun.vim]: https://github.com/jaawerth/nrun.vim\n[Vigemus/iron.nvim]: https://github.com/Vigemus/iron.nvim\n[kana/vim-niceblock]: https://github.com/kana/vim-niceblock\n[t9md/vim-choosewin]: https://github.com/t9md/vim-choosewin\n[wfxr/minimap.vim]: https://github.com/wfxr/minimap.vim\n[mzlogin/vim-markdown-toc]: https://github.com/mzlogin/vim-markdown-toc\n[reedes/vim-wordy]: https://github.com/reedes/vim-wordy\n[liuchengxu/vista.vim]: https://github.com/liuchengxu/vista.vim\n[junegunn/fzf]: https://github.com/junegunn/fzf\n[junegunn/fzf.vim]: https://github.com/junegunn/fzf.vim\n[Ron89/thesaurus_query.vim]: https://github.com/Ron89/thesaurus_query.vim\n\n[itchyny/vim-gitbranch]: https://github.com/itchyny/vim-gitbranch\n[itchyny/vim-parenmatch]: https://github.com/itchyny/vim-parenmatch\n[haya14busa/vim-asterisk]: https://github.com/haya14busa/vim-asterisk\n[rhysd/accelerated-jk]: https://github.com/rhysd/accelerated-jk\n[haya14busa/vim-edgemotion]: https://github.com/haya14busa/vim-edgemotion\n[t9md/vim-quickhl]: https://github.com/t9md/vim-quickhl\n[rafi/vim-sidemenu]: https://github.com/rafi/vim-sidemenu\n[machakann/vim-highlightedyank]: https://github.com/machakann/vim-highlightedyank\n[itchyny/cursorword]: https://github.com/itchyny/vim-cursorword\n[airblade/vim-gitgutter]: https://github.com/airblade/vim-gitgutter\n[kshenoy/vim-signature]: https://github.com/kshenoy/vim-signature\n[nathanaelkane/vim-indent-guides]: https://github.com/nathanaelkane/vim-indent-guides\n[rhysd/committia.vim]: https://github.com/rhysd/committia.vim\n[junegunn/goyo]: https://github.com/junegunn/goyo.vim\n[junegunn/limelight]: https://github.com/junegunn/limelight.vim\n[itchyny/calendar.vim]: https://github.com/itchyny/calendar.vim\n[deris/vim-shot-f]: https://github.com/deris/vim-shot-f\n[vimwiki/vimwiki]: https://github.com/vimwiki/vimwiki\n[norcalli/nvim-colorizer.lua]: https://github.com/norcalli/nvim-colorizer.lua\n\n[prabirshrestha/async.vim]: https://github.com/prabirshrestha/async.vim\n[prabirshrestha/asyncomplete.vim]: https://github.com/prabirshrestha/asyncomplete.vim\n[prabirshrestha/asyncomplete-lsp.vim]: https://github.com/prabirshrestha/asyncomplete-lsp.vim\n[prabirshrestha/vim-lsp]: https://github.com/prabirshrestha/vim-lsp\n[mattn/vim-lsp-settings]: https://github.com/mattn/vim-lsp-settings\n[Shougo/neco-vim]: https://github.com/Shougo/neco-vim\n[prabirshrestha/asyncomplete-necovim.vim]: https://github.com/prabirshrestha/asyncomplete-necovim.vim\n[prabirshrestha/asyncomplete-buffer.vim]: https://github.com/prabirshrestha/asyncomplete-buffer.vim\n[prabirshrestha/asyncomplete-tags.vim]: https://github.com/prabirshrestha/asyncomplete-tags.vim\n[prabirshrestha/asyncomplete-file.vim]: https://github.com/prabirshrestha/asyncomplete-file.vim\n[wellle/tmux-complete.vim]: https://github.com/wellle/tmux-complete.vim\n[prabirshrestha/asyncomplete-ultisnips.vim]: https://github.com/prabirshrestha/asyncomplete-ultisnips.vim\n[SirVer/ultisnips]: https://github.com/SirVer/ultisnips\n[honza/vim-snippets]: https://github.com/honza/vim-snippets\n[mattn/emmet-vim]: https://github.com/mattn/emmet-vim\n[ludovicchabant/vim-gutentags]: https://github.com/ludovicchabant/vim-gutentags\n[Raimondi/delimitMate]: https://github.com/Raimondi/delimitMate\n\n[Shougo/denite.nvim]: https://github.com/Shougo/denite.nvim\n[Shougo/neomru.vim]: https://github.com/Shougo/neomru.vim\n[Shougo/neoyank.vim]: https://github.com/Shougo/neoyank.vim\n[Shougo/junkfile.vim]: https://github.com/Shougo/junkfile.vim\n[chemzqm/unite-location]: https://github.com/chemzqm/unite-location\n[rafi/vim-denite-session]: https://github.com/rafi/vim-denite-session\n[rafi/vim-denite-z]: https://github.com/rafi/vim-denite-z\n[liuchengxu/vim-clap]: https://github.com/liuchengxu/vim-clap\n\n[kana/vim-operator-user]: https://github.com/kana/vim-operator-user\n[kana/vim-operator-replace]: https://github.com/kana/vim-operator-replace\n[machakann/vim-sandwich]: https://github.com/machakann/vim-sandwich\n[kana/vim-textobj-user]: https://github.com/kana/vim-textobj-user\n[terryma/vim-expand-region]: https://github.com/terryma/vim-expand-region\n[AndrewRadev/sideways.vim]: https://github.com/AndrewRadev/sideways.vim\n[AndrewRadev/splitjoin.vim]: https://github.com/AndrewRadev/splitjoin.vim\n[AndrewRadev/linediff.vim]: https://github.com/AndrewRadev/linediff.vim\n[AndrewRadev/dsf.vim]: https://github.com/AndrewRadev/dsf.vim\n[kana/vim-textobj-function]: https://github.com/kana/vim-textobj-function\n\n</details>\n\n## Custom Key-mappings\n\nNote that,\n\n* **Leader** key set as <kbd>,</kbd>\n* **Local-Leader** key set as <kbd>;</kbd> and used for navigation and search\n  (Denite and Defx)\n* Disable <kbd>←</kbd> <kbd>↑</kbd> <kbd>→</kbd> <kbd>↓</kbd> in normal mode by enabling `g:elite_mode` in `.vault.vim`\n\n<details open>\n  <summary>\n    <strong>Key-mappings</strong>\n    <small><i>(🔎 Click to expand/collapse)</i></small>\n  </summary>\n\n<center>Modes: 𝐍=normal 𝐕=visual 𝐒=select 𝐈=insert 𝐂=command</center>\n\n### Navigation\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>j</kbd> / <kbd>k</kbd> | 𝐍 𝐕 | Cursor moves through display-lines | `g` `j/k`\n| <kbd>g</kbd>+<kbd>j</kbd> / <kbd>k</kbd> | 𝐍 𝐕 𝐒 | Jump to edge upward/downward | <small>[haya14busa/vim-edgemotion]</small>\n| <kbd>gh</kbd> / <kbd>gl</kbd> | 𝐍 𝐕 | Easier line-wise movement | `g` `^/$`\n| <kbd>Space</kbd>+<kbd>Space</kbd> | 𝐍 𝐕 | Toggle visual-line mode | `V` / <kbd>Escape</kbd>\n| <kbd>v</kbd> / <kbd>V</kbd> | 𝐕 | Expand/reduce selection | <small>[terryma/vim-expand-region]</small>\n| <kbd>zl</kbd> / <kbd>zh</kbd> | 𝐍 | Scroll horizontally and vertically wider | `z4` `l/h`\n| <kbd>Ctrl</kbd>+<kbd>j</kbd> | 𝐍 | Move to split below | <small>[christoomey/tmux-navigator]</small>\n| <kbd>Ctrl</kbd>+<kbd>k</kbd> | 𝐍 | Move to upper split | <small>[christoomey/tmux-navigator]</small>\n| <kbd>Ctrl</kbd>+<kbd>h</kbd> | 𝐍 | Move to left split | <small>[christoomey/tmux-navigator]</small>\n| <kbd>Ctrl</kbd>+<kbd>l</kbd> | 𝐍 | Move to right split | <small>[christoomey/tmux-navigator]</small>\n| <kbd>Return</kbd> | 𝐍 | Toggle fold | `za`\n| <kbd>Shift</kbd>+<kbd>Return</kbd> | 𝐍 | Focus the current fold by closing all others | `zMzvzt`\n| <kbd>]q</kbd> or <kbd>]q</kbd> | 𝐍 | Next/previous on quickfix list | `:cnext` / `:cprev`\n| <kbd>]l</kbd> or <kbd>]l</kbd> | 𝐍 | Next/previous on location-list | `:lnext` / `:lprev`\n| <kbd>]w</kbd> or <kbd>]w</kbd> | 𝐍 | Next/previous whitespace error | <small>[plugin/whitespace.vim]</small>\n| <kbd>]g</kbd> or <kbd>]g</kbd> | 𝐍 | Next/previous Git hunk | <small>[airblade/vim-gitgutter]</small>\n| <kbd>]d</kbd> or <kbd>]d</kbd> | 𝐍 | Next/previous LSP diagnostic | <small>[mattn/vim-lsp-settings]</small>\n| <kbd>Ctrl</kbd>+<kbd>f</kbd> | 𝐂 | Move cursor forwards in command | <kbd>Right</kbd>\n| <kbd>Ctrl</kbd>+<kbd>b</kbd> | 𝐂 | Move cursor backwards in command | <kbd>Left</kbd>\n| <kbd>Ctrl</kbd>+<kbd>h</kbd> | 𝐂 | Move cursor to the beginning in command | <kbd>Home</kbd>\n| <kbd>Ctrl</kbd>+<kbd>l</kbd> | 𝐂 | Move cursor to the end in command | <kbd>End</kbd>\n\n### File Operations\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>Space</kbd>+<kbd>cd</kbd> | 𝐍 | Switch to the directory of opened buffer | `:lcd %:p:h`\n| <kbd>gf</kbd> | 𝐍 𝐕 | Open file under the cursor in a vsplit | `:rightbelow wincmd f`\n| <kbd>Space</kbd>+<kbd>w</kbd> | 𝐍 𝐕 𝐒 | Write buffer to file | `:write`\n| <kbd>Ctrl</kbd>+<kbd>s</kbd> | 𝐍 𝐕 𝐒 𝐂 | Write buffer to file | `:write`\n\n### Edit\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>Ctrl</kbd>+<kbd>Return</kbd> | 𝐈 | Expand emmet abbreviation | <small>[mattn/emmet-vim]</small>\n| <kbd>Q</kbd> | 𝐍 | Start/stop macro recording | `q`\n| <kbd>gQ</kbd> | 𝐍 | Play macro 'q' | `@q`\n| <kbd>Shift</kbd>+<kbd>Return</kbd> | 𝐈 | Start new line from any cursor position | `<C-o>o`\n| <kbd><</kbd> | 𝐕 𝐒 | Indent to left and re-select | `<gv`\n| <kbd>></kbd> | 𝐕 𝐒 | Indent to right and re-select | `>gv|`\n| <kbd>Tab</kbd> | 𝐕 𝐒 | Indent to right and re-select | `>gv|`\n| <kbd>Shift</kbd>+<kbd>Tab</kbd> | 𝐕 𝐒 | Indent to left and re-select | `<gv`\n| <kbd>gc</kbd> | 𝐍 𝐕 𝐒 | Caw (comments plugin) prefix | <small>[tyru/caw.vim]</small>\n| <kbd>gcc</kbd> | 𝐍 𝐕 𝐒 | Toggle comments | <small>[tyru/caw.vim]</small>\n| <kbd>Space</kbd>+<kbd>v</kbd> | 𝐍 𝐕 𝐒 | Toggle single-line comments | <small>[tyru/caw.vim]</small>\n| <kbd>Space</kbd>+<kbd>V</kbd> | 𝐍 𝐕 𝐒 | Toggle comment block | <small>[tyru/caw.vim]</small>\n| <kbd>Space</kbd>+<kbd>j</kbd> or <kbd>k</kbd> | 𝐍 𝐕 | Move lines down/up | `:m` …\n| <kbd>Space</kbd>+<kbd>d</kbd> | 𝐍 𝐕 | Duplicate line or selection |\n| <kbd>Space</kbd>+<kbd>cn</kbd> / <kbd>cN</kbd> | 𝐍 𝐕 | Change current word in a repeatable manner |\n| <kbd>Space</kbd>+<kbd>cp</kbd> | 𝐍 | Duplicate paragraph | `yap<S-}>p`\n| <kbd>Space</kbd>+<kbd>cw</kbd> | 𝐍 | Remove all spaces at EOL | `:%s/\\s\\+$//e`\n| <kbd>Ctrl</kbd>+<kbd>g</kbd> <kbd>g</kbd> | 𝐈 | Jump outside of pair | <small>[Raimondi/delimitMate]</small>\n| <kbd>sj</kbd> / <kbd>sk</kbd> | 𝐍 | Join/split arguments | <small>[AndrewRadev/splitjoin.vim]</small>\n| <kbd>dsf</kbd> / <kbd>csf</kbd> | 𝐍 | Delete/change surrounding function call | <small>[AndrewRadev/dsf.vim]</small>\n\n### Search & Replace\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>Space</kbd>+<kbd>f</kbd> | 𝐍 | Filter lines in-place | <small>[lambdalisue/fin.vim]</small>\n| <kbd>\\*</kbd> / <kbd>#</kbd> | 𝐍 𝐕 | Search selection forward/backward | <small>[haya14busa/vim-asterisk]</small>\n| <kbd>g\\*</kbd> / <kbd>g#</kbd> | 𝐍 𝐕 | Search whole-word forward/backward | <small>[haya14busa/vim-asterisk]</small>\n| <kbd>Backspace</kbd> | 𝐍 | Match bracket | `%`\n| <kbd>gp</kbd> | 𝐍 | Select last paste |\n| <kbd>sg</kbd> | 𝐕 | Replace within selected area | `:s/⌴/gc`\n| <kbd>Ctrl</kbd>+<kbd>r</kbd> | 𝐕 | Replace selection with step-by-step confirmation | `:%s/\\V/⌴/gc`\n\n### Clipboard\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>p</kbd> | 𝐕 𝐒 | Paste without yank | <small>[kana/vim-operator-replace]</small>\n| <kbd>Y</kbd> | 𝐍 | Yank to the end of line | `y$`\n| <kbd>Space</kbd>+<kbd>y</kbd> | 𝐍 | Copy relative file-path to clipboard |\n| <kbd>Space</kbd>+<kbd>Y</kbd> | 𝐍 | Copy absolute file-path to clipboard |\n\n### Command & History\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>!</kbd> | 𝐍 | Shortcut for shell command | `:!`\n| <kbd>g!</kbd> | 𝐍 | Read vim command into buffer | `:put=execute('⌴')`\n| <kbd>Ctrl</kbd>+<kbd>n</kbd> / <kbd>p</kbd> | 𝐂 | Switch history search pairs | <kbd>↓</kbd> / <kbd>↑</kbd>\n| <kbd>↓</kbd> / <kbd>↑</kbd> | 𝐂 | Switch history search pairs | `Ctrl` `n`/`p`\n\n### Editor UI\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>Space</kbd>+<kbd>ts</kbd> | 𝐍 | Toggle spell-checker | <small>`:setlocal spell!`</small>\n| <kbd>Space</kbd>+<kbd>tn</kbd> | 𝐍 | Toggle line numbers | <small>`:setlocal nonumber!`</small>\n| <kbd>Space</kbd>+<kbd>tl</kbd> | 𝐍 | Toggle hidden characters | <small>`:setlocal nolist!`</small>\n| <kbd>Space</kbd>+<kbd>th</kbd> | 𝐍 | Toggle highlighted search | <small>`:set hlsearch!`</small>\n| <kbd>Space</kbd>+<kbd>tw</kbd> | 𝐍 | Toggle wrap | <small>`:setlocal wrap!`</small> …\n| <kbd>Space</kbd>+<kbd>ti</kbd> | 𝐍 | Toggle indentation lines | <small>[nathanaelkane/vim-indent-guides]</small>\n| <kbd>g1</kbd> | 𝐍 | Go to first tab | `:tabfirst`\n| <kbd>g9</kbd> | 𝐍 | Go to last tab | `:tablast`\n| <kbd>g5</kbd> | 𝐍 | Go to previous tab | `:tabprevious`\n| <kbd>Ctrl</kbd>+<kbd>Tab</kbd> | 𝐍 | Go to next tab | `:tabnext`\n| <kbd>Ctrl</kbd>+<kbd>Shift</kbd><kbd>Tab</kbd> | 𝐍 | Go to previous tab | `:tabprevious`\n| <kbd>Alt</kbd>+<kbd>j</kbd> | 𝐍 | Go to next tab | `:tabnext`\n| <kbd>Alt</kbd>+<kbd>k</kbd> | 𝐍 | Go to previous tab | `:tabprevious`\n| <kbd>Alt</kbd>+<kbd>{</kbd> | 𝐍 | Move tab backward | `:-tabmove`\n| <kbd>Alt</kbd>+<kbd>}</kbd> | 𝐍 | Move tab forward | `:+tabmove`\n| <kbd>Space</kbd>+<kbd>h</kbd> | 𝐍 | Show highlight groups for word |\n\n### Custom Tools & Plugins\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>-</kbd> | 𝐍 | Choose a window to edit | <small>[t9md/vim-choosewin]</small>\n| <kbd>;</kbd>+<kbd>c</kbd> | 𝐍 | Open context-menu | <small>[plugin/actionmenu.vim]</small>\n| <kbd>gK</kbd> | 𝐍 | Open Zeal or Dash on some file-types | <small>[plugin/devhelp.vim]</small>\n| <kbd>g</kbd><kbd>Ctrl</kbd>+<kbd>o</kbd> | 𝐍 | Navigate to previous file on jumplist | <small>[plugin/jumpfile.vim]</small>\n| <kbd>g</kbd><kbd>Ctrl</kbd>+<kbd>i</kbd> | 𝐍 | Navigate to next file on jumplist | <small>[plugin/jumpfile.vim]</small>\n| <kbd>Space</kbd>+<kbd>l</kbd> | 𝐍 | Open side-menu helper | <small>[rafi/vim-sidemenu]</small>\n| <kbd>Space</kbd>+<kbd>b</kbd> | 𝐍 | Open structure window | <small>[liuchengxu/vista.vim]</small>\n| <kbd>Space</kbd>+<kbd>a</kbd> | 𝐍 | Show nearby tag in structure window | <small>[liuchengxu/vista.vim]</small>\n| <kbd>Space</kbd>+<kbd>se</kbd> | 𝐍 | Save current workspace session | <small>[plugin/sessions.vim]</small>\n| <kbd>Space</kbd>+<kbd>sl</kbd> | 𝐍 | Load workspace session | <small>[plugin/sessions.vim]</small>\n| <kbd>Space</kbd>+<kbd>n</kbd>/<kbd>N</kbd> | 𝐍 | Open alternative file | <small>[kana/vim-altr]</small>\n| <kbd>Space</kbd>+<kbd>tc</kbd> | 𝐍 | Enable scroll-context window | <small>[wellle/context.vim]</small>\n| <kbd>Space</kbd>+<kbd>tp</kbd> | 𝐍 | Peek scroll-context window | <small>[wellle/context.vim]</small>\n| <kbd>Space</kbd>+<kbd>S</kbd> | 𝐍 𝐕 | Source selection | `y:execute @@`\n| <kbd>Space</kbd>+<kbd>?</kbd> | 𝐍 | Open the macOS dictionary on current word | `:!open dict://`\n| <kbd>Space</kbd>+<kbd>P</kbd> | 𝐍 | Use Marked 2 for real-time Markdown preview | <small>[Marked 2]</small>\n| <kbd>Space</kbd>+<kbd>ml</kbd> | 𝐍 | Append modeline to end of buffer | <small>[config/mappings.vim]</small>\n| <kbd>Space</kbd>+<kbd>mda</kbd> | 𝐕 | Sequentially mark region for diff | <small>[AndrewRadev/linediff.vim]</small>\n| <kbd>Space</kbd>+<kbd>mdf</kbd> | 𝐕 | Mark region for diff and compare if more than one | <small>[AndrewRadev/linediff.vim]</small>\n| <kbd>Space</kbd>+<kbd>mds</kbd> | 𝐍 | Shows the comparison for all marked regions | <small>[AndrewRadev/linediff.vim]</small>\n| <kbd>Space</kbd>+<kbd>mdr</kbd> | 𝐍 | Removes the signs denoting the diff regions | <small>[AndrewRadev/linediff.vim]</small>\n| <kbd>Space</kbd>+<kbd>mg</kbd> | 𝐍 | Open Magit | <small>[jreybert/vimagit]</small>\n| <kbd>Space</kbd>+<kbd>mt</kbd> | 𝐍 𝐕 | Toggle highlighted word | <small>[t9md/vim-quickhl]</small>\n| <kbd>Space</kbd>+<kbd>-</kbd> | 𝐍 | Switch editing window with selected | <small>[t9md/vim-choosewin]</small>\n| <kbd>Space</kbd>+<kbd>G</kbd> | 𝐍 | Toggle distraction-free writing | <small>[junegunn/goyo]</small>\n| <kbd>Space</kbd>+<kbd>gu</kbd> | 𝐍 | Open undo-tree | <small>[mbbill/undotree]</small>\n| <kbd>Space</kbd>+<kbd>K</kbd> | 𝐍 | Thesaurus | <small>[Ron89/thesaurus_query.vim]</small>\n| <kbd>Space</kbd>+<kbd>W</kbd> | 𝐍 | VimWiki | <small>[vimwiki/vimwiki]</small>\n\n### Window Management\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>q</kbd> | 𝐍 | Quit window (and Vim, if last window) | `:quit`\n| <kbd>Ctrl</kbd>+<kbd>q</kbd> | 𝐍 | Remap to C-w | <kbd>Ctrl</kbd>+<kbd>w</kbd>\n| <kbd>Ctrl</kbd>+<kbd>x</kbd> | 𝐍 | Rotate window placement | `C-w` `x`\n| <kbd>sv</kbd> | 𝐍 | Horizontal split | `:split`\n| <kbd>sg</kbd> | 𝐍 | Vertical split | `:vsplit`\n| <kbd>st</kbd> | 𝐍 | Open new tab | `:tabnew`\n| <kbd>so</kbd> | 𝐍 | Close other windows | `:only`\n| <kbd>sb</kbd> | 𝐍 | Previous buffer | `:b#`\n| <kbd>sc</kbd> | 𝐍 | Close current buffer | `:close`\n| <kbd>sx</kbd> | 𝐍 | Delete buffer, leave blank window | `:enew │ bdelete`\n| <kbd>sz</kbd> | 𝐍 | Toggle window zoom | `:vertical resize │ resize`\n| <kbd>ssv</kbd> | 𝐍 | Split with previous buffer | `:split │ wincmd p │ e#`\n| <kbd>ssg</kbd> | 𝐍 | Vertical split with previous buffer | `:vsplit │ wincmd p │ e#`\n| <kbd>sh</kbd> | 𝐍 | Toggle colorscheme background=dark/light | `:set background` …\n| <kbd>s-</kbd> | 𝐍 | Lower solarized8 colorscheme contrast | `:colorscheme ` …\n| <kbd>s=</kbd> | 𝐍 | Raise solarized8 colorscheme contrast | `:colorscheme ` …\n\n### Git Version Control\n\n| Key   | Mode | Action             | Plugin or Mapping\n| ----- |:----:| ------------------ | ------\n| <kbd>gs</kbd> | 𝐍 | Preview hunk | <small>[airblade/vim-gitgutter]</small>\n| <kbd>gS</kbd> | 𝐍 𝐕 𝐒 | Stage hunk | <small>[airblade/vim-gitgutter]</small>\n| <kbd>Space</kbd>+<kbd>gr</kbd> | 𝐍 | Revert hunk | <small>[airblade/vim-gitgutter]</small>\n| <kbd>Space</kbd>+<kbd>ga</kbd> | 𝐍 | Git add current file | <small>[lambdalisue/gina.vim]</small>\n| <kbd>Space</kbd>+<kbd>gd</kbd> | 𝐍 | Git diff | <small>[lambdalisue/gina.vim]</small>\n| <kbd>Space</kbd>+<kbd>gc</kbd> | 𝐍 | Git branches | <small>[lambdalisue/gina.vim]</small>\n| <kbd>Space</kbd>+<kbd>gc</kbd> | 𝐍 | Git commit | <small>[lambdalisue/gina.vim]</small>\n| <kbd>Space</kbd>+<kbd>gb</kbd> | 𝐍 | Git blame | <small>[lambdalisue/gina.vim]</small>\n| <kbd>Space</kbd>+<kbd>gs</kbd> | 𝐍 | Git status -s | <small>[lambdalisue/gina.vim]</small>\n| <kbd>Space</kbd>+<kbd>gl</kbd> | 𝐍 | Git log --all | <small>[lambdalisue/gina.vim]</small>\n| <kbd>Space</kbd>+<kbd>gF</kbd> | 𝐍 | Git fetch | <small>[lambdalisue/gina.vim]</small>\n| <kbd>Space</kbd>+<kbd>gp</kbd> | 𝐍 | Git push | <small>[lambdalisue/gina.vim]</small>\n| <kbd>Space</kbd>+<kbd>go</kbd> | 𝐍 𝐕 | Open SCM detailed URL in browser | <small>[lambdalisue/gina.vim]</small>\n\n### Plugin: Denite\n\n| Key   | Mode | Action\n| ----- |:----:| ------------------\n| <kbd>;r</kbd> | 𝐍 | Resumes last Denite window\n| <kbd>;f</kbd> | 𝐍 | File search\n| <kbd>;g</kbd> | 𝐍 | Grep search\n| <kbd>;b</kbd> | 𝐍 | Buffers\n| <kbd>;i</kbd> | 𝐍 | Old files\n| <kbd>;x</kbd> | 𝐍 | Most recently used files (MRU)\n| <kbd>;d</kbd> | 𝐍 | Directories and MRU\n| <kbd>;v</kbd> | 𝐍 𝐕 | Yank history\n| <kbd>;l</kbd> | 𝐍 | Location list\n| <kbd>;q</kbd> | 𝐍 | Quick fix\n| <kbd>;m</kbd> | 𝐍 | Marks\n| <kbd>;n</kbd> | 𝐍 | Dein plugin list\n| <kbd>;j</kbd> | 𝐍 | Jump points and change stack\n| <kbd>;u</kbd> | 𝐍 | Junk files\n| <kbd>;o</kbd> | 𝐍 | Outline tags\n| <kbd>;s</kbd> | 𝐍 | Sessions\n| <kbd>;t</kbd> | 𝐍 | Tag list\n| <kbd>;p</kbd> | 𝐍 | Jumps\n| <kbd>;h</kbd> | 𝐍 | Help\n| <kbd>;w</kbd> | 𝐍 | Memo list\n| <kbd>;z</kbd> | 𝐍 | Z (jump around)\n| <kbd>;;</kbd> | 𝐍 | Command history\n| <kbd>;/</kbd> | 𝐍 | Buffer lines\n| <kbd>;\\*</kbd> | 𝐍 | Search word under cursor with lines\n| <kbd>Space</kbd>+<kbd>gt</kbd> | 𝐍 | Find tags matching word under cursor\n| <kbd>Space</kbd>+<kbd>gf</kbd> | 𝐍 | Find files matching word under cursor\n| <kbd>Space</kbd>+<kbd>gg</kbd> | 𝐍 𝐕 | Grep word under cursor\n| **Within _Denite_ window** ||\n| <kbd>jj</kbd> or <kbd>Escape</kbd> | 𝐈 | Leave Insert mode\n| <kbd>i</kbd> or <kbd>/</kbd> | 𝐍 | Enter Insert mode (filter input)\n| <kbd>q</kbd> or <kbd>Escape</kbd> | 𝐍 | Exit denite window\n| <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> | 𝐈 | Next/previous candidate\n| <kbd>Space</kbd> | 𝐍 | Select candidate entry\n| <kbd>dd</kbd> | 𝐍 | Delete entry\n| <kbd>p</kbd> | 𝐍 | Preview entry\n| <kbd>st</kbd> | 𝐍 | Open in a new tab\n| <kbd>sg</kbd> | 𝐍 | Open in a vertical split\n| <kbd>sv</kbd> | 𝐍 | Open in a split\n| <kbd>'</kbd> | 𝐍 | Quick-move\n| <kbd>r</kbd> | 𝐍 | Redraw\n| <kbd>yy</kbd> | 𝐍 | Yank\n| <kbd>Tab</kbd> | 𝐍 | List and choose action\n\n### Plugin: Defx\n\n| Key   | Mode | Action\n| ----- |:----:| ------------------\n| <kbd>;e</kbd> | 𝐍 | Open file-explorer (toggle)\n| <kbd>;a</kbd> | 𝐍 | Focus current file in file-explorer\n| **Within _Defx_ window** ||\n| <kbd>j</kbd> or <kbd>k</kbd> | 𝐍 | Move up and down the tree\n| <kbd>l</kbd> or <kbd>Return</kbd> | 𝐍 | Toggle collapse/expand directory or open file\n| <kbd>h</kbd> | 𝐍 | Collapse directory tree\n| <kbd>t</kbd> | 𝐍 | Expand directory tree recursively\n| <kbd>.</kbd> | 𝐍 | Toggle hidden files\n| <kbd>Space</kbd> | 𝐍 | Select entry\n| <kbd>\\*</kbd> | 𝐍 | Invert selection (select all)\n| <kbd>&</kbd> or <kbd>\\</kbd> | 𝐍 | Change into current working directory\n| <kbd>~</kbd> | 𝐍 | Change to user home directory\n| <kbd>u</kbd> or <kbd>Backspace</kbd> | 𝐍 | Change into parent directory\n| <kbd>u</kbd> <kbd>2</kbd>/<kbd>3</kbd>/<kbd>4</kbd> | 𝐍 | Change into parent directory count\n| <kbd>st</kbd> | 𝐍 | Open file in new tab\n| <kbd>sv</kbd> | 𝐍 | Open file in a horizontal split\n| <kbd>sg</kbd> | 𝐍 | Open file in a vertical split\n| <kbd>N</kbd> | 𝐍 | Create new directories and/or files\n| <kbd>K</kbd> | 𝐍 | Create new directory\n| <kbd>c</kbd> / <kbd>m</kbd> / <kbd>p</kbd> | 𝐍 | Copy, move, and paste\n| <kbd>r</kbd> | 𝐍 | Rename file or directory\n| <kbd>dd</kbd> | 𝐍 | Trash selected files and directories\n| <kbd>y</kbd> | 𝐍 | Yank path to clipboard\n| <kbd>w</kbd> | 𝐍 | Toggle window size\n| <kbd>]g</kbd> | 𝐍 | Next dirty git item\n| <kbd>[g</kbd> | 𝐍 | Previous dirty git item\n| <kbd>x</kbd> or <kbd>gx</kbd> | 𝐍 | Execute associated system application\n| <kbd>gd</kbd> | 𝐍 | Open git diff on selected file\n| <kbd>gl</kbd> | 𝐍 | Open terminal file explorer with tmux\n| <kbd>gr</kbd> | 𝐍 | Grep in current position\n| <kbd>gf</kbd> | 𝐍 | Find files in current position\n\n### Plugin: Clap\n\n| Key   | Mode | Action\n| ----- |:----:| ------------------\n| **Within _Clap_ window** ||\n| <kbd>jj</kbd> or <kbd>Escape</kbd> | 𝐈 | Leave Insert mode\n| <kbd>i</kbd> | 𝐍 | Enter Insert mode (filter input)\n| <kbd>q</kbd> or <kbd>Escape</kbd> | 𝐍 | Exit clap window\n| <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> | 𝐈 | Next/previous candidate\n| <kbd>Space</kbd> or <kbd>\\'</kbd> | 𝐍 | Select candidate entry\n| <kbd>st</kbd> | 𝐍 | Open in a new tab\n| <kbd>sg</kbd> | 𝐍 | Open in a vertical split\n| <kbd>sv</kbd> | 𝐍 | Open in a split\n\n### Plugin: Asyncomplete and Emmet\n\n| Key   | Mode | Action\n| ----- |:----:| ------------------\n| <kbd>Tab</kbd> / <kbd>Shift-Tab</kbd> | 𝐈 | Navigate completion-menu\n| <kbd>Enter</kbd> | 𝐈 | Select completion or expand snippet\n| <kbd>Ctrl</kbd>+<kbd>j</kbd>/<kbd>k</kbd>/<kbd>d</kbd>/<kbd>u</kbd> | 𝐈 | Movement in completion pop-up\n| <kbd>Ctrl</kbd>+<kbd>Return</kbd> | 𝐈 | Expand Emmet sequence\n| <kbd>Ctrl</kbd>+<kbd>Space</kbd> | 𝐈 | Refresh and show candidates\n| <kbd>Ctrl</kbd>+<kbd>y</kbd> | 𝐈 | Close pop-up\n| <kbd>Ctrl</kbd>+<kbd>e</kbd> | 𝐈 | Cancel selection and close pop-up\n| <kbd>Ctrl</kbd>+<kbd>l</kbd> | 𝐈 | Expand snippet at cursor\n| <kbd>Tab</kbd> / <kbd>Shift-Tab</kbd> | 𝐈 𝐒 | Navigate snippet placeholders\n\n### Plugin: Any-Jump\n\n| Key   | Mode | Action\n| ----- |:----:| ------------------\n| <kbd>Space</kbd>+<kbd>ii</kbd> | 𝐍 | Jump to definition under cursor\n| <kbd>Space</kbd>+<kbd>ii</kbd> | 𝐕 | Jump to selected text in visual mode\n| <kbd>Space</kbd>+<kbd>ib</kbd> | 𝐍 | Open previous opened file (after jump)\n| <kbd>Space</kbd>+<kbd>il</kbd> | 𝐍 | Open last closed search window again\n\n### Plugin: Signature\n\n| Key   | Mode | Action\n| ----- |:----:| ------------------\n| <kbd>m/</kbd> or <kbd>m?</kbd> | 𝐍 | Show list of buffer marks/markers\n| <kbd>mm</kbd> | 𝐍 | Toggle mark on current line\n| <kbd>m,</kbd> | 𝐍 | Place next mark\n| <kbd>m</kbd> <kbd>a-z</kbd> | 𝐍 | Place specific mark (Won't work for: <kbd>mm</kbd>, <kbd>mn</kbd>, <kbd>mp</kbd>)\n| <kbd>dm</kbd> <kbd>a-z</kbd> | 𝐍 | Remove specific mark (Won't work for: <kbd>mm</kbd>, <kbd>mn</kbd>, <kbd>mp</kbd>)\n| <kbd>mn</kbd> | 𝐍 | Jump to next mark\n| <kbd>mp</kbd> | 𝐍 | Jump to previous mark\n| <kbd>]=</kbd> | 𝐍 | Jump to next marker\n| <kbd>[=</kbd> | 𝐍 | Jump to previous marker\n| <kbd>m-</kbd> | 𝐍 | Purge all on current line\n| <kbd>m</kbd> <kbd>Space</kbd> | 𝐍 | Purge marks\n| <kbd>m</kbd> <kbd>Backspace</kbd> | 𝐍 | Purge markers\n\n</details>\n\n## Credits & Contribution\n\nBig thanks to the dark knight [Shougo](https://github.com/Shougo).\n\n[config/mappings.vim]: ./config/mappings.vim\n[plugin/whitespace.vim]: ./plugin/whitespace.vim\n[plugin/sessions.vim]: ./plugin/sessions.vim\n[plugin/devhelp.vim]: ./plugin/devhelp.vim\n[plugin/jumpfile.vim]: ./plugin/jumpfile.vim\n[plugin/actionmenu.vim]: ./plugin/actionmenu.vim\n[config/plugins/lsp.vim]: ./config/plugins/lsp.vim\n[Marked 2]: https://marked2app.com\n[Neovim]: https://github.com/neovim/neovim\n[Vim]: https://github.com/vim/vim\n[lazy-loaded]: ./config/plugins.yaml#L47\n\n### 解决 mac tmux 下 neovim 无法复制到剪贴板的问题\n```\n# https://github.com/tmux/tmux/issues/543\nbrew install reattach-to-user-namespace\n# then edit your .tmux.conf\nset -g default-shell $SHELL\nset -g default-command \"reattach-to-user-namespace -l ${SHELL}\"\n# In .vimrc or ~/.config/nvim/init.vim (I use Neovim):\nset clipboard=unnamed\n# reload tmux config\ntmux source-file ~/.tmux.conf\n```\n\n### 解决 vim gutter 使用 emoji 文本渲染问题\n\nSee this [Vim text rendering off by one issue](https://www.reddit.com/r/vim/comments/6vkoii/vim_text_rendering_off_by_one_issue/)\n\n如果你使用了 Iterm2 + neovim，并且在 gutter 栏使用了 emoji 表情，比如 vim-gitgutter, vim-ale 等插件的提示是 emoji。\n请勾选 Iterm2->Profiles->Text->Use Unicode versoin 9 widths\n\nSee this issue https://stackoverflow.com/questions/43107435/emoji-display-issue-in-vim-with-tmux/52142277#52142277\n\n### ag (The Silver Searcher) ignore file 搜索忽略文件\n\n最好在你的根目录或者项目目录加上 ag 搜索需要忽略的文件，防止 denite 搜索占用太大内存，并且加速筛选内容\n\nadd `~/.agignore` file:\n\n```\nnode_modules\n.git\n.ropeproject\n\ngen-py/\ngen-go/\neggs/\n.tmp/\nvendor/\n\n*.swp\n*.pyc\n```\n\n### fzf.vim :Ag 搜索结果发送到 quickfix 窗口\n\n使用 fzf.vim 有个 :Ag 命令搜索的时候可以把结果发送到 quickfix 窗口。通常搜索结果可以使用 ctrl+n/p 来选择\n\n使用方式：\n\n- :Ag 搜索需要的单词。`:Ag word`\n- alt-a 全选 (注意 MacOS iterm2: Settings -> Profiles -> Keys Left Option choose Esc+)\n- alt-d 可以取消选择\n- Enter 即可，这时候就可以把搜索结果发送到 quickfix 窗口\n\nref: https://github.com/junegunn/fzf.vim/issues/586\n\n### [Coc.Nvim](https://github.com/neoclide/coc.nvim)\n\nIf you want to use [coc.nvim](https://github.com/neoclide/coc.nvim) for Golang completion,\nplease see this article [《vim as a go ide》](https://octetz.com/docs/2019/2019-04-24-vim-as-a-go-ide/).\nNow you can use `coc` branch for go completion(use gopls). If you use python, type `CocInstall coc-python` install\npython coc plugin.\n\n(注意笔者基于开源配置代码修改，笔者的 leader 是 \",\" 而不是文档中的 Space)\n"
  },
  {
    "path": "after/ftplugin/go.vim",
    "content": "setlocal tabstop=4\n\n\" autocorrect wrong key word spell\niabbrev mian() main()\niabbrev fucn func\niabbrev Pirntln Println\niabbrev errror error\niabbrev itnerface interface\niabbrev cosnt const\niabbrev retunr return\niabbrev imoprt import\niabbrev contineu continue\niabbrev dfer defer\niabbrev defalut default\niabbrev caes case\niabbrev rnage range\n"
  },
  {
    "path": "after/ftplugin/help.vim",
    "content": "\" Snippets from vim-help\n\" Credits: https://github.com/dahu/vim-help\n\nlet s:save_cpo = &cpoptions\nset cpoptions&vim\n\nfunction! s:setup_buffer()\n\tlet b:undo_ftplugin .= ' | setlocal spell< list< hidden< iskeyword<'\n\t\t\\ . \" | execute 'nunmap <buffer> <CR>'\"\n\t\t\\ . \" | execute 'nunmap <buffer> <BS>'\"\n\t\t\\ . \" | execute 'nunmap <buffer> o'\"\n\t\t\\ . \" | execute 'nunmap <buffer> O'\"\n\t\t\\ . \" | execute 'nunmap <buffer> f'\"\n\t\t\\ . \" | execute 'nunmap <buffer> F'\"\n\t\t\\ . \" | execute 'nunmap <buffer> t'\"\n\t\t\\ . \" | execute 'nunmap <buffer> T'\"\n\t\t\\ . \" | execute 'nunmap <buffer> <leader>j'\"\n\t\t\\ . \" | execute 'nunmap <buffer> <leader>k'\"\n\t\t\\ . \" | execute 'nunmap <buffer> q'\"\n\n\tsetlocal nospell\n\tsetlocal nolist\n\tsetlocal nohidden\n\tsetlocal iskeyword+=:\n\tsetlocal iskeyword+=#\n\tsetlocal iskeyword+=-\n\n\t\" unsilent echomsg 'help edit' &ft bufname() 'type:' &buftype\n\n\tif s:count_windows() - 1 > 1\n\t\twincmd K\n\telse\n\t\twincmd L\n\tendif\n\n\t\" Exit help window with 'q'\n\tnnoremap <silent><buffer> q :quit<CR>\n\n\t\" Jump to links with enter\n\tnmap <buffer> <CR> <C-]>\n\n\t\" Jump back with backspace\n\tnmap <buffer> <BS> <C-T>\n\n\t\" Skip to next option link\n\tnmap <buffer> o /'[a-z]\\{2,\\}'<CR>\n\n\t\" Skip to previous option link\n\tnmap <buffer> O ?'[a-z]\\{2,\\}'<CR>\n\n\t\" Skip to next subject link\n\tnmap <buffer><nowait> f /\\|\\S\\+\\|<CR>l\n\n\t\" Skip to previous subject link\n\tnmap <buffer> F h?\\|\\S\\+\\|<CR>l\n\n\t\" Skip to next tag (subject anchor)\n\tnmap <buffer> t /\\*\\S\\+\\*<CR>l\n\n\t\" Skip to previous tag (subject anchor)\n\tnmap <buffer> T h?\\*\\S\\+\\*<CR>l\n\n\t\" Skip to next/prev quickfix list entry (from a helpgrep)\n\tnmap <buffer> <leader>j :cnext<CR>\n\tnmap <buffer> <leader>k :cprev<CR>\nendfunction\n\n\" Count tab page windows\nfunction! s:count_windows()\n\tlet l:count = 0\n\tlet l:tabnr = tabpagenr()\n\tlet l:ignore = '^\\(hover\\|fern\\|clap_\\|defx\\|denite\\)'\n\ttry\n\t\tlet l:windows = gettabinfo(l:tabnr)[0].windows\n\t\tfor l:win in l:windows\n\t\t\tif getwinvar(l:win, '&filetype') !~# l:ignore\n\t\t\t\tlet l:count += 1\n\t\t\tendif\n\t\tendfor\n\tcatch\n\t\t\" Fallback\n\t\tlet l:count = tabpagewinnr(l:tabnr, '$')\n\tendtry\n\treturn l:count\nendfunction\n\n\" Setup only when viewing help pages\nif &buftype ==# 'help'\n\tcall s:setup_buffer()\nendif\n\nlet &cpoptions = s:save_cpo\n"
  },
  {
    "path": "after/ftplugin/json.vim",
    "content": "setlocal foldmethod=syntax\n"
  },
  {
    "path": "after/ftplugin/man.vim",
    "content": "\nlet s:save_cpo = &cpoptions\nset cpoptions&vim\n\nsilent! nunmap <buffer> q\nnnoremap <silent><buffer> q :<C-u>quit<CR>\n\nnnoremap <silent><buffer> <Leader>o  :<C-u>call man#show_toc()<CR>\n\nif exists('b:undo_ftplugin')\n\tlet b:undo_ftplugin .= ' | '\nelse\n\tlet b:undo_ftplugin = ''\nendif\nlet b:undo_ftplugin .= \"execute 'nunmap <buffer> <leader>o'\"\n\nlet &cpoptions = s:save_cpo\n"
  },
  {
    "path": "after/ftplugin/markdown.vim",
    "content": "set conceallevel=0\n"
  },
  {
    "path": "after/ftplugin/qf.vim",
    "content": "\" Extend romainl/vim-qf\n\" ---\n\" See Also: https://github.com/romainl/vim-qf\n\nlet s:save_cpo = &cpoptions\nset cpoptions&vim\n\n\" Local window settings\nsetlocal cursorline colorcolumn=\n\nif exists('&signcolumn')\n\tsetlocal signcolumn=yes\nendif\n\nif ! exists(':Lfilter')\n\ttry\n\t\tpackadd cfilter\n\tendtry\nendif\n\nif ! exists('b:qf_isLoc')\n\t\" Are we in a location list or a quickfix list?\n\tlet b:qf_isLoc = ! empty(getloclist(0))\nendif\n\n\" Is this redundant?\n\" let &l:statusline=\"%t%{exists('w:quickfix_title') ? ' '.w:quickfix_title : ''} %=%-15(%l,%L%V%) %P\"\n\nsilent! nunmap <buffer> <CR>\nsilent! nunmap <buffer> p\nsilent! nunmap <buffer> q\nsilent! nunmap <buffer> s\n\nnnoremap <silent><buffer><expr> <CR> \":pclose!\\<CR>\\<CR>\" .\n\t\\ (b:qf_isLoc == 1 ? ':lclose' : ':cclose') . \"\\<CR>\"\n\nnnoremap <silent><buffer> <Esc>  :pclose!<CR>:quit<CR>\nnnoremap <silent><buffer> o      :pclose!<CR><CR>:noautocmd wincmd b<CR>\n\nif get(g:, 'enable_universal_quit_mapping', 1)\n\tnnoremap <silent><buffer> q      :pclose!<CR>:quit<CR>\nendif\nnnoremap <silent><buffer> p      :call <SID>preview_file()<CR>\nnnoremap <silent><buffer> K      :echo getline(line('.'))<CR>\nnnoremap <silent><buffer> dd     :<C-u>Reject<CR>\nnnoremap <silent><buffer> <C-r>  :<C-u>Restore<CR>\nnnoremap <silent><buffer> R      :<C-u>Restore<CR>\n\nnnoremap <buffer> O      :<C-u>ListLists<CR>\nnnoremap <buffer> <C-s>  :<C-u>SaveList<Space>\nnnoremap <buffer> S      :<C-u>SaveList<Space>\nnnoremap <buffer> <C-o>  :<C-u>LoadList<Space>\n\nnnoremap <silent><buffer> sg :pclose!<CR><C-w><CR><C-w>L<C-w>=\nnnoremap <silent><buffer> sv :pclose!<CR><C-w><CR><C-w>=\nnnoremap <silent><buffer> st :pclose!<CR><C-w><CR><C-w>T\n\nnmap <buffer> <Tab>    <Plug>(qf_newer)\nnmap <buffer> <S-Tab>  <Plug>(qf_older)\nnmap <buffer> gj       <Plug>(qf_next_file)\nnmap <buffer> gk       <Plug>(qf_previous_file)\n\nif exists(':Lfilter')\n\tnnoremap <buffer><expr> i\n\t\t\\ (b:qf_isLoc == 1 ? ':L' : ':C') . \"filter\\<Space>//\\<Left>\"\n\tnnoremap <buffer><expr> r\n\t\t\\ (b:qf_isLoc == 1 ? ':L' : ':C'). \"filter!\\<Space>//\\<Left>\"\nelse\n\tnnoremap <buffer> i :<C-u>Keep<Space>\nendif\n\n\" let s:ns = nvim_create_namespace('hlgrep')\n\nif exists('b:undo_ftplugin')\n\tlet b:undo_ftplugin .= ' | '\nelse\n\tlet b:undo_ftplugin = ''\nendif\nlet b:undo_ftplugin .=\n\t\\ 'setl cursorline< colorcolumn< signcolumn<'\n\t\\ . \" | execute 'nunmap <buffer> <CR>'\"\n\t\\ . \" | execute 'nunmap <buffer> <Esc>'\"\n\t\\ . \" | execute 'nunmap <buffer> q'\"\n\t\\ . \" | execute 'nunmap <buffer> p'\"\n\t\\ . \" | execute 'nunmap <buffer> K'\"\n\t\\ . \" | execute 'nunmap <buffer> <C-r>'\"\n\t\\ . \" | execute 'nunmap <buffer> R'\"\n\t\\ . \" | execute 'nunmap <buffer> O'\"\n\t\\ . \" | execute 'nunmap <buffer> <C-s>'\"\n\t\\ . \" | execute 'nunmap <buffer> S'\"\n\t\\ . \" | execute 'nunmap <buffer> <C-o>'\"\n\t\\ . \" | execute 'nunmap <buffer> i'\"\n\t\\ . \" | execute 'nunmap <buffer> o'\"\n\t\\ . \" | execute 'nunmap <buffer> sg'\"\n\t\\ . \" | execute 'nunmap <buffer> sv'\"\n\t\\ . \" | execute 'nunmap <buffer> st'\"\n\t\\ . \" | execute 'nunmap <buffer> <Tab>'\"\n\t\\ . \" | execute 'nunmap <buffer> <S-Tab>'\"\n\t\\ . \" | execute 'nunmap <buffer> gj'\"\n\t\\ . \" | execute 'nunmap <buffer> gk'\"\n\nfunction! s:get_entry()\n\t\" Find the file, line number and column of current entry\n\tlet l:raw = getline(line('.'))\n\tlet l:file = fnameescape(substitute(l:raw, '|.*$', '', ''))\n\tlet l:pos = substitute(l:raw, '^.\\{-}|\\(.\\{-}|\\).*$', '\\1', '')\n\tlet l:line = 1\n\tlet l:column = 1\n\tif l:pos =~# '^\\d\\+'\n\t\tlet l:line  = substitute(l:pos, '^\\(\\d\\+\\).*$', '\\1', '')\n\t\tif l:pos =~# ' col \\d\\+|'\n\t\t\tlet l:column = substitute(l:pos, '^\\d\\+ col \\(\\d\\+\\).*$', '\\1', '')\n\t\tendif\n\tendif\n\n\treturn [ l:file, l:line, l:column ]\nendfunction\n\nfunction! s:preview_file()\n\tlet [ l:file, l:line, l:column ] = s:get_entry()\n\tcall preview#open(l:file, l:line, l:column)\nendfunction\n\nlet &cpoptions = s:save_cpo\n"
  },
  {
    "path": "after/ftplugin/vim.vim",
    "content": "let s:save_cpo = &cpoptions\nset cpoptions&vim\n\nif exists('b:undo_ftplugin')\n\tlet b:undo_ftplugin .= ' | '\nelse\n\tlet b:undo_ftplugin = ''\nendif\nlet b:undo_ftplugin .= 'setl modeline< iskeyword< keywordprg< suffixesadd< includeexpr< path<'\n\nsetlocal iskeyword+=:\nsetlocal iskeyword+=#\nsetlocal keywordprg=:help\n\" setlocal foldmethod=indent\n\" setlocal conceallevel=0\n\n\" For gf\nlet &l:path = join(map(split(&runtimepath, ','), 'v:val.\"/autoload\"'), ',')\nsetlocal suffixesadd=.vim\nsetlocal includeexpr=fnamemodify(substitute(v:fname,'#','/','g'),':h')\n\nlet &cpoptions = s:save_cpo\n"
  },
  {
    "path": "autoload/actionmenu.vim",
    "content": "\" actionmenu\n\" ---\n\" Context-aware menu at your cursor\n\" Forked from: https://github.com/kizza/actionmenu.nvim\n\n\" Menu items\nlet g:actionmenu#items = []\n\n\" Current menu selection\nlet g:actionmenu#selected = 0\n\n\" Private variables\nlet s:buffer = 0\nlet s:window = 0\n\nfunction! actionmenu#open(items, callback, ...) abort\n\t\" Open the context-menu with a:items and a:callback for selected item action.\n\n\tif empty(a:items)\n\t\treturn\n\tendif\n\n\t\" Close the old window if opened\n\tcall actionmenu#close()\n\n\t\" Create the buffer\n\tif ! s:buffer\n\t\tlet s:buffer = nvim_create_buf(0, 1)\n\t\tcall nvim_buf_set_option(s:buffer, 'syntax', 'OFF')\n\tendif\n\tcall nvim_buf_set_option(s:buffer, 'modifiable', v:true)\n\tcall nvim_buf_set_option(s:buffer, 'completefunc', 'actionmenu#complete')\n\t\" call nvim_buf_set_lines(s:buffer, 0, -1, v:true, [ '' ])\n\n\t\" Persist menu items and callback function\n\tlet g:actionmenu#items = a:items\n\tlet s:callback = a:callback\n\n\t\" Process user hooks\n\tdoautocmd <nomodeline> User action_menu_open_pre\n\n\t\" Open the window\n\tlet l:opts = {\n\t\t\\ 'relative': 'cursor',\n\t\t\\ 'focusable': v:false,\n\t\t\\ 'width': 1,\n\t\t\\ 'height': 1,\n\t\t\\ 'row': 0,\n\t\t\\ 'col': 0,\n\t\t\\ 'style': 'minimal',\n\t\t\\}\n\n\tlet s:window = nvim_open_win(s:buffer, 1, l:opts)\n\tcall nvim_win_set_option(s:window, 'foldenable', v:false)\n\tcall nvim_win_set_option(s:window, 'wrap', v:false)\n\tcall nvim_win_set_option(s:window, 'statusline', '')\n\tcall nvim_win_set_option(s:window, 'sidescrolloff', 0)\n\tcall nvim_win_set_option(s:window, 'listchars', '')\n\tif exists('&winblend')\n\t\tcall nvim_win_set_option(s:window, 'winblend', 100)\n\tendif\n\n\t\" Setup the window\n\tcall nvim_buf_set_option(s:buffer, 'filetype', 'actionmenu')\n\n\t\" Menu mappings and events\n\tcall s:attach_events()\n\n\t\" startinsert  TODO: nvim cursor relative is off\n\tcall nvim_input(\"i\\<C-x>\\<C-u>\")\nendfunction\n\nfunction! s:attach_events() abort\n\tmapclear <buffer>\n\timapclear <buffer>\n\tinoremap <silent><nowait><buffer><expr> <CR> <SID>select_item()\n\t\" imap     <nowait><buffer> <C-y> <CR>\n\t\" imap     <nowait><buffer> <C-e> <Esc>\n\n\t\" Navigate in menu\n\tinoremap <nowait><buffer> <Up>    <C-p>\n\tinoremap <nowait><buffer> <Down>  <C-n>\n\tinoremap <nowait><buffer> k       <C-p>\n\tinoremap <nowait><buffer> j       <C-n>\n\tinoremap <nowait><buffer> h       <C-p>\n\tinoremap <nowait><buffer> l       <C-n>\n\tinoremap <nowait><buffer> <Space> <C-n>\n\tinoremap <nowait><buffer> <C-k>   <C-p>\n\tinoremap <nowait><buffer> <C-j>   <C-n>\n\tinoremap <nowait><buffer> <S-Tab> <C-p>\n\tinoremap <nowait><buffer> <Tab>   <C-n>\n\n\t\" Scroll pages in menu\n\tinoremap <nowait><buffer> <C-b>  <PageUp>\n\tinoremap <nowait><buffer> <C-f>  <PageDown>\n\timap     <nowait><buffer> <C-u>  <PageUp>\n\timap     <nowait><buffer> <C-d>  <PageDown>\n\n\t\" Events\n\taugroup actionmenu\n\t\tautocmd!\n\t\tautocmd InsertLeave <buffer> call <SID>on_insert_leave()\n\taugroup END\nendfunction\n\nfunction! s:select_item() abort\n\tif pumvisible()\n\t\tif ! empty(v:completed_item)\n\t\t\tlet g:actionmenu#selected = copy(v:completed_item)\n\t\tendif\n\t\t\" Close pum and leave insert\n\t\treturn \"\\<C-y>\\<Esc>\"\n\tendif\n\t\" Leave insert mode\n\treturn \"\\<Esc>\"\nendfunction\n\nfunction! s:on_insert_leave() abort\n\tcall actionmenu#close()\n\tlet l:index = -1\n\tif type(g:actionmenu#selected) == type({})\n\t\tlet l:index = get(g:actionmenu#selected, 'user_data', -1)\n\tendif\n\tlet l:data = l:index > -1 ? g:actionmenu#items[l:index] : {}\n\tlet g:actionmenu#items = []\n\tlet g:actionmenu#selected = 0\n\tcall actionmenu#callback(l:index, l:data)\n\tunlet! s:callback\n\tdoautocmd <nomodeline> User action_menu_open_post\nendfunction\n\n\" Pum completion function\nfunction! actionmenu#complete(findstart, base) abort\n\tif a:findstart\n\t\treturn 1\n\telse\n\t\treturn map(copy(g:actionmenu#items), {\n\t\t\t\\ index, item -> s:pum_parse_item(item, index) })\n\tendif\nendfunction\n\nfunction! s:pum_parse_item(item, index) abort\n\tif type(a:item) == type('')\n\t\treturn { 'word': a:item, 'user_data': a:index }\n\telse\n\t\treturn { 'word': a:item['word'], 'user_data': a:index }\n\tendif\nendfunction\n\nfunction! actionmenu#callback(index, item) abort\n\t\" doautocmd <nomodeline> BufWinEnter\n\tif empty(s:callback)\n\t\treturn\n\tendif\n\tif a:index >= 0 && ! empty(a:item) && type(a:item) != type('')\n\t\tcall s:callback(a:item)\n\tendif\nendfunction\n\nfunction! actionmenu#close() abort\n\tif s:window\n\t\tcall nvim_win_close(s:window, v:false)\n\t\tlet s:window = 0\n\t\tlet s:buffer = 0\n\tendif\nendfunction\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "autoload/badge.vim",
    "content": "\" vim-badge - Bite-size badges for tab & status lines\n\" Maintainer: Rafael Bodill <justrafi at gmail dot com>\n\"-------------------------------------------------\n\n\" Configuration\n\n\" Maximum number of directories in filepath\nlet g:badge_status_filename_max_dirs =\n\t\\ get(g:, 'badge_status_filename_max_dirs', 3)\n\n\" Maximum number of characters in each directory\nlet g:badge_status_dir_max_chars =\n\t\\ get(g:, 'badge_status_dir_max_chars', 5)\n\n\" Less verbosity on specific filetypes (regexp)\nlet g:badge_filetype_blacklist =\n\t\\ get(g:, 'badge_filetype_blacklist',\n\t\\ 'vimfiler\\|gundo\\|diff\\|fugitive\\|gitv')\n\nlet g:badge_loading_charset =\n\t\\ get(g:, 'badge_loading_charset',\n\t\\ ['⠃', '⠁', '⠉', '⠈', '⠐', '⠠', '⢠', '⣠', '⠄', '⠂'])\n\nlet g:badge_nofile = get(g:, 'badge_nofile', 'N/A')\n\nlet g:badge_project_separator = get(g:, 'badge_project_separator', '')\n\n\" Private variables\nlet s:caches = []\n\n\" Clear cache on save\naugroup statusline_cache\n\tautocmd!\n\tautocmd BufWritePre,FileChangedShellPost,TextChanged,InsertLeave *\n\t\t\\ unlet! b:badge_cache_trails\n\tautocmd BufReadPost,BufFilePost,BufNewFile,BufWritePost *\n\t\t\\ for cache_name in s:caches | execute 'unlet! b:' . cache_name | endfor\naugroup END\n\nfunction! badge#project() abort\n\t\" Try to guess the project's name\n\n\tlet dir = badge#root()\n\treturn fnamemodify(dir ? dir : getcwd(), ':t')\nendfunction\n\nfunction! badge#gitstatus(...) abort\n\t\" Display git status indicators\n\n\tlet l:icons = ['₊', '∗', '₋']  \" added, modified, removed\n\tlet l:out = ''\n\t\" if &filetype ==# 'magit'\n\t\"\tlet l:map = {}\n\t\"\tfor l:file in magit#git#get_status()\n\t\"\t\tlet l:map[l:file['unstaged']] = get(l:map, l:file['unstaged'], 0) + 1\n\t\"\tendfor\n\t\"\tfor l:status in l:map\n\t\"\t\tlet l:out = values(l:map)\n\t\"\tendfor\n\t\" else\n\t\tif exists('*gitgutter#hunk#summary')\n\t\t\tlet l:summary = gitgutter#hunk#summary(bufnr('%'))\n\t\t\tfor l:idx in range(0, len(l:summary) - 1)\n\t\t\t\tif l:summary[l:idx] > 0\n\t\t\t\t\tlet l:out .= ' ' . l:icons[l:idx] . l:summary[l:idx]\n\t\t\t\tendif\n\t\t\tendfor\n\t\tendif\n\t\" endif\n\treturn trim(l:out)\nendfunction\n\nfunction! badge#filename(...) abort\n\t\" Provides relative path with limited characters in each directory name, and\n\t\" limits number of total directories. Caches the result for current buffer.\n\t\" Parameters:\n\t\"   1: Buffer number, ignored if tab number supplied\n\t\"   2: Maximum characters displayed in base filename\n\t\"   3: Maximum characters displayed in each directory\n\t\"   4: Cache key\n\n\t\" Compute buffer id\n\tlet l:bufnr = '%'\n\tif a:0 > 0\n\t\tlet l:bufnr = a:1\n\tendif\n\n\t\" Use buffer's cached filepath\n\tlet l:cache_var_name = a:0 > 3 ? a:4 : 'filename'\n\tlet l:cache_var_name = 'badge_cache_' . l:cache_var_name\n\tlet l:fn = getbufvar(l:bufnr, l:cache_var_name, '')\n\tif len(l:fn) > 0\n\t\treturn l:fn\n\tendif\n\n\tlet l:bufname = bufname(l:bufnr)\n\tlet l:filetype = getbufvar(l:bufnr, '&filetype')\n\n\tif l:filetype =~? g:badge_filetype_blacklist\n\t\t\" Empty if owned by certain plugins\n\t\tlet l:fn = ''\n\telseif l:filetype ==# 'denite.*\\|quickpick-filter'\n\t\tlet l:fn = '⌖ '\n\telseif l:filetype ==# 'qf'\n\t\tlet l:fn = '⌗ list'\n\telseif l:filetype ==# 'TelescopePrompt'\n\t\tlet l:fn = '⌖ '\n\telseif l:filetype ==# 'defx'\n\t\tlet l:fn = ' '\n\telseif l:filetype ==# 'magit'\n\t\tlet l:fn = magit#git#top_dir()\n\telseif l:filetype ==# 'vimfiler'\n\t\tlet l:fn = vimfiler#get_status_string()\n\telseif empty(l:bufname)\n\t\t\" Placeholder for empty buffer\n\t\tlet l:fn = g:badge_nofile\n\t\" elseif ! &buflisted\n\t\" \tlet l:fn = ''\n\telse\n\t\t\" Shorten dir names\n\t\tlet l:max = a:0 > 2 ? a:3 : g:badge_status_dir_max_chars\n\t\tlet short = substitute(l:bufname,\n\t\t\t\\ \"[^/]\\\\{\" . l:max . \"}\\\\zs[^/]\\*\\\\ze/\", '', 'g')\n\n\t\t\" Decrease dir count\n\t\tlet l:max = a:0 > 1 ? a:2 : g:badge_status_filename_max_dirs\n\t\tlet parts = split(short, '/')\n\t\tif len(parts) > l:max\n\t\t\tlet parts = parts[-l:max-1 : ]\n\t\tendif\n\n\t\t\" Set icon\n\t\tlet l:icon = ''\n\t\tif exists('*nerdfont#find')\n\t\t\tlet l:icon = nerdfont#find(l:bufname)\n\t\telseif exists('*defx_icons#get')\n\t\t\tlet l:icon = get(defx_icons#get().icons.extensions, expand('%:e'), {})\n\t\t\tlet l:icon = get(l:icon, 'icon', '')\n\t\tendif\n\t\tif ! empty(l:icon)\n\t\t\tlet l:fn .= l:icon . '  '\n\t\tendif\n\n\t\tlet l:fn .= join(parts, '/')\n\tendif\n\n\t\" Append fugitive blob type\n\tlet l:fugitive = getbufvar(l:bufnr, 'fugitive_type')\n\tif l:fugitive ==# 'blob'\n\t\tlet l:fn .= ' (blob)'\n\tendif\n\n\t\" Cache and return the final result\n\tcall setbufvar(l:bufnr, l:cache_var_name, l:fn)\n\tif index(s:caches, l:cache_var_name) == -1\n\t\tcall add(s:caches, l:cache_var_name)\n\tendif\n\treturn l:fn\nendfunction\n\nfunction! badge#root() abort\n\t\" Find the root directory by searching for the version-control dir\n\n\tlet dir = getbufvar('%', 'project_dir')\n\tlet curr_dir = getcwd()\n\tif empty(dir) || getbufvar('%', 'project_dir_last_cwd') != curr_dir\n\t\tlet patterns = ['.git', '.git/', '_darcs/', '.hg/', '.bzr/', '.svn/']\n\t\tfor pattern in patterns\n\t\t\tlet is_dir = stridx(pattern, '/') != -1\n\t\t\tlet match = is_dir ? finddir(pattern, curr_dir . ';')\n\t\t\t\t\\ : findfile(pattern, curr_dir . ';')\n\t\t\tif ! empty(match)\n\t\t\t\tlet dir = fnamemodify(match, is_dir ? ':p:h:h' : ':p:h')\n\t\t\t\tcall setbufvar('%', 'project_dir', dir)\n\t\t\t\tcall setbufvar('%', 'project_dir_last_cwd', curr_dir)\n\t\t\t\tbreak\n\t\t\tendif\n\t\tendfor\n\tendif\n\treturn dir\nendfunction\n\nfunction! badge#branch() abort\n\t\" Returns git branch name, using different plugins.\n\n\tif &filetype !~? g:badge_filetype_blacklist\n\t\tif exists('*gitbranch#name')\n\t\t\treturn gitbranch#name()\n\t\telseif exists('*vcs#info')\n\t\t\treturn vcs#info('%b')\n\t\telseif exists('fugitive#head')\n\t\t\treturn fugitive#head(8)\n\t\tendif\n\tendif\n\treturn ''\nendfunction\n\nfunction! badge#syntax() abort\n\t\" Returns syntax warnings from several plugins\n\t\" Supports vim-lsp, ALE, Neomake, and Syntastic\n\tif &filetype =~? g:badge_filetype_blacklist\n\t\treturn ''\n\tendif\n\n\tlet l:msg = ''\n\tlet l:errors = 0\n\tlet l:warnings = 0\n\tlet l:hints = 0\n\tlet l:information = 0\n\tif exists('*lsp#get_buffer_diagnostics_counts')\n\t\t\t\\ && get(g:, 'lsp_diagnostics_enabled', 1)\n\t\tlet l:counts = lsp#get_buffer_diagnostics_counts()\n\t\tlet l:errors = get(l:counts, 'error', '')\n\t\tlet l:warnings = get(l:counts, 'warning', '')\n\t\tlet l:hints = get(l:counts, 'hint', '')\n\t\tlet l:information = get(l:counts, 'information', '')\n\telseif exists('*neomake#Make')\n\t\tlet l:counts = neomake#statusline#get_counts(bufnr('%'))\n\t\tlet l:errors = get(l:counts, 'E', '')\n\t\tlet l:warnings = get(l:counts, 'W', '')\n\telseif exists('g:loaded_ale')\n\t\tlet l:counts = ale#statusline#Count(bufnr('%'))\n\t\tlet l:errors = l:counts.error + l:counts.style_error\n\t\tlet l:warnings = l:counts.total - l:errors\n\telseif exists('*SyntasticStatuslineFlag')\n\t\tlet l:msg = SyntasticStatuslineFlag()\n\tendif\n\tif l:errors > 0\n\t\tlet l:msg .= printf(' %d ', l:errors)\n\tendif\n\tif l:warnings > 0\n\t\tlet l:msg .= printf(' %d ', l:warnings)\n\tendif\n\tif l:hints > 0\n\t\tlet l:msg .= printf(' %d ', l:hints)\n\tendif\n\tif l:information > 0\n\t\tlet l:msg .= printf(' %d ', l:information)\n\tendif\n\treturn substitute(l:msg, '\\s*$', '', '')\nendfunction\n\nfunction! badge#trails(...) abort\n\t\" Detect trailing whitespace and cache result per buffer\n\t\" Parameters:\n\t\"   Whitespace warning message, use %s for line number, default: WS:%s\n\n\tif ! exists('b:badge_cache_trails')\n\t\tlet b:badge_cache_trails = ''\n\t\tif ! &readonly && &modifiable && line('$') < 9000\n\t\t\tlet trailing = search('\\s$', 'nw')\n\t\t\tif trailing != 0\n\t\t\t\tlet label = a:0 == 1 ? a:1 : 'WS:%s'\n\t\t\t\tlet b:badge_cache_trails .= printf(label, trailing)\n\t\t\tendif\n\t\tendif\n\tendif\n\treturn b:badge_cache_trails\nendfunction\n\nfunction! badge#modified(...) abort\n\t\" Make sure we ignore &modified when choosewin is active\n\t\" Parameters:\n\t\"   Modified symbol, default: +\n\n\tlet label = a:0 == 1 ? a:1 : '+'\n\tlet choosewin = exists('g:choosewin_active') && g:choosewin_active\n\treturn &modified && ! choosewin ? label : ''\nendfunction\n\nfunction! badge#mode(...) abort\n\t\" Returns file's mode: read-only and/or zoomed\n\t\" Parameters:\n\t\"   Read-only symbol, default: R\n\t\"   Zoomed buffer symbol, default: Z\n\n\tlet s:modes = ''\n\tif &filetype !~? g:badge_filetype_blacklist && &readonly\n\t\tlet s:modes .= a:0 > 0 ? a:1 : 'R'\n\tendif\n\tif exists('t:zoomed') && bufnr('%') == t:zoomed.nr\n\t\tlet s:modes .= a:0 > 1 ? a:2 : 'Z'\n\tendif\n\n\treturn s:modes\nendfunction\n\nfunction! badge#format() abort\n\t\" Returns file format\n\n\treturn &filetype =~? g:badge_filetype_blacklist ? '' : &fileformat\nendfunction\n\nfunction! badge#session(...) abort\n\t\" Returns an indicator for active session\n\t\" Parameters:\n\t\"   Active session symbol, default: [S]\n\n\treturn empty(v:this_session) ? '' : a:0 == 1 ? a:1 : '[S]'\nendfunction\n\nfunction! badge#indexing() abort\n\tlet l:out = ''\n\n\tif exists('*lsp#get_progress')\n\t\tlet s:lsp_progress = lsp#get_progress()\n\t\tif len(s:lsp_progress) > 0 && has_key(s:lsp_progress[0], 'message')\n\t\t\t\" Show only last progress message\n\t\t\tlet s:lsp_progress = s:lsp_progress[0]\n\t\t\tlet l:percent = get(s:lsp_progress, 'percentage')\n\t\t\tif s:lsp_progress['message'] != '' && l:percent != 100\n\t\t\t\tlet l:out .= s:lsp_progress['server'] . ':'\n\t\t\t\t\t\\ . s:lsp_progress['title'] . ' '\n\t\t\t\t\t\\ . s:lsp_progress['message']\n\t\t\t\t\t\\ . l:percent\n\t\t\t\tif l:percent >= 0\n\t\t\t\t\tlet l:out .= ' ' . string(l:percent) . '%'\n\t\t\t\tendif\n\t\t\tendif\n\t\tendif\n\tendif\n\tif exists('*gutentags#statusline')\n\t\tlet l:tags = gutentags#statusline('[', ']')\n\t\tif ! empty(l:tags)\n\t\t\tif exists('*reltime')\n\t\t\t\tlet s:wait = split(reltimestr(reltime()), '\\.')[1] / 100000\n\t\t\telse\n\t\t\t\tlet s:wait = get(s:, 'wait', 9) == 9 ? 0 : s:wait + 1\n\t\t\tendif\n\t\t\tlet l:out .= get(g:badge_loading_charset, s:wait, '') . ' ' . l:tags\n\t\tendif\n\tendif\n\tif exists('*coc#status')\n\t\tlet l:out .= coc#status()\n\tendif\n\tif exists('g:SessionLoad') && g:SessionLoad == 1\n\t\tlet l:out .= '[s]'\n\tendif\n\treturn l:out\nendfunction\n\nfunction! s:numtr(number, charset) abort\n\tlet l:result = ''\n\tfor l:char in split(a:number, '\\zs')\n\t\tlet l:result .= a:charset[l:char]\n\tendfor\n\treturn l:result\nendfunction\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "autoload/preview.vim",
    "content": "\" Improved preview for lists\n\" ---\n\nfunction! preview#open(file, line, column) abort\n\t\" Create or close preview window\n\tsilent! wincmd P\n\tif &previewwindow && expand('%') == a:file\n\t\tlet cur_pos = getcurpos()\n\t\t\" If the exact same file and numbers are used, close preview window\n\t\tif a:line == cur_pos[1] && (a:column == 0 || a:column == cur_pos[2])\n\t\t\tpclose!\n\t\t\tsilent! wincmd p\n\t\t\treturn\n\t\tendif\n\telse\n\n\t\t\" Create read-only preview\n\t\tsilent doautocmd User preview_open_pre\n\t\texecute 'silent! vertical pedit! +set\\ nofoldenable ' . a:file\n\t\tnoautocmd wincmd P\n\t\tlet b:asyncomplete_enable = 0\n\t\tlet b:sleuth_automatic = 0\n\t\tlet b:cursorword = 0\n\t\t\" local buffer settings\n\t\tsetlocal bufhidden=delete\n\t\t\" setlocal nomodifiable nobuflisted buftype=nofile\n\t\t\" local window settings\n\t\tsetlocal statusline= number conceallevel=0 nospell\n\t\tif exists('&signcolumn')\n\t\t\tsetlocal signcolumn=no\n\t\tendif\n\t\tsetlocal cursorline cursorcolumn colorcolumn=\n\t\tnoautocmd execute 'vertical resize ' . (&columns / 2)\n\t\tsilent doautocmd User preview_open_post\n\tendif\n\n\tif a:line > 1 || a:column > 1\n\t\tcall cursor(a:line, a:column)\n\n\t\t\" Align match be centered\n\t\tnormal! zz\n\t\tif a:column > &sidescrolloff * 2\n\t\t\tnormal! zs\n\t\t\tnormal! zH\n\t\tendif\n\tendif\n\n\t\" Move back to previous window, maintaining cursorline\n\tsilent noautocmd wincmd p\nendfunction\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "coc-settings.json",
    "content": "{\n  \"languageserver\": {\n    \"golang\": {\n      \"command\": \"gopls\",\n      \"rootPatterns\": [\"go.mod\", \".vim/\", \".git/\", \".hg/\"],\n      \"filetypes\": [\"go\"],\n      \"initializationOptions\": {\n        \"usePlaceholders\": true\n      }\n    },\n    \"ccls\": {\n        \"command\": \"ccls\",\n        \"args\": [\"--log-file=/tmp/ccls.log\"],\n        \"filetypes\": [\"c\", \"cpp\", \"cuda\", \"objc\", \"objcpp\"],\n        \"rootPatterns\": [\".ccls\", \"compile_commands.json\", \".vim/\", \".git/\", \".hg/\"],\n        \"initializationOptions\": {\n            \"cache\": {\n                \"directory\": \".ccls-cache\"\n            },\n            \"clang\": {\n                \"resourceDir\": \"$CODE_COMPLETE_CLANG_LIB_PATH\"\n            },\n            \"index\": {\n        \"trackDependency\": 1 ,\n        \"initialBlacklist\": [\".\"]\n            }\n        }\n    }\n  },\n  \"python.pythonPath\": \"/usr/local/bin/python3\",\n  \"suggest.noselect\": false,\n  \"colors.enable\": true,\n  \"highlight.disableLanguages\": [\"go\"],\n  \"inlayHint.enable\": false\n}\n"
  },
  {
    "path": "config/filetype.vim",
    "content": "\" File Types\n\" ---\n\naugroup user_plugin_filetype \" {{{\n\tautocmd!\n\n\t\" Reload vim configuration automatically on-save\n\tautocmd BufWritePost $VIM_PATH/{*.vim,*.yaml,vimrc} nested\n\t\t\\ source $MYVIMRC | redraw\n\n\t\" Highlight current line only on focused window, unless:\n\t\" 1. Cursor-line is already set to wanted value\n\t\" 2. Denite or Clap buffers\n\t\" 3. Preview window\n\t\" 4. Completion popup menu is visible\n\tautocmd WinEnter,BufEnter,InsertLeave *\n\t\t\\ if ! &cursorline && &filetype !~# '^\\(denite\\|clap_\\|.*quickpick\\)'\n\t\t\\      && ! &previewwindow && ! pumvisible()\n\t\t\\ | setlocal cursorline\n\t\t\\ | endif\n\tautocmd WinLeave,BufLeave,InsertEnter *\n\t\t\\ if &cursorline && &filetype !~# '^\\(denite\\|clap_\\|.*quickpick\\)'\n\t\t\\      && ! &previewwindow && ! pumvisible()\n\t\t\\ | setlocal nocursorline\n\t\t\\ | endif\n\n\t\" Automatically set read-only for files being edited elsewhere\n\tautocmd SwapExists * nested let v:swapchoice = 'o'\n\n\t\" Update diff comparison once leaving insert mode\n\tautocmd InsertLeave * if &l:diff | diffupdate | endif\n\n\t\" Equalize window dimensions when resizing vim window\n\tautocmd VimResized * wincmd =\n\n\t\" Force write shada on leaving nvim\n\tautocmd VimLeave * if has('nvim') | wshada! | else | wviminfo! | endif\n\n\t\" Check if file changed when its window is focus, more eager than 'autoread'\n\tautocmd FocusGained * checktime\n\n\tautocmd Syntax * if line('$') > 5000 | syntax sync minlines=200 | endif\n\n\t\" Neovim terminal settings\n\tif has('nvim-0.5')\n\t\tautocmd TermOpen * setlocal modifiable\n\t\ttry\n\t\t\tautocmd TextYankPost *\n\t\t\t\t\\ silent! lua vim.highlight.on_yank {higroup=\"IncSearch\", timeout=150}\n\t\tendtry\n\tendif\n\n\t\" Update filetype on save if empty\n\tautocmd BufWritePost * nested\n\t\t\\ if &l:filetype ==# '' || exists('b:ftdetect')\n\t\t\\ |   unlet! b:ftdetect\n\t\t\\ |   filetype detect\n\t\t\\ | endif\n\n\t\" Reload Vim script automatically if setlocal autoread\n\tautocmd BufWritePost,FileWritePost *.vim nested\n\t\t\\ if &l:autoread > 0 | source <afile> |\n\t\t\\   echo 'source ' . bufname('%') |\n\t\t\\ endif\n\n\t\" When editing a file, always jump to the last known cursor position.\n\t\" Credits: https://github.com/farmergreg/vim-lastplace\n\tautocmd BufReadPost *\n\t\t\\ if index(['gitcommit', 'gitrebase', 'svn', 'hgcommit'], &buftype) == -1 &&\n\t\t\\      index(['quickfix', 'nofile', 'help'], &buftype) == -1 &&\n\t\t\\      ! &diff && ! &previewwindow &&\n\t\t\\      line(\"'\\\"\") > 0 && line(\"'\\\"\") <= line(\"$\")\n\t\t\\|   if line(\"w$\") == line(\"$\")\n\t\t\\|     execute \"normal! g`\\\"\"\n\t\t\\|   elseif line(\"$\") - line(\"'\\\"\") > ((line(\"w$\") - line(\"w0\")) / 2) - 1\n\t\t\\|     execute \"normal! g`\\\"zz\"\n\t\t\\|   else\n\t\t\\|     execute \"normal! \\G'\\\"\\<c-e>\"\n\t\t\\|   endif\n\t\t\\|   if foldclosed('.') != -1\n\t\t\\|     execute 'normal! zvzz'\n\t\t\\|   endif\n\t\t\\| endif\n\n\tautocmd FileType apache setlocal path+=./;/\n\n\tautocmd FileType html setlocal path+=./;/\n\n\tautocmd FileType crontab setlocal nobackup nowritebackup\n\n\tautocmd FileType yaml.docker-compose setlocal expandtab\n\n\tautocmd FileType gitcommit setlocal spell\n\n\tautocmd FileType gitcommit,qfreplace setlocal nofoldenable\n\n\tautocmd FileType php setlocal matchpairs-=<:> iskeyword+=\\\\\n\n\tautocmd FileType python\n\t\t\\ setlocal expandtab smarttab nosmartindent\n\t\t\\ | setlocal tabstop=4 softtabstop=4 shiftwidth=4 textwidth=120\n\n\tautocmd FileType markdown\n\t\t\\ setlocal expandtab nospell conceallevel=0\n\t\t\\ | setlocal autoindent formatoptions=tcroqn2 comments=n:>\n\n\t\" https://webpack.github.io/docs/webpack-dev-server.html#working-with-editors-ides-supporting-safe-write\n\tautocmd FileType css,javascript,javascriptreact setlocal backupcopy=yes\n\naugroup END \" }}}\n\n\" Internal Plugin Settings  {{{\n\" ------------------------\n\n\" PHP {{{\nlet g:PHP_removeCRwhenUnix = 0\n\n\" }}}\n\" Python {{{\nlet g:python_recommended_style = 0\nlet g:pydoc_executable = 0\nlet g:python_highlight_all = 1\n\" let g:python_highlight_builtins = 1\n\" let g:python_highlight_exceptions = 1\n\" let g:python_highlight_string_format = 1\n\" let g:python_highlight_doctests = 1\n\" let g:python_highlight_class_vars = 1\n\" let g:python_highlight_operators = 1\n\n\" }}}\n\" Vim {{{\nlet g:vimsyntax_noerror = 1\nlet g:vim_indent_cont = &shiftwidth\n\n\" }}}\n\" Bash {{{\nlet g:is_bash = 1\nlet g:sh_no_error = 1\n\n\" }}}\n\" Java {{{\nlet g:java_highlight_functions = 'style'\nlet g:java_highlight_all = 1\nlet g:java_highlight_debug = 1\nlet g:java_allow_cpp_keywords = 1\nlet g:java_space_errors = 1\nlet g:java_highlight_functions = 1\n\n\" }}}\n\" JavaScript {{{\nlet g:SimpleJsIndenter_BriefMode = 1\nlet g:SimpleJsIndenter_CaseIndentLevel = -1\n\n\" }}}\n\" Ruby {{{\nlet g:ruby_no_expensive = 1\n\n\" }}}\n\" Folding {{{\n\" augroup: a\n\" function: f\nlet g:vimsyn_folding = 'af'\nlet g:tex_fold_enabled = 1\nlet g:xml_syntax_folding = 1\nlet g:php_folding = 2\nlet g:php_phpdoc_folding = 1\nlet g:perl_fold = 1\n\" }}}\n\" }}}\n\n\" vim: set foldmethod=marker ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/general.vim",
    "content": "\" Neo/vim Settings\n\" ===\n\n\" General {{{\nset mouse=nv                 \" Disable mouse in command-line mode\nset modeline                 \" automatically setting options from modelines\nset report=2                 \" Report on line changes\nset errorbells               \" Trigger bell on error\nset visualbell               \" Use visual bell instead of beeping\nset hidden                   \" hide buffers when abandoned instead of unload\nset fileformats=unix,dos,mac \" Use Unix as the standard file type\nset magic                    \" For regular expressions turn magic on\nset path+=**                 \" Directories to search when using gf and friends\nset isfname-==               \" Remove =, detects filename in var=/foo/bar\nset virtualedit=block        \" Position cursor anywhere in visual block\nset synmaxcol=2500           \" Don't syntax highlight long lines\nset formatoptions+=1         \" Don't break lines after a one-letter word\nset formatoptions-=t         \" Don't auto-wrap text\nset formatoptions-=o         \" Disable comment-continuation (normal 'o'/'O')\nif has('patch-7.3.541')\n\tset formatoptions+=j       \" Remove comment leader when joining lines\nendif\n\nif has('vim_starting')\n\tset encoding=utf-8\n\tscriptencoding utf-8\nendif\n\n\" What to save for views and sessions:\nset viewoptions=folds,cursor,curdir,slash,unix\nset sessionoptions=curdir,help,tabpages,winsize\n\nif has('mac') && has('vim_starting')\n\tlet g:clipboard = {\n\t\t\\   'name': 'macOS-clipboard',\n\t\t\\   'copy': {\n\t\t\\      '+': 'pbcopy',\n\t\t\\      '*': 'pbcopy',\n\t\t\\    },\n\t\t\\   'paste': {\n\t\t\\      '+': 'pbpaste',\n\t\t\\      '*': 'pbpaste',\n\t\t\\   },\n\t\t\\   'cache_enabled': 0,\n\t\t\\ }\nendif\n\nif has('clipboard') && has('vim_starting')\n\t\" set clipboard& clipboard+=unnamedplus\n\tset clipboard& clipboard^=unnamed,unnamedplus\nendif\n\n\" }}}\n\" Wildmenu {{{\n\" --------\nif has('wildmenu')\n\tif ! has('nvim')\n\t\tset nowildmenu\n\t\tset wildmode=list:longest,full\n\tendif\n\tset wildignorecase\n\tset wildignore+=.git,.hg,.svn,.stversions,*.pyc,*.spl,*.o,*.out,*~,%*\n\tset wildignore+=*.jpg,*.jpeg,*.png,*.gif,*.zip,**/tmp/**,*.DS_Store\n\tset wildignore+=**/node_modules/**,**/bower_modules/**,*/.sass-cache/*\n\tset wildignore+=__pycache__,*.egg-info,.pytest_cache,.mypy_cache/**\nendif\n\n\" }}}\n\" Vim Directories {{{\n\" ---------------\nset undofile swapfile nobackup\nset directory=$DATA_PATH/swap//,$DATA_PATH,~/tmp,/var/tmp,/tmp\nset undodir=$DATA_PATH/undo//,$DATA_PATH,~/tmp,/var/tmp,/tmp\nset backupdir=$DATA_PATH/backup/,$DATA_PATH,~/tmp,/var/tmp,/tmp\nset viewdir=$DATA_PATH/view/\nset spellfile=$VIM_PATH/spell/en.utf-8.add\n\n\" History saving\nset history=2000\n\nif has('nvim') && ! has('win32') && ! has('win64')\n\tset shada=!,'100,<20,@100,s10,h,r/tmp,r/private/var\nelse\n\tset viminfo='100,<20,@50,h,n$DATA_PATH/viminfo\nendif\n\naugroup user_persistent_undo\n\tautocmd!\n\tau BufWritePre /tmp/*          setlocal noundofile\n\tau BufWritePre COMMIT_EDITMSG  setlocal noundofile\n\tau BufWritePre MERGE_MSG       setlocal noundofile\n\tau BufWritePre *.tmp           setlocal noundofile\n\tau BufWritePre *.bak           setlocal noundofile\naugroup END\n\n\" If sudo, disable vim swap/backup/undo/shada/viminfo writing\nif $SUDO_USER !=# '' && $USER !=# $SUDO_USER\n\t\t\\ && $HOME !=# expand('~'.$USER, 1)\n\t\t\\ && $HOME ==# expand('~'.$SUDO_USER, 1)\n\n\tset noswapfile\n\tset nobackup\n\tset nowritebackup\n\tset noundofile\n\tif has('nvim')\n\t\tset shada=\"NONE\"\n\telse\n\t\tset viminfo=\"NONE\"\n\tendif\nendif\n\n\" Secure sensitive information, disable backup files in temp directories\nif exists('&backupskip')\n\tset backupskip+=/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*,*/shm/*,/private/var/*\n\tset backupskip+=.vault.vim\nendif\n\n\" Disable swap/undo/viminfo files in temp directories or shm\naugroup user_secure\n\tautocmd!\n\tsilent! autocmd BufNewFile,BufReadPre\n\t\t\\ /tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*,*/shm/*,/private/var/*,.vault.vim\n\t\t\\ setlocal noswapfile noundofile\n\t\t\\ | set nobackup nowritebackup\n\t\t\\ | if has('nvim') | set shada= | else | set viminfo= | endif\naugroup END\n\n\" }}}\n\" Tabs and Indents {{{\n\" ----------------\nset textwidth=120    \" Text width maximum chars before wrapping\nset noexpandtab     \" Don't expand tabs to spaces\nset tabstop=4       \" The number of spaces a tab is\nset shiftwidth=4    \" Number of spaces to use in auto(indent)\nset softtabstop=-1  \" Automatically keeps in sync with shiftwidth\nset smarttab        \" Tab insert blanks according to 'shiftwidth'\nset autoindent      \" Use same indenting on new lines\n\" set smartindent     \" Smart autoindenting on new lines\nset shiftround      \" Round indent to multiple of 'shiftwidth'\n\nif exists('&breakindent')\n\tset breakindentopt=shift:2,min:20\nendif\n\n\" }}}\n\" Timing {{{\n\" ------\nset timeout ttimeout\nset timeoutlen=500   \" Time out on mappings\nset ttimeoutlen=10   \" Time out on key codes\nset updatetime=400   \" Idle time to write swap and trigger CursorHold\nset redrawtime=2000  \" Time in milliseconds for stopping display redraw\n\n\" }}}\n\" Searching {{{\n\" ---------\nset ignorecase    \" Search ignoring case\nset smartcase     \" Keep case when searching with *\nset infercase     \" Adjust case in insert completion mode\nset incsearch     \" Incremental search\nset wrapscan      \" Searches wrap around the end of the file\n\nset complete=.,w,b,k  \" C-n completion: Scan buffers, windows and dictionary\n\nif exists('+inccommand')\n\tset inccommand=nosplit\nendif\n\nif executable('rg')\n\tset grepformat=%f:%l:%c:%m\n\tlet &grepprg =\n\t\t\\ 'rg --vimgrep --no-heading' . (&smartcase ? ' --smart-case' : '') . ' --'\nelseif executable('ag')\n\tset grepformat=%f:%l:%c:%m\n\tlet &grepprg =\n\t\t\\ 'ag --vimgrep' . (&smartcase ? ' --smart-case' : '') . ' --'\nendif\n\n\" }}}\n\" Behavior {{{\n\" --------\nset nowrap                      \" No wrap by default\nset linebreak                   \" Break long lines at 'breakat'\nset breakat=\\ \\\t;:,!?           \" Long lines break chars\nset nostartofline               \" Cursor in same column for few commands\nset whichwrap+=h,l,<,>,[,],~    \" Move to following line on certain keys\nset splitbelow splitright       \" Splits open bottom right\n\" set switchbuf=useopen           \" Look for matching window buffers first\nset backspace=indent,eol,start  \" Intuitive backspacing in insert mode\nset diffopt=filler,iwhite       \" Diff mode: show fillers, ignore whitespace\nset completeopt=menuone         \" Always show menu, even for one item\n\nif has('patch-7.4.775')\n\t\" Do not select a match in the menu.\n\t\" Do not insert any text for a match until the user selects from menu.\n\tset completeopt+=noselect,noinsert\nendif\n\nif has('patch-8.1.0360') || has('nvim-0.5')\n\tset diffopt=internal,algorithm:patience\n\t\" set diffopt=indent-heuristic,algorithm:patience\nendif\n\n\" Use the new Neovim :h jumplist-stack\nif has('nvim-0.5')\n\tset jumpoptions=stack\nendif\n\n\" }}}\n\" Editor UI {{{\n\" --------------------\nset noshowmode          \" Don't show mode in cmd window\nset shortmess=aoOTI     \" Shorten messages and don't show intro\nset scrolloff=2         \" Keep at least 2 lines above/below\nset sidescrolloff=5     \" Keep at least 5 lines left/right\nset number            \" Don't show line numbers\nset noruler             \" Disable default status ruler\nset list                \" Show hidden characters\n\nset showtabline=2       \" Always show the tabs line\nset winwidth=30         \" Minimum width for active window\nset winminwidth=10      \" Minimum width for inactive windows\n\" set winheight=4         \" Minimum height for active window\n\" set winminheight=4      \" Minimum height for inactive window\nset pumheight=15        \" Pop-up menu's line height\nset helpheight=12       \" Minimum help window height\nset previewheight=12    \" Completion preview height\n\nset showcmd             \" Show command in status line\nset cmdheight=2         \" Height of the command line\nset cmdwinheight=5      \" Command-line lines\n\" set noequalalways       \" Don't resize windows on split or close\nset laststatus=2        \" Always show a status line\nset colorcolumn=+0      \" Column highlight at textwidth's max character-limit\nset display=lastline\n\nif has('folding') && has('vim_starting')\n\tset foldenable\n\tset foldmethod=indent\n\tset foldlevelstart=99\nendif\n\nif has('nvim-0.4')\n\tset signcolumn=auto:1\nelseif exists('&signcolumn')\n\tset signcolumn=auto\nendif\n\n\" UI Symbols\n\" icons:  ▏│ ¦ ╎ ┆ ⋮ ⦙ ┊ \nlet &showbreak='↳  '\nset listchars=tab:\\▏\\ ,extends:⟫,precedes:⟪,nbsp:␣,trail:·\n\" set fillchars=foldopen:O,foldclose:x\n\" set fillchars=vert:▉,fold:─\n\nif has('patch-7.4.314')\n\t\" Do not display completion messages\n\tset shortmess+=c\nendif\n\nif has('patch-7.4.1570')\n\t\" Do not display message when editing files\n\tset shortmess+=F\nendif\n\n\" if exists('+previewpopup')\n\" \tset previewpopup=height:10,width:60\n\" endif\n\n\" Pseudo-transparency for completion menu and floating windows\nif has('termguicolors') && &termguicolors\n\tif exists('&pumblend')\n\t\tset pumblend=10\n\tendif\n\tif exists('&winblend')\n\t\tset winblend=10\n\tendif\nendif\n\n\" solve wrong encoding\nif has(\"multi_byte\")\n    set encoding=utf-8\n    \" set termencoding=utf-8\n    set formatoptions+=mM\n    set fencs=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1\nendif\n\n\" }}}\n\n\" vim: set foldmethod=marker ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/init.vim",
    "content": "\" Configuration and plugin-manager manager :)\n\" ---\n\" Maintainer: Rafael Bodill\n\" See: github.com/rafi/vim-config\n\"\n\" Plugin-manager agnostic initialization and user configuration parsing\n\n\" Set custom augroup\naugroup user_events\n\tautocmd!\naugroup END\n\n\" Initializes options\nlet s:package_manager = get(g:, 'etc_package_manager', 'dein')\nif empty(s:package_manager) || s:package_manager ==# 'none'\n\tfinish\nendif\n\n\" Enables 24-bit RGB color in the terminal\nif has('termguicolors')\n\tif empty($COLORTERM) || $COLORTERM =~# 'truecolor\\|24bit'\n\t\tset termguicolors\n\tendif\nendif\n\nif ! has('nvim')\n\tset t_Co=256\n\t\" Set Vim-specific sequences for RGB colors\n\t\" Fixes 'termguicolors' usage in vim+tmux\n\t\" :h xterm-true-color\n\tlet &t_8f = \"\\<Esc>[38;2;%lu;%lu;%lum\"\n\tlet &t_8b = \"\\<Esc>[48;2;%lu;%lu;%lum\"\nendif\n\n\" Disable vim distribution plugins\n\n\" let g:loaded_gzip = 1\n\" let g:loaded_tar = 1\n\" let g:loaded_tarPlugin = 1\n\" let g:loaded_zip = 1\n\" let g:loaded_zipPlugin = 1\n\nlet g:loaded_getscript = 1\nlet g:loaded_getscriptPlugin = 1\nlet g:loaded_vimball = 1\nlet g:loaded_vimballPlugin = 1\n\nlet g:loaded_matchit = 1\nlet g:loaded_matchparen = 1\nlet g:loaded_2html_plugin = 1\nlet g:loaded_logiPat = 1\nlet g:loaded_rrhelper = 1\nlet g:no_gitrebase_maps = 1\n\nlet g:loaded_netrw = 1\nlet g:loaded_netrwPlugin = 1\nlet g:loaded_netrwSettings = 1\nlet g:loaded_netrwFileHandlers = 1\n\n\" Set main configuration directory as parent directory\nlet $VIM_PATH =\n\t\\ get(g:, 'etc_vim_path',\n\t\\   exists('*stdpath') ? stdpath('config') :\n\t\\   ! empty($MYVIMRC) ? fnamemodify(expand($MYVIMRC, 1), ':h') :\n\t\\   ! empty($VIMCONFIG) ? expand($VIMCONFIG, 1) :\n\t\\   ! empty($VIM_PATH) ? expand($VIM_PATH, 1) :\n\t\\   fnamemodify(resolve(expand('<sfile>:p')), ':h:h')\n\t\\ )\n\n\" Set data/cache directory as $XDG_CACHE_HOME/vim\nlet $DATA_PATH =\n\t\\ expand(($XDG_CACHE_HOME ? $XDG_CACHE_HOME : '~/.cache') . '/vim', 1)\n\n\" Collection of user plugin list config file-paths\nlet s:config_paths = get(g:, 'etc_config_paths', [\n\t\\ $VIM_PATH . '/config/plugins.yaml',\n\t\\ $VIM_PATH . '/config/local.plugins.yaml',\n\t\\ $VIM_PATH . '/usr/vimrc.yaml',\n\t\\ $VIM_PATH . '/usr/vimrc.json',\n\t\\ $VIM_PATH . '/vimrc.yaml',\n\t\\ $VIM_PATH . '/vimrc.json',\n\t\\ ])\n\n\" Filter non-existent config paths\ncall filter(s:config_paths, 'filereadable(v:val)')\n\nfunction! s:main()\n\tif has('vim_starting')\n\t\t\" When using VIMINIT trick for exotic MYVIMRC locations, add path now.\n\t\tif &runtimepath !~# $VIM_PATH\n\t\t\tset runtimepath^=$VIM_PATH\n\t\t\tset runtimepath+=$VIM_PATH/after\n\t\tendif\n\n\t\t\" Ensure data directories\n\t\tfor s:path in [\n\t\t\t\t\\ $DATA_PATH,\n\t\t\t\t\\ $DATA_PATH . '/undo',\n\t\t\t\t\\ $DATA_PATH . '/backup',\n\t\t\t\t\\ $DATA_PATH . '/session',\n\t\t\t\t\\ $DATA_PATH . '/swap',\n\t\t\t\t\\ $VIM_PATH . '/spell' ]\n\t\t\tif ! isdirectory(s:path)\n\t\t\t\tcall mkdir(s:path, 'p', 0770)\n\t\t\tendif\n\t\tendfor\n\n\t\t\" Python interpreter settings\n\t\tif has('nvim')\n\t\t\t\" Try the virtualenv created by venv.sh\n\t\t\tlet l:virtualenv = $DATA_PATH . '/venv/bin/python'\n\t\t\tif empty(l:virtualenv) || ! filereadable(l:virtualenv)\n\t\t\t\t\" Fallback to old virtualenv location\n\t\t\t\tlet l:virtualenv = $DATA_PATH . '/venv/neovim3/bin/python'\n\t\t\tendif\n\t\t\tif filereadable(l:virtualenv)\n\t\t\t\tlet g:python3_host_prog = l:virtualenv\n\t\t\tendif\n\n\t\telseif has('pythonx')\n\t\t\tif has('python3')\n\t\t\t\tset pyxversion=3\n\t\t\telseif has('python')\n\t\t\t\tset pyxversion=2\n\t\t\tendif\n\t\tendif\n\tendif\n\n\t\" Initializes chosen package manager\n\tcall s:use_{s:package_manager}()\nendfunction\n\n\" Use dein as a plugin manager\nfunction! s:use_dein()\n\tlet l:cache_path = $DATA_PATH . '/dein'\n\n\tif has('vim_starting')\n\t\t\" Use dein as a plugin manager\n\t\tlet g:dein#auto_recache = 1\n\t\tlet g:dein#install_max_processes = 12\n\n\t\t\" Add dein to vim's runtimepath\n\t\tif &runtimepath !~# '/dein.vim'\n\t\t\tlet s:dein_dir = l:cache_path . '/repos/github.com/Shougo/dein.vim'\n\t\t\t\" Clone dein if first-time setup\n\t\t\tif ! isdirectory(s:dein_dir)\n\t\t\t\texecute '!git clone https://github.com/Shougo/dein.vim' s:dein_dir\n\t\t\t\tif v:shell_error\n\t\t\t\t\tcall s:error('dein installation has failed! is git installed?')\n\t\t\t\t\tfinish\n\t\t\t\tendif\n\t\t\tendif\n\n\t\t\texecute 'set runtimepath+='.substitute(\n\t\t\t\t\\ fnamemodify(s:dein_dir, ':p') , '/$', '', '')\n\t\tendif\n\tendif\n\n\t\" Initialize dein.vim (package manager)\n\tif dein#load_state(l:cache_path)\n\t\tlet l:rc = s:parse_config_files()\n\t\tif empty(l:rc)\n\t\t\tcall s:error('Empty plugin list')\n\t\t\treturn\n\t\tendif\n\n\t\t\" Start propagating file paths and plugin presets\n\t\tcall dein#begin(l:cache_path, extend([expand('<sfile>')], s:config_paths))\n\n\t\tfor plugin in l:rc\n\t\t\t\" If vim already started, don't re-add existing ones\n\t\t\tif has('vim_starting')\n\t\t\t\t\t\\ || ! has_key(g:dein#_plugins, fnamemodify(plugin['repo'], ':t'))\n\t\t\t\tcall dein#add(plugin['repo'], extend(plugin, {}, 'keep'))\n\t\t\tendif\n\t\tendfor\n\n\t\t\" Add any local ./dev plugins\n\t\tif isdirectory($VIM_PATH . '/dev')\n\t\t\tcall dein#local($VIM_PATH . '/dev', { 'frozen': 1, 'merged': 0 })\n\t\tendif\n\t\tcall dein#end()\n\n\t\t\" Save cached state for faster startups\n\t\tif ! g:dein#_is_sudo\n\t\t\tcall dein#save_state()\n\t\tendif\n\n\t\t\" Update or install plugins if a change detected\n\t\tif dein#check_install()\n\t\t\tif ! has('nvim')\n\t\t\t\tset nomore\n\t\t\tendif\n\t\t\tcall dein#install()\n\t\tendif\n\tendif\n\n\tif has('vim_starting') && ! has('nvim')\n\t\tfiletype plugin indent on\n\t\tsyntax enable\n\tendif\nendfunction\n\nfunction! s:use_plug() abort\n\t\" vim-plug package-manager initialization\n\tlet l:cache_root = $DATA_PATH . '/plug'\n\tlet l:cache_init = l:cache_root . '/init.vimplug'\n\tlet l:cache_repos = l:cache_root . '/repos'\n\n\taugroup user_plugin_vimplug\n\t\tautocmd!\n\taugroup END\n\n\tif &runtimepath !~# '/init.vimplug'\n\n\t\tif ! isdirectory(l:cache_init)\n\t\t\tsilent !curl -fLo $DATA_PATH/plug/init.vimplug/autoload/plug.vim\n\t\t\t\t\\ --create-dirs\n\t\t\t\t\\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim\n\n\t\t\tautocmd user_plugin_vimplug VimEnter * PlugInstall --sync | source $MYVIMRC\n\t\tendif\n\n\t\texecute 'set runtimepath+='.substitute(\n\t\t\t\\ fnamemodify(l:cache_init, ':p') , '/$', '', '')\n\tendif\n\n\tlet l:rc = s:parse_config_files()\n\tif empty(l:rc)\n\t\tcall s:error('Empty plugin list')\n\t\treturn\n\tendif\n\n\tcall plug#begin(l:cache_repos)\n\tfor plugin in l:rc\n\t\tcall plug#(plugin['repo'], extend(plugin, {}, 'keep'))\n\tendfor\n\tcall plug#end()\nendfunction\n\nfunction! s:parse_config_files()\n\tlet l:merged = []\n\ttry\n\t\t\" Merge all lists of plugins together\n\t\tfor l:cfg_file in s:config_paths\n\t\t\tlet l:merged = extend(l:merged, s:load_config(l:cfg_file))\n\t\tendfor\n\tcatch /.*/\n\t\tcall s:error(\n\t\t\t\\ 'Unable to read configuration files at ' . string(s:config_paths))\n\t\techoerr v:exception\n\tendtry\n\n\t\" If there's more than one config file source,\n\t\" de-duplicate plugins by repo key.\n\tif len(s:config_paths) > 1\n\t\tcall s:dedupe_plugins(l:merged)\n\tendif\n\treturn l:merged\nendfunction\n\nfunction! s:dedupe_plugins(list)\n\tlet l:list = reverse(a:list)\n\tlet l:i = 0\n\tlet l:seen = {}\n\twhile i < len(l:list)\n\t\tlet l:key = list[i]['repo']\n\t\tif l:key !=# '' && has_key(l:seen, l:key)\n\t\t\tcall remove(l:list, i)\n\t\telse\n\t\t\tif l:key !=# ''\n\t\t\t\tlet l:seen[l:key] = 1\n\t\t\tendif\n\t\t\tlet l:i += 1\n\t\tendif\n\tendwhile\n\treturn reverse(l:list)\nendfunction\n\n\" General utilities, mainly for dealing with user configuration parsing\n\" ---\n\nfunction! s:error(msg)\n\tfor l:mes in s:str2list(a:msg)\n\t\techohl WarningMsg | echomsg '[config/init] ' . l:mes | echohl None\n\tendfor\nendfunction\n\nfunction! s:debug(msg)\n\tfor l:mes in s:str2list(a:msg)\n\t\techohl WarningMsg | echomsg '[config/init] ' . l:mes | echohl None\n\tendfor\nendfunction\n\nfunction! s:load_config(filename)\n\t\" Parse YAML/JSON config file\n\tif a:filename =~# '\\.json$'\n\t\t\" Parse JSON with built-in json_decode\n\t\tlet l:json = readfile(a:filename)\n\t\treturn has('nvim') ? json_decode(l:json) : json_decode(join(l:json))\n\telseif a:filename =~# '\\.ya\\?ml$'\n\t\t\" Parse YAML with common command-line utilities\n\t\treturn s:load_yaml(a:filename)\n\tendif\n\tcall s:error('Unknown config file format ' . a:filename)\n\treturn ''\nendfunction\n\nfunction! s:str2list(expr)\n\t\" Convert string to list\n\treturn type(a:expr) ==# v:t_list ? a:expr : split(a:expr, '\\n')\nendfunction\n\n\" YAML related\n\" ---\n\nlet s:convert_tool = ''\n\nfunction! s:load_yaml(filename)\n\tif empty(s:convert_tool)\n\t\tlet s:convert_tool = s:find_yaml2json_method()\n\tendif\n\n\tif s:convert_tool ==# 'ruby'\n\t\tlet l:cmd = \"ruby -e 'require \\\"json\\\"; require \\\"yaml\\\"; \".\n\t\t\t\\ \"print JSON.generate YAML.load \\$stdin.read'\"\n\telseif s:convert_tool ==# 'python'\n\t\tlet l:cmd = \"python -c 'import sys,yaml,json; y=yaml.safe_load(sys.stdin.read()); print(json.dumps(y))'\"\n\telseif s:convert_tool ==# 'yq'\n\t\tlet l:cmd = 'yq e -j -I 0'\n\telse\n\t\tlet l:cmd = s:convert_tool\n\tendif\n\n\ttry\n\t\tlet l:raw = readfile(a:filename)\n\t\treturn json_decode(system(l:cmd, l:raw))\n\tcatch /.*/\n\t\tcall s:error([\n\t\t\t\\ string(v:exception),\n\t\t\t\\ 'Error loading ' . a:filename,\n\t\t\t\\ 'Caught: ' . string(v:exception),\n\t\t\t\\ ])\n\tendtry\nendfunction\n\nfunction! s:find_yaml2json_method()\n\tif exists('*json_decode')\n\t\t\" Try different tools to convert YAML into JSON:\n\t\tif executable('yj')\n\t\t\t\" See https://github.com/sclevine/yj\n\t\t\treturn 'yj'\n\t\telseif executable('yq')\n\t\t\t\" See https://github.com/mikefarah/yq\n\t\t\treturn 'yq'\n\t\telseif executable('yaml2json') && s:test_yaml2json()\n\t\t\t\" See https://github.com/bronze1man/yaml2json\n\t\t\treturn 'yaml2json'\n\t\t\" Or, try ruby. Which is installed on every macOS by default\n\t\t\" and has yaml built-in.\n\t\telseif executable('ruby') && s:test_ruby_yaml()\n\t\t\treturn 'ruby'\n\t\t\" Or, fallback to use python3 and PyYAML\n\t\telseif executable('python') && s:test_python_yaml()\n\t\t\treturn 'python'\n\t\tendif\n\t\tcall s:error([\n\t\t\t\\ 'Unable to find a proper YAML parsing utility.',\n\t\t\t\\ 'Please run: pip3 install --user PyYAML',\n\t\t\t\\ ])\n\telse\n\t\tcall s:error('\"json_decode\" unsupported. Upgrade to latest Neovim or Vim')\n\tendif\nendfunction\n\nfunction! s:test_yaml2json()\n\t\" Test yaml2json capabilities\n\ttry\n\t\tlet result = system('yaml2json', \"---\\na: 1.5\")\n\t\tif v:shell_error != 0\n\t\t\treturn 0\n\t\tendif\n\t\tlet result = json_decode(result)\n\t\treturn result.a == 1.5\n\tcatch\n\tendtry\n\treturn 0\nendfunction\n\nfunction! s:test_ruby_yaml()\n\t\" Test Ruby YAML capabilities\n\tcall system(\"ruby -e 'require \\\"json\\\"; require \\\"yaml\\\"'\")\n\treturn v:shell_error == 0\nendfunction\n\nfunction! s:test_python_yaml()\n\t\" Test Python YAML capabilities\n\tcall system(\"python -c 'import sys,yaml,json'\")\n\treturn v:shell_error == 0\nendfunction\n\ncall s:main()\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/local.plugins.yaml",
    "content": "- repo: ntpeters/vim-better-whitespace\n  hook_add: |\n    let g:better_whitespace_filetypes_blacklist=['diff', 'git', 'gitcommit', 'unite', 'qf', 'help', 'markdown', 'fugitive', 'defx', 'dashboard']\n\n- repo: terryma/vim-multiple-cursors\n- repo: tpope/vim-repeat\n- repo: jszakmeister/vim-togglecursor\n- repo: mhinz/vim-startify\n# - repo: glepnir/dashboard-nvim\n#   on_event: VimEnter\n#   hook_source: luafile $VIM_PATH/config/plugins/dashboard.lua\n# - repo: nvim-tree/nvim-web-devicons\n- repo: tpope/vim-abolish\n- repo: tpope/vim-projectionist\n- repo: vim-scripts/BufOnly.vim\n- repo: godlygeek/tabular\n# - repo: kien/rainbow_parentheses.vim\n- repo: haya14busa/incsearch.vim\n- repo: haya14busa/incsearch-fuzzy.vim\n- repo: vim-airline/vim-airline\n- repo: vim-airline/vim-airline-themes\n- repo: tpope/vim-surround\n- repo: junegunn/vim-easy-align\n- repo: voldikss/vim-translator\n- repo: APZelos/blamer.nvim\n- repo: solarnz/thrift.vim\n- { repo: Valloric/MatchTagAlways, on_ft: [html, xhtml, xml, jinja]}\n\n- repo: Yggdroot/indentLine\n  hook_add: |\n    let g:indentLine_bufNameExclude = ['NERD_tree.*', 'defx', 'startify', '__vista__', 'dashboard']\n    let g:indentLine_fileTypeExclude = ['defx', '__vista__', 'help', 'clap_input', 'tagbar', 'vista_kind']\n\n- repo: neoclide/coc.nvim\n  merge: 0\n  rev: release\n  hook_add: source $VIM_PATH/config/plugins/coc.vim\n\n# pip install https://github.com/Rykka/instant-rst.py/archive/master.zip\n- { repo: gu-fan/riv.vim, on_ft: rst}\n- { repo: gu-fan/InstantRst, on_ft: rst}\n- { repo: PegasusWang/RST-Tables, on_ft: rst}\n- { repo: iamcco/mathjax-support-for-mkdp, on_ft: markdown}\n\n- repo: iamcco/markdown-preview.nvim\n  on_ft: [ markdown, pandoc.markdown, rmd ]\n  build: cd app & npm install\n  hook_source: |\n    let g:mkdp_auto_close = 0\n\n# Python related, NOTE python-mode use submodule\n# cd ~/.cache/vim/dein/repos/github.com; mkdir python-mode\n# git clone --recurse-submodules https://github.com/python-mode/python-mode\n- { repo: python-mode/python-mode, on_ft: python}\n\n- repo: easymotion/vim-easymotion\n  on_map: { n: <Plug> }\n  hook_source: |\n    let g:EasyMotion_do_mapping = 0\n    let g:EasyMotion_prompt = 'Jump to → '\n    let g:EasyMotion_keys = 'fjdksweoavn'\n    let g:EasyMotion_smartcase = 1\n    let g:EasyMotion_use_smartsign_us = 1\n\n# enable ycm if you write cpp\n# - repo: Valloric/YouCompleteMe\n#   build: ./install.py --clang-completer\n\n- repo: dense-analysis/ale\n  on_event: FileType\n  hook_add: |\n    let g:ale_disable_lsp = 0\n    let g:ale_echo_delay = 100\n    let g:ale_lint_delay = 1000\n    let g:ale_echo_msg_format = '%linter%: %code: %%s [%severity%]'\n    let g:ale_history_enabled = 0\n    let g:ale_sign_error = '✖'\n    let g:ale_sign_warning = 'ⁱ'\n    let g:ale_maximum_file_size = 500000\n    let g:ale_linters = {'go': ['golangci-lint']}\n\n# Golang related\n# go get -u github.com/cweill/gotests/...\n- repo: buoto/gotests-vim\n  on_ft: [ go ]\n\n- repo: fatih/vim-go\n  if: has('nvim-0.4.0') || has('patch-8.0.1453')\n  on_ft: [ go, gomod, gotexttmpl, gohtmltmpl ]\n  hook_add: |-\n    let g:go_gopls_enabled = 0\n    let g:go_code_completion_enabled = 0\n    let g:go_doc_keywordprg_enabled = 0\n    let g:go_def_mapping_enabled = 0\n    let g:go_jump_to_error = 0\n    let g:go_fmt_autosave = 1\n    let g:go_fmt_fail_silently = 1\n    let g:go_imports_autosave = 1\n    let g:go_mod_fmt_autosave = 0\n    let g:go_snippet_engine = 'ultisnips'\n    let g:go_textobj_enabled = 1\n    let g:go_list_height = 10\n    let g:go_list_autoclose = 0\n    let g:go_fold_enable = []\n    let g:go_highlight_array_whitespace_error = 0\n    let g:go_highlight_chan_whitespace_error = 0\n    let g:go_highlight_space_tab_error = 0\n    let g:go_highlight_trailing_whitespace_error = 0\n    let g:go_highlight_extra_types = 1\n    let g:go_highlight_build_constraints = 1\n    let g:go_highlight_fields = 1\n    let g:go_highlight_format_strings = 1\n    let g:go_highlight_functions = 1\n    let g:go_highlight_function_calls = 1\n    let g:go_highlight_function_parameters = 1\n    let g:go_highlight_types = 1\n    let g:go_highlight_generate_tags = 1\n    let g:go_highlight_operators = 1\n    let g:go_highlight_string_spellcheck = 0\n    let g:go_highlight_variable_declarations = 0\n    let g:go_highlight_variable_assignments = 0\n    let g:go_fmt_command = \"goimports\"\n    let g:go_def_reuse_buffer = 1\n    let g:go_auto_type_info = 0\n    if has('nvim') || exists(':terminal')\n      let g:go_term_enabled = 1\n      let g:go_term_close_on_exit = 0\n    endif\n"
  },
  {
    "path": "config/local.vim",
    "content": "\" Update file. :update is equlivalent to :write, but it only saves the file if the buffer has been modified\nimap <Leader>w <esc>:update<CR>\n\n\" switch buffer\nnnoremap <silent> [b :bprevious<CR>\nnnoremap <silent> [n :bnext<CR>\n\n\" shortcuts to vimdiff, http://stackoverflow.com/questions/7309707/why-does-git-mergetool-opens-4-windows-in-vimdiff-id-expect-3\nif &diff\n    map <leader>1 :diffget LOCAL<CR>\n    map <leader>2 :diffget BASE<CR>\n    map <leader>3 :diffget REMOTE<CR>\nendif\n\n\" change tab\nnnoremap <C-Left> :tabprevious<CR>\nnnoremap <C-Right> :tabnext<CR>\n\" https://stackoverflow.com/questions/15583346/how-can-i-temporarily-make-the-window-im-working-on-to-be-fullscreen-in-vim\nnnoremap tt :tab split<CR>\n\n\" Sudo to write\ncnoremap w!! w !sudo tee % >/dev/null\n\n\" add :FormatJSON command, https://coderwall.com/p/faceag/format-json-in-vim\ncom! FormatJSON %!python3 -c \"import json, sys, collections; print(json.dumps(json.load(sys.stdin, object_pairs_hook=collections.OrderedDict), ensure_ascii=False, indent=2))\"\ncom! FormatJSONPy3 %!python3 -m json.tool\ncom! FormatJSONPy2 %!python -m json.tool\ncom! FormatJSONPy2Utf8 %!python -c \"import json, sys, collections; print json.dumps(json.load(sys.stdin, object_pairs_hook=collections.OrderedDict), ensure_ascii=False, indent=2)\"\n\nmap <F4> :%retab! <CR> :w <CR>\n\n\" use jj as esc\ninoremap jj <Esc>`^\n\" move to next line (insert mode)\ninoremap <C-j> <C-o>o\n\" move to end (insert mode)\ninoremap <C-l> <C-o>A\nnoremap <leader>e :q<cr>\nnoremap <leader>E :qa!<cr>\n\" buffer delete\nnoremap <leader>q :bd<cr>\n\" jump last last edit position\nnoremap g<leader> 2g;a\n\" omni Completion\ninoremap <C-Space> <C-x><C-o>\n\n\" disable autochdir\nset noautochdir\nset signcolumn=no\n\" fix E363: pattern uses more memory than 'maxmempattern'  see: https://github.com/vim/vim/issues/2049\nset mmp=5000\n\n\" Disable built-in statusline & tabline\nlet g:tabline_plugin_enable = 0\nlet g:statusline_plugin_enable = 0\n\nautocmd InsertLeave * :silent !/usr/local/bin/im-select com.apple.keylayout.ABC\n"
  },
  {
    "path": "config/mappings.vim",
    "content": "\" Key-mappings\n\" ===\n\n\" Elite-mode {{{\n\" ----------\nif get(g:, 'elite_mode')\n\n\t\" Disable arrow movement, resize splits instead.\n\tnnoremap <silent><Up>    :resize +1<CR>\n\tnnoremap <silent><Down>  :resize -1<CR>\n\tnnoremap <silent><Left>  :vertical resize +1<CR>\n\tnnoremap <silent><Right> :vertical resize -1<CR>\n\nendif\n\n\" }}}\n\" Navigation {{{\n\" ----------\n\n\" Fix keybind name for Ctrl+Space\nmap <Nul> <C-Space>\nmap! <Nul> <C-Space>\n\n\" Double leader key for toggling visual-line mode\nnmap <Leader><Leader> V\nvmap <Leader><Leader> <Esc>\n\n\" Toggle fold\nnnoremap <CR> za\n\n\" Focus the current fold by closing all others\nnnoremap <S-Return> zMzvzt\n\n\" The plugin rhysd/accelerated-jk moves through display-lines in normal mode,\n\" these mappings will move through display-lines in visual mode too.\nvnoremap j gj\nvnoremap k gk\n\n\" Easier line-wise movement\nnnoremap gh g^\nnnoremap gl g$\n\n\" Location/quickfix list movement\nnmap ]l :lnext<CR>\nnmap [l :lprev<CR>\nnmap ]q :cnext<CR>\nnmap [q :cprev<CR>\n\n\" Whitespace jump (see plugin/whitespace.vim)\nnnoremap ]w :<C-u>WhitespaceNext<CR>\nnnoremap [w :<C-u>WhitespacePrev<CR>\n\n\" Navigation in command line\ncnoremap <C-h> <Home>\ncnoremap <C-l> <End>\ncnoremap <C-f> <Right>\ncnoremap <C-b> <Left>\n\n\" }}}\n\" Scroll {{{\n\" ------\n\n\" Scroll step sideways\nnnoremap zl z4l\nnnoremap zh z4h\n\n\" Resize tab windows after top/bottom window movement\nnnoremap <C-w>K <C-w>K<C-w>=\nnnoremap <C-w>J <C-w>J<C-w>=\n\n\" Improve scroll, credits: https://github.com/Shougo\n\" noremap <expr> <C-f> max([winheight(0) - 2, 1])\n\"\t\\ .\"\\<C-d>\".(line('w$') >= line('$') ? \"L\" : \"M\")\n\" noremap <expr> <C-b> max([winheight(0) - 2, 1])\n\"\t\\ .\"\\<C-u>\".(line('w0') <= 1 ? \"H\" : \"M\")\n\" nnoremap <expr> zz (winline() == (winheight(0)+1) / 2) ?\n\"\t\\ 'zt' : (winline() == 1) ? 'zb' : 'zz'\n\" noremap <expr> <C-e> (line(\"w$\") >= line('$') ? \"j\" : \"3\\<C-e>\")\n\" noremap <expr> <C-y> (line(\"w0\") <= 1         ? \"k\" : \"3\\<C-y>\")\n\n\" }}}\n\" Clipboard {{{\n\" ---------\n\n\" Yank from cursor position to end-of-line\nnnoremap Y y$\n\n\" Yank buffer's relative/absolute path to clipboard\nnnoremap <Leader>y :let @+=expand(\"%:~:.\")<CR>:echo 'Yanked relative path'<CR>\nnnoremap <Leader>Y :let @+=expand(\"%:p\")<CR>:echo 'Yanked absolute path'<CR>\n\n\" Cut & paste without pushing to register\n\" xnoremap p  \"0p\n\" nnoremap x \"_x\n\n\" }}}\n\" Edit {{{\n\" ----\n\n\" Macros\nif get(g:, 'enable_universal_quit_mapping', 1)\n\tnnoremap Q q\n\tnnoremap gQ @q\nendif\n\n\" Start new line from any cursor position in insert-mode\ninoremap <S-Return> <C-o>o\n\n\" Deletes selection and start insert mode\n\" vnoremap <BS> \"_xi\n\n\" Re-select blocks after indenting in visual/select mode\nxnoremap < <gv\nxnoremap > >gv|\n\n\" Use tab for indenting in visual/select mode\nxnoremap <Tab> >gv|\nxnoremap <S-Tab> <gv\n\n\" Indent and jump to first non-blank character linewise\nnmap >>  >>_\nnmap <<  <<_\n\n\" Drag current line/s vertically and auto-indent\nnnoremap <Leader>k :m-2<CR>==\nnnoremap <Leader>j :m+<CR>==\nvnoremap <Leader>k :m'<-2<CR>gv=gv\nvnoremap <Leader>j :m'>+<CR>gv=gv\n\n\" Duplicate lines\nnnoremap <Leader>d m`YP``\nvnoremap <Leader>d YPgv\n\n\" Change current word in a repeatable manner\nnnoremap <Leader>cn *``cgn\nnnoremap <Leader>cN *``cgN\n\n\" Change selected word in a repeatable manner\nvnoremap <expr> <Leader>cn \"y/\\\\V\\<C-r>=escape(@\\\", '/')\\<CR>\\<CR>\" . \"``cgn\"\nvnoremap <expr> <Leader>cN \"y/\\\\V\\<C-r>=escape(@\\\", '/')\\<CR>\\<CR>\" . \"``cgN\"\n\n\" Duplicate paragraph\nnnoremap <Leader>cp yap<S-}>p\n\n\" Remove spaces at the end of lines\nnnoremap <Leader>cw :<C-u>silent! keeppatterns %substitute/\\s\\+$//e<CR>\n\n\" }}}\n\" Search & Replace {{{\n\" ----------------\n\n\" Use backspace key for matching parens\nnmap <BS> %\nxmap <BS> %\n\n\" Repeat latest f, t, F or T\nnnoremap \\ ;\n\n\" Select last paste\nnnoremap <expr> gp '`['.strpart(getregtype(), 0, 1).'`]'\n\n\" Quick substitute within selected area\nxnoremap sg :s//gc<Left><Left><Left>\n\n\" C-r: Easier search and replace visual/select mode\nxnoremap <C-r> :<C-u>call <SID>get_selection('/')<CR>:%s/\\V<C-R>=@/<CR>//gc<Left><Left><Left>\n\n\" Returns visually selected text\nfunction! s:get_selection(cmdtype) \"{{{\n\tlet temp = @s\n\tnormal! gv\"sy\n\tlet @/ = substitute(escape(@s, '\\'.a:cmdtype), '\\n', '\\\\n', 'g')\n\tlet @s = temp\nendfunction \"}}}\n\n\" }}}\n\" Command & History {{{\n\" -----------------\n\n\" Start an external command with a single bang\nnnoremap ! :!\n\n\" Put vim command output into buffer\nnnoremap g! :<C-u>put=execute('')<Left><Left>\n\n\" Allow misspellings\ncnoreabbrev qw wq\ncnoreabbrev Wq wq\ncnoreabbrev WQ wq\ncnoreabbrev Qa qa\ncnoreabbrev Bd bd\ncnoreabbrev bD bd\n\n\" Switch history search pairs, matching my bash shell\ncnoremap <expr> <C-p>  pumvisible() ? \"\\<C-p>\" : \"\\<Up>\"\ncnoremap <expr> <C-n>  pumvisible() ? \"\\<C-n>\" : \"\\<Down>\"\ncnoremap <Up>   <C-p>\ncnoremap <Down> <C-n>\n\n\" }}}\n\" File operations {{{\n\" ---------------\n\n\" Switch (window) to the directory of the current opened buffer\nmap <Leader>cd :lcd %:p:h<CR>:pwd<CR>\n\n\" Open file under the cursor in a vsplit\nnnoremap gf :vertical wincmd f<CR>\n\n\" Fast saving from all modes\n\" nnoremap <Leader>w :write<CR>\nnnoremap <Leader>w :update<CR>\nxnoremap <Leader>w <Esc>:write<CR>\nnnoremap <C-s> :<C-u>write<CR>\nxnoremap <C-s> :<C-u>write<CR>\ncnoremap <C-s> <C-u>write<CR>\n\n\" }}}\n\" Editor UI {{{\n\" ---------\n\n\" Toggle editor's visual effects\nnmap <Leader>ts :setlocal spell!<cr>\nnmap <Leader>tn :setlocal nonumber!<CR>\nnmap <Leader>tl :setlocal nolist!<CR>\nnmap <Leader>th :nohlsearch<CR>\n\n\" Smart wrap toggle (breakindent and colorcolumn toggle as-well)\nnmap <Leader>tw :execute('setlocal wrap! breakindent! colorcolumn=' .\n\t\\ (&colorcolumn == '' ? &textwidth : ''))<CR>\n\n\" Tabs\nnnoremap <silent> g1 :<C-u>tabfirst<CR>\nnnoremap <silent> g5 :<C-u>tabprevious<CR>\nnnoremap <silent> g9 :<C-u>tablast<CR>\nnnoremap <silent> <C-Tab> :<C-U>tabnext<CR>\nnnoremap <silent> <C-S-Tab> :<C-U>tabprevious<CR>\nnnoremap <silent> <A-j> :<C-U>tabnext<CR>\nnnoremap <silent> <A-k> :<C-U>tabprevious<CR>\nnnoremap <silent> <A-{> :<C-u>-tabmove<CR>\nnnoremap <silent> <A-}> :<C-u>+tabmove<CR>\n\" nnoremap <silent> <A-[> :<C-u>tabprevious<CR>\n\" nnoremap <silent> <A-]> :<C-u>tabnext<CR>\n\n\" Show vim syntax highlight groups for character under cursor\nnmap <silent> <Leader>h\n\t\\ :echo 'hi<'.synIDattr(synID(line('.'), col('.'), 1), 'name')\n\t\\ . '> trans<'.synIDattr(synID(line('.'), col('.'), 0), 'name') . '> lo<'\n\t\\ . synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name') . '>'<CR>\n\n\" }}}\n\" Custom Tools {{{\n\" ------------\n\n\" Terminal\nif exists(':tnoremap')\n\tif has('nvim')\n\t\ttnoremap   jj         <C-\\><C-n>\n\telse\n\t\ttnoremap   <ESC><ESC>  <C-w>N\n\t\ttnoremap   jj          <C-w>N\n\tendif\nendif\n\n\" Source line and selection in vim\nvnoremap <Leader>S y:execute @@<CR>:echo 'Sourced selection.'<CR>\nnnoremap <Leader>S ^vg_y:execute @@<CR>:echo 'Sourced line.'<CR>\n\n\" Context-aware action-menu, neovim only (see plugin/actionmenu.vim)\nif has('nvim')\n\tnmap <silent> <LocalLeader>c :<C-u>ActionMenu<CR>\nendif\n\n\" Session management shortcuts (see plugin/sessions.vim)\nnmap <Leader>se :<C-u>SessionSave<CR>\nnmap <Leader>sl :<C-u>SessionLoad<CR>\n\n\" Jump entire buffers in jumplist\nnnoremap g<C-i> :<C-u>call JumpBuffer(-1)<CR>\nnnoremap g<C-o> :<C-u>call JumpBuffer(1)<CR>\n\nif has('mac')\n\t\" Open the macOS dictionary on current word\n\tnmap <Leader>? :!open dict://<cword><CR>\n\n\t\" Use Marked for real-time Markdown preview\n\t\"\n\tif executable('/Applications/Marked 2.app/Contents/MacOS/Marked 2')\n\t\tautocmd user_events FileType markdown\n\t\t\t\\ nmap <buffer><Leader>P :silent !open -a Marked\\ 2.app '%:p'<CR>\n\tendif\nendif\n\nnnoremap <silent> <Leader>ml :call <SID>append_modeline()<CR>\n\n\" Append modeline after last line in buffer\n\" See: http://vim.wikia.com/wiki/Modeline_magic\nfunction! s:append_modeline() \"{{{\n\tlet l:modeline = printf(' vim: set ts=%d sw=%d tw=%d %set :',\n\t\t\t\t\\ &tabstop, &shiftwidth, &textwidth, &expandtab ? '' : 'no')\n\tlet l:modeline = substitute(&commentstring, '%s', l:modeline, '')\n\tcall append(line('$'), l:modeline)\nendfunction \"}}}\n\n\" }}}\n\" Windows, buffers and tabs {{{\n\" -------------------------\n\n\" Ultimatus Quitos\nif get(g:, 'enable_universal_quit_mapping', 1)\n\tautocmd user_events BufWinEnter,BufNew,BufNewFile *\n\t\t\\ if &buftype == '' && ! mapcheck('q', 'n')\n\t\t\\ |   nnoremap <silent><buffer> q :<C-u>quit<CR>\n\t\t\\ | endif\nendif\n\nnnoremap <C-q> <C-w>\nnnoremap <C-x> <C-w>x\n\n\" Window-control prefix\nnnoremap  [Window]   <Nop>\nnmap      s [Window]\n\nnnoremap <silent> [Window]v  :<C-u>split<CR>\nnnoremap <silent> [Window]g  :<C-u>vsplit<CR>\nnnoremap <silent> [Window]t  :tabnew<CR>\nnnoremap <silent> [Window]o  :<C-u>only<CR>\nnnoremap <silent> [Window]b  :b#<CR>\nnnoremap <silent> [Window]c  :close<CR>\nnnoremap <silent> [Window]x  :<C-u>call <SID>window_empty_buffer()<CR>\nnnoremap <silent> [Window]z  :<C-u>call <SID>zoom()<CR>\n\n\" Split current buffer, go to previous window and previous buffer\nnnoremap <silent> [Window]sv :split<CR>:wincmd p<CR>:e#<CR>\nnnoremap <silent> [Window]sg :vsplit<CR>:wincmd p<CR>:e#<CR>\n\n\" Background dark/light toggle and contrasts\nnmap <silent> [Window]h :<C-u>call <SID>toggle_background()<CR>\nnmap <silent> [Window]- :<c-u>call <SID>toggle_contrast(-v:count1)<cr>\nnmap <silent> [Window]= :<c-u>call <SID>toggle_contrast(+v:count1)<cr>\n\nfunction! s:toggle_background()\n\tif ! exists('g:colors_name')\n\t\techomsg 'No colorscheme set'\n\t\treturn\n\tendif\n\tlet l:scheme = g:colors_name\n\n\tif l:scheme =~# 'dark' || l:scheme =~# 'light'\n\t\t\" Rotate between different theme backgrounds\n\t\texecute 'colorscheme' (l:scheme =~# 'dark'\n\t\t\t\t\t\\ ? substitute(l:scheme, 'dark', 'light', '')\n\t\t\t\t\t\\ : substitute(l:scheme, 'light', 'dark', ''))\n\telse\n\t\texecute 'set background='.(&background ==# 'dark' ? 'light' : 'dark')\n\t\tif ! exists('g:colors_name')\n\t\t\texecute 'colorscheme' l:scheme\n\t\t\techomsg 'The colorscheme `'.l:scheme\n\t\t\t\t\\ .'` doesn''t have background variants!'\n\t\telse\n\t\t\techo 'Set colorscheme to '.&background.' mode'\n\t\tendif\n\tendif\nendfunction\n\nfunction! s:toggle_contrast(delta)\n\tlet l:scheme = ''\n\tif g:colors_name =~# 'solarized8'\n\t\tlet l:schemes = map(['_low', '_flat', '', '_high'],\n\t\t\t\\ '\"solarized8_\".(&background).v:val')\n\t\tlet l:contrast = ((a:delta + index(l:schemes, g:colors_name)) % 4 + 4) % 4\n\t\tlet l:scheme = l:schemes[l:contrast]\n\tendif\n\tif l:scheme !=# ''\n\t\texecute 'colorscheme' l:scheme\n\tendif\nendfunction\n\nfunction! s:window_empty_buffer()\n\tlet l:current = bufnr('%')\n\tif ! getbufvar(l:current, '&modified')\n\t\tenew\n\t\tsilent! execute 'bdelete '.l:current\n\tendif\nendfunction\n\n\" Simple zoom toggle\nfunction! s:zoom()\n\tif exists('t:zoomed')\n\t\tunlet t:zoomed\n\t\twincmd =\n\telse\n\t\tlet t:zoomed = { 'nr': bufnr('%') }\n\t\tvertical resize\n\t\tresize\n\t\tnormal! ze\n\tendif\nendfunction\n\" }}}\n\n\" vim: set foldmethod=marker ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/plugins/all.vim",
    "content": "\" Plugin Keyboard-Mappings\n\" ---\n\nif dein#tap('denite.nvim')\n\tnnoremap <silent><LocalLeader>r :<C-u>Denite -resume -refresh -no-start-filter<CR>\n\tnnoremap <silent><LocalLeader>f :<C-u>Denite file/rec<CR>\n\tnnoremap <silent><LocalLeader>g :<C-u>Denite grep -start-filter<CR>\n\tnnoremap <silent><LocalLeader>b :<C-u>Denite buffer -default-action=switch<CR>\n\tnnoremap <silent><LocalLeader>i :<C-u>Denite file/old<CR>\n\tnnoremap <silent><LocalLeader>d :<C-u>Denite directory_rec directory_mru -default-action=cd<CR>\n\tnnoremap <silent><LocalLeader>v :<C-u>Denite neoyank -buffer-name=register<CR>\n\txnoremap <silent><LocalLeader>v :<C-u>Denite neoyank -buffer-name=register -default-action=replace<CR>\n\tnnoremap <silent><LocalLeader>l :<C-u>Denite location_list -buffer-name=list -no-start-filter<CR>\n\tnnoremap <silent><LocalLeader>q :<C-u>Denite quickfix -buffer-name=list -no-start-filter<CR>\n\tnnoremap <silent><LocalLeader>m :<C-u>Denite mark<CR>\n\tnnoremap <silent><LocalLeader>n :<C-u>Denite dein<CR>\n\tnnoremap <silent><LocalLeader>j :<C-u>Denite jump change file/point -no-start-filter<CR>\n\tnnoremap <silent><LocalLeader>u :<C-u>Denite junkfile:new junkfile -buffer-name=list<CR>\n\tnnoremap <silent><LocalLeader>o :<C-u>Denite outline -no-start-filter<CR>\n\tnnoremap <silent><LocalLeader>s :<C-u>Denite session -buffer-name=list<CR>\n\tnnoremap <silent><LocalLeader>t :<C-u>Denite tag<CR>\n\tnnoremap <silent><LocalLeader>p :<C-u>Denite jump<CR>\n\tnnoremap <silent><LocalLeader>h :<C-u>Denite help<CR>\n\tnnoremap <silent><LocalLeader>w :<C-u>Denite file/rec -buffer-name=memo -path=~/docs/blog<CR>\n\tnnoremap <silent><LocalLeader>x :<C-u>Denite file_mru<CR>\n\tnnoremap <silent><LocalLeader>z :<C-u>Denite z -buffer-name=list<CR>\n\tnnoremap <silent><LocalLeader>; :<C-u>Denite command_history command<CR>\n\tnnoremap <silent><expr><LocalLeader>/ wordcount().chars > 10000 ?\n\t\t\\ \":\\<C-u>Denite -search line/external\\<CR>\"\n\t\t\\ : \":\\<C-u>Denite -search line\\<CR>\"\n\tnnoremap <silent><expr><LocalLeader>* wordcount().chars > 10000 ?\n\t\t\\ \":\\<C-u>DeniteCursorWord -no-start-filter -search line/external\\<CR>\"\n\t\t\\ : \":\\<C-u>DeniteCursorWord -no-start-filter -search line\\<CR>\"\n\n\t\" Open Denite with word under cursor or selection\n\tnnoremap <silent> <Leader>gt :DeniteCursorWord tag:include -no-start-filter -immediately<CR>\n\tnnoremap <silent> <Leader>gf :DeniteCursorWord file/rec -no-start-filter<CR>\n\tnnoremap <silent> <Leader>gg :DeniteCursorWord grep -no-start-filter<CR>\n\tvnoremap <silent> <Leader>gg\n\t\t\\ :<C-u>call <SID>get_selection('/')<CR>\n\t\t\\ :execute 'Denite -no-start-filter grep:::'.escape(@/, ' :')<CR><CR>\n\n\tfunction! s:get_selection(cmdtype)\n\t\tlet temp = @s\n\t\tnormal! gv\"sy\n\t\tlet @/ = substitute(escape(@s, '\\' . a:cmdtype), '\\n', '\\\\n', 'g')\n\t\tlet @s = temp\n\tendfunction\nendif\n\nif dein#tap('vim-clap')\n\t\" nnoremap <silent><LocalLeader>f :<C-u>Clap! files<CR>\n\t\" nnoremap <silent><LocalLeader>b :<C-u>Clap! buffers<CR>\n\t\" nnoremap <silent><LocalLeader>g :<C-u>Clap! grep<CR>\n\t\" nnoremap <silent><LocalLeader>j :<C-u>Clap! jumps<CR>\n\t\" nnoremap <silent><LocalLeader>h :<C-u>Clap! help_tags<CR>\n\t\" nnoremap <silent><LocalLeader>t :<C-u>Clap! tags<CR>\n\t\" nnoremap <silent><LocalLeader>l :<C-u>Clap! loclist<CR>\n\t\" nnoremap <silent><LocalLeader>q :<C-u>Clap! quickfix<CR>\n\t\" nnoremap <silent><LocalLeader>m :<C-u>Clap! files ~/docs/books<CR>\n\t\" nnoremap <silent><LocalLeader>y :<C-u>Clap! yanks<CR>\n\t\" nnoremap <silent><LocalLeader>/ :<C-u>Clap! lines<CR>\n\t\" nnoremap <silent><LocalLeader>* :<C-u>Clap! lines ++query=<cword><CR>\n\t\" nnoremap <silent><LocalLeader>; :<C-u>Clap! command_history<CR>\n\n\t\" nnoremap <silent><Leader>gl :<C-u>Clap! commits<CR>\n\t\" nnoremap <silent><Leader>gt :<C-u>Clap! tags ++query=<cword><CR>\n\t\" xnoremap <silent><Leader>gt :<C-u>Clap! tags ++query=@visual<CR><CR>\n\t\" nnoremap <silent><Leader>gf :<C-u>Clap! files ++query=<cword><CR>\n\t\" xnoremap <silent><Leader>gf :<C-u>Clap! files ++query=@visual<CR><CR>\n\t\" nnoremap <silent><Leader>gg :<C-u>Clap! grep ++query=<cword><CR>\n\t\" xnoremap <silent><Leader>gg :<C-u>Clap! grep ++query=@visual<CR><CR>\n\n\tautocmd user_events FileType clap_input call s:clap_mappings()\n\n\tfunction! s:clap_mappings()\n\t\tnnoremap <silent> <buffer> <nowait> <Space> :call clap#handler#tab_action()<CR>\n\t\tnnoremap <silent> <buffer> <nowait>' :call clap#handler#tab_action()<CR>\n\t\tinoremap <silent> <buffer> <Tab>   <C-R>=clap#navigation#linewise('down')<CR>\n\t\tinoremap <silent> <buffer> <S-Tab> <C-R>=clap#navigation#linewise('up')<CR>\n\t\tnnoremap <silent> <buffer> <C-j> :<C-u>call clap#navigation#linewise('down')<CR>\n\t\tnnoremap <silent> <buffer> <C-k> :<C-u>call clap#navigation#linewise('up')<CR>\n\t\tnnoremap <silent> <buffer> <C-n> :<C-u>call clap#navigation#linewise('down')<CR>\n\t\tnnoremap <silent> <buffer> <C-p> :<C-u>call clap#navigation#linewise('up')<CR>\n\t\tnnoremap <silent> <buffer> <C-f> :<c-u>call clap#navigation#scroll('down')<CR>\n\t\tnnoremap <silent> <buffer> <C-b> :<c-u>call clap#navigation#scroll('up')<CR>\n\n\t\tnnoremap <silent> <buffer> sg  :<c-u>call clap#handler#try_open('ctrl-v')<CR>\n\t\tnnoremap <silent> <buffer> sv  :<c-u>call clap#handler#try_open('ctrl-x')<CR>\n\t\tnnoremap <silent> <buffer> st  :<c-u>call clap#handler#try_open('ctrl-t')<CR>\n\n\t\tnnoremap <silent> <buffer> q     :<c-u>call clap#handler#exit()<CR>\n\t\tnnoremap <silent> <buffer> <Esc> :call clap#handler#exit()<CR>\n\t\tinoremap <silent> <buffer> <Esc> <C-R>=clap#navigation#linewise('down')<CR><C-R>=clap#navigation#linewise('up')<CR><Esc>\n\t\tinoremap <silent> <buffer> jj    <C-R>=clap#navigation#linewise('down')<CR><C-R>=clap#navigation#linewise('up')<CR><Esc>\n\tendfunction\nendif\n\nif dein#tap('vim-lsp')\n\t\" Close preview window with Escape\n\tautocmd User lsp_float_opened\n\t\t\\ nmap <buffer> <silent> <Esc> <Plug>(lsp-preview-close)\n\tautocmd User lsp_float_closed silent! nunmap <buffer> <Esc>\n\tautocmd user_events FileType markdown.lsp-hover\n\t\t\\ nmap <silent><buffer>q :pclose<CR>| doautocmd <nomodeline> BufWinEnter\nendif\n\nif dein#tap('defx.nvim')\n\tnnoremap <silent> <LocalLeader>e\n\t\t\\ :<C-u>Defx -toggle -buffer-name=explorer`tabpagenr()`<CR>\n\tnnoremap <silent> <LocalLeader>a\n\t\t\\ :<C-u>Defx\n\t\t\\   -search=`escape(expand('%:p'), ' :')`\n\t\t\\   -buffer-name=explorer`tabpagenr()`<CR>\nendif\n\nif dein#tap('delimitMate')\n\timap <buffer><expr> <C-Tab> delimitMate#JumpAny()\nendif\n\nif dein#tap('vista.vim')\n\tnnoremap <silent> <Leader>b :<C-u>Vista!!<CR>\n\tnnoremap <silent> <Leader>a :<C-u>Vista show<CR>\nendif\n\nif dein#tap('emmet-vim')\n\tautocmd user_events FileType html,css,javascript,javascriptreact,svelte\n\t\t\\ EmmetInstall\n\t\t\\ | imap <buffer> <C-Return> <Plug>(emmet-expand-abbr)\nendif\n\nif dein#tap('vim-gitgutter')\n\tnmap ]g <Plug>(GitGutterNextHunk)\n\tnmap [g <Plug>(GitGutterPrevHunk)\n\tnmap gS <Plug>(GitGutterStageHunk)\n\txmap gS <Plug>(GitGutterStageHunk)\n\tnmap <Leader>gr <Plug>(GitGutterUndoHunk)\n\tnmap gs <Plug>(GitGutterPreviewHunk)\nendif\n\nif dein#tap('iron.nvim')\n\tnmap <silent> <Leader>rr :<C-u>IronRepl<CR><Esc>\n\tnmap <silent> <Leader>rq <Plug>(iron-exit)\n\tnmap <silent> <Leader>rl <Plug>(iron-send-line)\n\tvmap <silent> <Leader>rl <Plug>(iron-visual-send)\n\tnmap <silent> <Leader>rp <Plug>(iron-repeat-cmd)\n\tnmap <silent> <Leader>rc <Plug>(iron-clear)\n\tnmap <silent> <Leader>r<CR>  <Plug>(iron-cr)\n\tnmap <silent> <Leader>r<Esc> <Plug>(iron-interrupt)\nendif\n\nif dein#tap('vim-sandwich')\n\tnmap <silent> sa <Plug>(operator-sandwich-add)\n\txmap <silent> sa <Plug>(operator-sandwich-add)\n\tomap <silent> sa <Plug>(operator-sandwich-g@)\n\tnmap <silent> sd <Plug>(operator-sandwich-delete)<Plug>(operator-sandwich-release-count)<Plug>(textobj-sandwich-query-a)\n\txmap <silent> sd <Plug>(operator-sandwich-delete)\n\tnmap <silent> sr <Plug>(operator-sandwich-replace)<Plug>(operator-sandwich-release-count)<Plug>(textobj-sandwich-query-a)\n\txmap <silent> sr <Plug>(operator-sandwich-replace)\n\tnmap <silent> sdb <Plug>(operator-sandwich-delete)<Plug>(operator-sandwich-release-count)<Plug>(textobj-sandwich-auto-a)\n\tnmap <silent> srb <Plug>(operator-sandwich-replace)<Plug>(operator-sandwich-release-count)<Plug>(textobj-sandwich-auto-a)\n\tomap ir <Plug>(textobj-sandwich-auto-i)\n\txmap ir <Plug>(textobj-sandwich-auto-i)\n\tomap ab <Plug>(textobj-sandwich-auto-a)\n\txmap ab <Plug>(textobj-sandwich-auto-a)\n\tomap is <Plug>(textobj-sandwich-query-i)\n\txmap is <Plug>(textobj-sandwich-query-i)\n\tomap as <Plug>(textobj-sandwich-query-a)\n\txmap as <Plug>(textobj-sandwich-query-a)\nendif\n\nif dein#tap('vim-operator-replace')\n\txmap p <Plug>(operator-replace)\nendif\n\nif dein#tap('vim-niceblock')\n\tsilent! xmap I  <Plug>(niceblock-I)\n\tsilent! xmap gI <Plug>(niceblock-gI)\n\tsilent! xmap A  <Plug>(niceblock-A)\nendif\n\nif dein#tap('accelerated-jk')\n\tnmap <silent> j <Plug>(accelerated_jk_gj)\n\tnmap <silent> k <Plug>(accelerated_jk_gk)\nendif\n\nif dein#tap('vim-edgemotion')\n\tmap gj <Plug>(edgemotion-j)\n\tmap gk <Plug>(edgemotion-k)\n\txmap gj <Plug>(edgemotion-j)\n\txmap gk <Plug>(edgemotion-k)\nendif\n\nif dein#tap('vim-quickhl')\n\tnmap mt <Plug>(quickhl-manual-this)\n\tnmap mT <Plug>(quickhl-manual-this-whole-word)\n\txmap mt <Plug>(quickhl-manual-this)\n\tnmap mC <Plug>(quickhl-manual-reset)\nendif\n\nif dein#tap('vim-sidemenu')\n\tnmap <Leader>l <Plug>(sidemenu)\n\txmap <Leader>l <Plug>(sidemenu-visual)\nendif\n\nif dein#tap('vim-indent-guides')\n\tnmap <silent><Leader>ti :<C-u>IndentGuidesToggle<CR>\nendif\n\nif dein#tap('vim-signature')\n\tlet g:SignatureIncludeMarks = 'abcdefghijkloqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\tlet g:SignatureMap = {\n\t\t\\ 'Leader':            'm',\n\t\t\\ 'ListBufferMarks':   'm/',\n\t\t\\ 'ListBufferMarkers': 'm?',\n\t\t\\ 'PlaceNextMark':     'm,',\n\t\t\\ 'ToggleMarkAtLine':  'mm',\n\t\t\\ 'PurgeMarksAtLine':  'm-',\n\t\t\\ 'DeleteMark':        'dm',\n\t\t\\ 'PurgeMarks':        'm<Space>',\n\t\t\\ 'PurgeMarkers':      'm<BS>',\n\t\t\\ 'GotoNextLineAlpha': \"']\",\n\t\t\\ 'GotoPrevLineAlpha': \"'[\",\n\t\t\\ 'GotoNextSpotAlpha': '`]',\n\t\t\\ 'GotoPrevSpotAlpha': '`[',\n\t\t\\ 'GotoNextLineByPos': \"]'\",\n\t\t\\ 'GotoPrevLineByPos': \"['\",\n\t\t\\ 'GotoNextSpotByPos': 'mn',\n\t\t\\ 'GotoPrevSpotByPos': 'mp',\n\t\t\\ 'GotoNextMarker':    ']-',\n\t\t\\ 'GotoPrevMarker':    '[-',\n\t\t\\ 'GotoNextMarkerAny': ']=',\n\t\t\\ 'GotoPrevMarkerAny': '[=',\n\t\t\\ }\nendif\n\nif dein#tap('auto-git-diff')\n\tautocmd user_events FileType gitrebase\n\t\t\\  nmap <buffer><CR>  <Plug>(auto_git_diff_scroll_manual_update)\n\t\t\\| nmap <buffer><C-n> <Plug>(auto_git_diff_scroll_down_page)\n\t\t\\| nmap <buffer><C-p> <Plug>(auto_git_diff_scroll_up_page)\n\t\t\\| nmap <buffer><C-d> <Plug>(auto_git_diff_scroll_down_half)\n\t\t\\| nmap <buffer><C-u> <Plug>(auto_git_diff_scroll_up_half)\nendif\n\nif dein#tap('committia.vim')\n\tlet g:committia_hooks = {}\n\tfunction! g:committia_hooks.edit_open(info)\n\t\tsetlocal winminheight=1 winheight=10\n\t\tresize 10\n\t\timap <buffer><C-d> <Plug>(committia-scroll-diff-down-half)\n\t\timap <buffer><C-u> <Plug>(committia-scroll-diff-up-half)\n\t\timap <buffer><C-f> <Plug>(committia-scroll-diff-down-page)\n\t\timap <buffer><C-b> <Plug>(committia-scroll-diff-up-page)\n\t\timap <buffer><C-j> <Plug>(committia-scroll-diff-down)\n\t\timap <buffer><C-k> <Plug>(committia-scroll-diff-up)\n\tendfunction\nendif\n\nif dein#tap('python_match.vim')\n\tautocmd user_events FileType python\n\t\t\\ nmap <buffer> {{ [%\n\t\t\\ | nmap <buffer> }} ]%\nendif\n\nif dein#tap('goyo.vim')\n\tnnoremap <Leader>G :Goyo<CR>\nendif\n\nif dein#tap('vim-shot-f')\n\tnmap f  <Plug>(shot-f-f)\n\tnmap F  <Plug>(shot-f-F)\n\tnmap t  <Plug>(shot-f-t)\n\tnmap T  <Plug>(shot-f-T)\n\txmap f  <Plug>(shot-f-f)\n\txmap F  <Plug>(shot-f-F)\n\txmap t  <Plug>(shot-f-t)\n\txmap T  <Plug>(shot-f-T)\n\tomap f  <Plug>(shot-f-f)\n\tomap F  <Plug>(shot-f-F)\n\tomap t  <Plug>(shot-f-t)\n\tomap T  <Plug>(shot-f-T)\nendif\n\nif dein#tap('vimwiki')\n\tnnoremap <silent> <Leader>W :<C-u>VimwikiIndex<CR>\nendif\n\nif dein#tap('vim-choosewin')\n\tnmap -         <Plug>(choosewin)\n\tnmap <Leader>- :<C-u>ChooseWinSwapStay<CR>\nendif\n\nif dein#tap('vimagit')\n\tnnoremap <silent> <Leader>mg :Magit<CR>\nendif\n\nif dein#tap('gina.vim')\n\tnnoremap <silent> <leader>ga :Gina add %:p<CR>\n\tnnoremap <silent> <leader>gd :Gina compare<CR>\n\tnnoremap <silent> <leader>gc :Gina commit<CR>\n\tnnoremap <silent> <leader>gb :Gina blame --width=40<CR>\n\tnnoremap <silent> <leader>gs :Gina status -s<CR>\n\tnnoremap <silent> <leader>gl :Gina log --graph --all<CR>\n\tnnoremap <silent> <leader>gF :Gina! fetch<CR>\n\tnnoremap <silent> <leader>gp :Gina! push<CR>\n\tnnoremap <silent> <leader>go :,Gina browse :<CR>\n\tvnoremap <silent> <leader>go :Gina browse :<CR>\nendif\n\nif dein#tap('vim-altr')\n\tnmap <leader>n  <Plug>(altr-forward)\n\tnmap <leader>N  <Plug>(altr-back)\nendif\n\nif dein#tap('any-jump.vim')\n\t\" Normal mode: Jump to definition under cursor\n\tnnoremap <silent> <leader>ii :AnyJump<CR>\n\n\t\" Visual mode: jump to selected text in visual mode\n\txnoremap <silent> <leader>ii :AnyJumpVisual<CR>\n\n\t\" Normal mode: open previous opened file (after jump)\n\tnnoremap <silent> <leader>ib :AnyJumpBack<CR>\n\n\t\" Normal mode: open last closed search window again\n\tnnoremap <silent> <leader>il :AnyJumpLastResults<CR>\nendif\n\nif dein#tap('undotree')\n\tnnoremap <Leader>gu :UndotreeToggle<CR>\nendif\n\nif dein#tap('thesaurus_query.vim')\n\tnnoremap <silent> <Leader>K :<C-u>ThesaurusQueryReplaceCurrentWord<CR>\nendif\n\nif dein#tap('vim-asterisk')\n\tmap *   <Plug>(asterisk-g*)\n\tmap g*  <Plug>(asterisk-*)\n\tmap #   <Plug>(asterisk-g#)\n\tmap g#  <Plug>(asterisk-#)\n\n\tmap z*  <Plug>(asterisk-z*)\n\tmap gz* <Plug>(asterisk-gz*)\n\tmap z#  <Plug>(asterisk-z#)\n\tmap gz# <Plug>(asterisk-gz#)\nendif\n\nif dein#tap('vim-expand-region')\n\txmap v <Plug>(expand_region_expand)\n\txmap V <Plug>(expand_region_shrink)\nendif\n\nif dein#tap('sideways.vim')\n\tnnoremap <silent> <, :SidewaysLeft<CR>\n\tnnoremap <silent> >, :SidewaysRight<CR>\n\tnnoremap <silent> [, :SidewaysJumpLeft<CR>\n\tnnoremap <silent> ], :SidewaysJumpRight<CR>\n\tomap <silent> a, <Plug>SidewaysArgumentTextobjA\n\txmap <silent> a, <Plug>SidewaysArgumentTextobjA\n\tomap <silent> i, <Plug>SidewaysArgumentTextobjI\n\txmap <silent> i, <Plug>SidewaysArgumentTextobjI\nendif\n\nif dein#tap('splitjoin.vim')\n\tlet g:splitjoin_join_mapping = ''\n\tlet g:splitjoin_split_mapping = ''\n\tnmap sj :SplitjoinJoin<CR>\n\tnmap sk :SplitjoinSplit<CR>\nendif\n\nif dein#tap('linediff.vim')\n\tvnoremap <Leader>mdf :Linediff<CR>\n\tvnoremap <Leader>mda :LinediffAdd<CR>\n\tnnoremap <Leader>mds :<C-u>LinediffShow<CR>\n\tnnoremap <Leader>mdr :<C-u>LinediffReset<CR>\nendif\n\nif dein#tap('dsf.vim')\n\tnmap dsf <Plug>DsfDelete\n\tnmap csf <Plug>DsfChange\nendif\n\nif dein#tap('caw.vim')\n\tfunction! InitCaw() abort\n\t\tif &l:modifiable && &buftype ==# '' && &filetype != 'gitrebase'\n\t\t\txmap <buffer> <Leader>V <Plug>(caw:wrap:toggle)\n\t\t\tnmap <buffer> <Leader>V <Plug>(caw:wrap:toggle)\n\t\t\txmap <buffer> <Leader>v <Plug>(caw:hatpos:toggle)\n\t\t\tnmap <buffer> <Leader>v <Plug>(caw:hatpos:toggle)\n\t\t\tnmap <buffer> gc <Plug>(caw:prefix)\n\t\t\txmap <buffer> gc <Plug>(caw:prefix)\n\t\t\tnmap <buffer> gcc <Plug>(caw:hatpos:toggle)\n\t\t\txmap <buffer> gcc <Plug>(caw:hatpos:toggle)\n\t\telse\n\t\t\tsilent! nunmap <buffer> <Leader>V\n\t\t\tsilent! xunmap <buffer> <Leader>V\n\t\t\tsilent! nunmap <buffer> <Leader>v\n\t\t\tsilent! xunmap <buffer> <Leader>v\n\t\t\tsilent! nunmap <buffer> gc\n\t\t\tsilent! xunmap <buffer> gc\n\t\t\tsilent! nunmap <buffer> gcc\n\t\t\tsilent! xunmap <buffer> gcc\n\t\tendif\n\tendfunction\n\tautocmd user_events FileType * call InitCaw()\n\tcall InitCaw()\nendif\n\nif dein#tap('fin.vim')\n\tnnoremap <Leader>f :<C-u>Fin<CR>\n\n\tfunction! InitFin() abort\n\t\tcmap <buffer><nowait> <Tab>   <Plug>(fin-line-next)\n\t\tcmap <buffer><nowait> <S-Tab> <Plug>(fin-line-prev)\n\t\tcmap <buffer><nowait> <C-j>   <Plug>(fin-line-next)\n\t\tcmap <buffer><nowait> <C-k>   <Plug>(fin-line-prev)\n\tendfunction\n\tautocmd user_events FileType fin call InitFin()\nendif\n\nif dein#tap('vim-textobj-function')\n\tomap <silent> af <Plug>(textobj-function-a)\n\tomap <silent> if <Plug>(textobj-function-i)\n\txmap <silent> af <Plug>(textobj-function-a)\n\txmap <silent> if <Plug>(textobj-function-i)\nendif\n\nif dein#tap('vim-easymotion')\n\tnmap ss <Plug>(easymotion-s2)\nendif\n\nif dein#tap('vim-airline')\n\tlet g:airline_powerline_fonts=1\n\tlet g:airline_theme = 'materialbox'\n\tlet g:airline#extensions#tabline#enabled = 1\nendif\n\nif dein#tap('incsearch-fuzzy.vim')\n\tmap z/ <Plug>(incsearch-fuzzy-/)\n\tmap z? <Plug>(incsearch-fuzzy-?)\n\tmap zg/ <Plug>(incsearch-fuzzy-stay)\nendif\n\nif dein#tap('python-mode')\n\t\" 注意如果使用了 rope 一般是项目根目录打开文件，不要切到子目录\n\t\" set noautochdir 注意这个自动切换目录会使rope找目录不正确，禁用，坑死我\n\t\" 如果你发现找不到你的 package 或者系统的，编辑你的代码根目录下 .ropeproject/config.py 里的文件就可以了\n\t\" 比如加上 prefs.add('python_path', '/usr/local/lib/python2.7/site-packages/') 就可以找到系统包了\n\n\t\" when PYTHON_VERSION env variable is set, use python2. default Use python3\n\t\" ch: 如果设置了 export PYTHON_VERSION=2 环境变量使用 python2 ，否则默认 python3\n\tif $PYTHON_VERSION == '2'\n\t\tlet g:pymode_python = 'python'  \" Values are `python`, `python3`, `disable`.\n\telse\n\t\tlet g:pymode_python = 'python3'  \" Values are `python`, `python3`, `disable`.\n\tendif\n\tlet g:pymode_paths = reverse(split(globpath(getcwd().'/eggs', '*'), '\\n'))    \" support zc.buildout\n\tlet g:pymode_trim_whitespaces = 1\n\tlet g:pymode_quickfix_maxheight = 3\n\tlet g:pymode_indent = 1\n\tlet g:pymode_folding = 1\n\tlet g:pymode_breakpoint = 1\n\tlet g:pymode_breakpoint_bind = \"<C-d>\"  \" NOTE: use ctrl+d insert ipdb\n\tlet g:pymode_breakpoint_cmd = 'import ipdb; ipdb.set_trace()  # BREAKPOINT TODO REMOVE; from nose.tools import set_trace; set_trace()'\n\n\tlet g:pymode_run = 1\n\tlet g:pymode_run_bind = \"<C-e>\"\n\tlet g:pymode_virtualenv = 1\n\tlet g:pymode_virtualenv_path = $VIRTUAL_ENV\n\n\t\" use coc.nvim, disalbe rope\n\tlet g:pymode_rope = 0\n\tlet g:pymode_rope_autoimport = 0\n\tlet g:pymode_rope_complete_on_dot = 0\n\tlet g:pymode_rope_lookup_project = 0\n\tlet g:pymode_rope_goto_definition_bind = \"<C-]>\"\n\tlet g:pymode_rope_goto_definition_cmd = 'vnew'\n\tlet g:pymode_rope_regenerate_on_write = 0\n\n\tlet g:pymode_lint = 1\n\tlet g:pymode_lint_on_write = 1\n\tlet g:pymode_lint_on_fly = 0\n\tlet g:pymode_lint_message = 1\n\tlet g:pymode_lint_checkers = ['pyflakes', 'pep8', 'mccabe', 'pylint']\n\tlet g:pymode_lint_ignore = [\"C0103, C0111, C0301, C0304, C0325, E0702, E1120, R0201, R0903, R0911, R0912, R0913, R1705, W0105, W0108, W0110, W0201, W0221, W0223, W0235, W0403, W0511, W0622, W0703, W1202\"]\n\tlet g:pymode_lint_options_mccabe = { 'complexity': 15 }\n\tlet g:pymode_lint_signs = 1\n\t\" if you want use emoji you shoud set : Iterm2->Profiles->Text->Use Unicode versoin 9 widths\n\tlet g:pymode_lint_todo_symbol = '😡'\n\tlet g:pymode_lint_error_symbol = \"\\U2717\"\n\tlet g:pymode_lint_comment_symbol = \"\\u2757\"\n\tlet g:pymode_lint_visual_symbol = \"\\u0021\"\n\n\t\" 修改默认的红线为浅色，solorized黑色主题\n\thighlight ColorColumn ctermbg=233\n\tlet g:pymode_lint_cwindow = 0\n\tlet g:pymode_options_max_line_length = 120\n\tlet g:pymode_options_colorcolumn = 1\n\t\" 指定UltiSnips python的docstring风格, sphinx, google, numpy\n\tlet g:ultisnips_python_style = 'sphinx'\n\t\" use coc doc\n\tlet g:pymode_doc = 0\nendif\n\nif dein#tap('vim-go')\n\tautocmd user_events FileType go\n\t\t\\   nmap <C-]> <Plug>(go-def)\n\t\t\\ | nmap <Leader>god  <Plug>(go-describe)\n\t\t\\ | nmap <Leader>goc  <Plug>(go-callees)\n\t\t\\ | nmap <Leader>goC  <Plug>(go-callers)\n\t\t\\ | nmap <Leader>goi  <Plug>(go-info)\n\t\t\\ | nmap <Leader>gom  <Plug>(go-implements)\n\t\t\\ | nmap <Leader>gos  <Plug>(go-callstack)\n\t\t\\ | nmap <Leader>goe  <Plug>(go-referrers)\n\t\t\\ | nmap <Leader>gor  <Plug>(go-run)\n\t\t\\ | nmap <Leader>gov  <Plug>(go-vet)\n\t\t\\ | nmap <Leader>got  <Plug>(go-test)\n\t\t\\ | nmap <Leader>ga  <Plug>(go-alternate-edit)\n\t\t\\ | nmap <Leader>gf  <Plug>(go-test-func)\n\t\t\\ | nmap fd  <Plug>(go-def-vertical)\n\t  \\ | nnoremap <Leader>r :GoRun % <CR>\nendif\n\nif dein#tap('fzf.vim')\n\tnnoremap <silent> <Leader>ag :Ag <C-R><C-W><CR>\n\tnnoremap <silent> <Leader>s :Ag <CR>\n\tnnoremap <silent> <Leader>f :Buffers <CR>\n\tnnoremap <silent> <c-p> :Files <CR>\nendif\n\nif dein#tap('vim-json')\n\tlet g:vim_json_syntax_conceal = 0\nendif\n\nif dein#tap('vim-translator')\n\t\" Display translation in a window\n\tnmap <silent> <Leader>t <Plug>TranslateW\n\tvmap <silent> <Leader>t <Plug>TranslateWV\nendif\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/plugins/asyncomplete.vim",
    "content": "\" :h asyncomplete\n\" ---\n\" Problems? https://github.com/prabirshrestha/asyncomplete.vim/issues\n\n\" Debugging:\n\" let g:asyncomplete_log_file = expand('~/asyncomplete.log', 1)\n\" let g:lsp_log_file = expand('~/vim-lsp.log', 1)\n\n\" Smart completion-menu selection behavior:\n\" 1) Insert new-line if nothing selected\n\" 2) Otherwise, insert and expand selected snippet (via UltiSnips)\n\" 3) Otherwise, insert selected completion item\n\" 4) If completion-menu is closed, try to expand empty pairs (via DelimitMate)\nfunction s:smart_carriage_return()\n\tif pumvisible()\n\t\tlet l:info = complete_info()\n\n\t\t\" Detect non-selection and insert new-line\n\t\tif get(l:info, 'selected', -1) == -1\n\t\t\treturn \"\\<C-y>\\<CR>\"\n\t\tendif\n\t\t\" Detect snippet and expand (via UltiSnips)\n\t\tif exists('g:UltiSnipsEditSplit')\n\t\t\tlet l:menu = get(get(l:info['items'], l:info['selected'], {}), 'menu')\n\t\t\tif len(l:menu) > 0 && stridx(l:menu, 'Snips: ') == 0\n\t\t\t\treturn \"\\<C-y>\\<C-R>=UltiSnips#ExpandSnippet()\\<CR>\"\n\t\t\tendif\n\t\tendif\n\t\t\" Otherwise, when pum is visible, insert selected completion\n\t\treturn \"\\<C-y>\"\n\tendif\n\n\t\" Expand empty pairs (via delimitMate)\n\tif get(b:, 'delimitMate_enabled') && delimitMate#WithinEmptyPair()\n\t\treturn \"\\<C-R>=delimitMate#ExpandReturn()\\<CR>\"\n\tendif\n\n\t\" Propagate a carriage-return\n\treturn \"\\<CR>\"\nendfunction\n\n\" Smart selection\ninoremap <silent> <CR> <C-R>=<SID>smart_carriage_return()<CR>\n\n\" Force completion pop-up display\nimap <C-Space> <Plug>(asyncomplete_force_refresh)\n\n\" Navigation\ninoremap <expr><silent> <Tab>   pumvisible() ? \"\\<Down>\" : (<SID>is_whitespace() ? \"\\<Tab>\" : asyncomplete#force_refresh())\ninoremap <expr><silent> <S-Tab> pumvisible() ? \"\\<Up>\"   : (<SID>is_whitespace() ? \"\\<C-h>\" : asyncomplete#force_refresh())\n\ninoremap <expr> <C-j>   pumvisible() ? \"\\<Down>\" : \"\\<C-j>\"\ninoremap <expr> <C-k>   pumvisible() ? \"\\<Up>\"   : \"\\<C-k>\"\ninoremap <expr> <C-d>   pumvisible() ? \"\\<PageDown>\" : \"\\<C-d>\"\ninoremap <expr> <C-u>   pumvisible() ? \"\\<PageUp>\"   : \"\\<C-u>\"\n\n\" Menu control\ninoremap <expr> <C-y> pumvisible() ? asyncomplete#close_popup() : \"\\<C-y>\"\ninoremap <expr> <C-e> pumvisible() ? asyncomplete#cancel_popup() : \"\\<C-e>\"\n\nfunction! s:is_whitespace()\n\tlet col = col('.') - 1\n\treturn ! col || getline('.')[col - 1] =~# '\\s'\nendfunction\n\n\" Pre-processors\n\" ---\n\n\" DISABLED: Auto-complete popup doesn't show after dot e.g. \"class.\"\n\" function! s:sort_by_priority_preprocessor(options, matches) abort\n\" \tlet l:items = []\n\" \tfor [l:source_name, l:matches] in items(a:matches)\n\" \t\tfor l:item in l:matches['items']\n\" \t\t\tif stridx(l:item['word'], a:options['base']) == 0\n\" \t\t\t\tlet l:item['priority'] =\n\"\t\t\t\t\t\\ get(asyncomplete#get_source_info(l:source_name), 'priority', 1)\n\" \t\t\t\tcall add(l:items, l:item)\n\" \t\t\tendif\n\" \t\tendfor\n\" \tendfor\n\" \tlet l:items = sort(l:items, {a, b -> b['priority'] - a['priority']})\n\" \tcall asyncomplete#preprocess_complete(a:options, l:items)\n\" endfunction\n\"\n\" let g:asyncomplete_preprocessor = [function('s:sort_by_priority_preprocessor')]\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/plugins/coc.vim",
    "content": "\" May need for vim (not neovim) since coc.nvim calculate byte offset by count\n\" utf-8 byte sequence.\nset encoding=utf-8\n\" Some servers have issues with backup files, see #649.\nset nobackup\nset nowritebackup\n\n\" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable\n\" delays and poor user experience.\nset updatetime=300\n\n\" Always show the signcolumn, otherwise it would shift the text each time\n\" diagnostics appear/become resolved.\nset signcolumn=yes\n\n\" Use tab for trigger completion with characters ahead and navigate.\n\" NOTE: There's always complete item selected by default, you may want to enable\n\" no select by `\"suggest.noselect\": true` in your configuration file.\n\" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by\n\" other plugin before putting this into your config.\ninoremap <silent><expr> <TAB>\n      \\ coc#pum#visible() ? coc#pum#next(1) :\n      \\ CheckBackspace() ? \"\\<Tab>\" :\n      \\ coc#refresh()\ninoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : \"\\<C-h>\"\n\n\" Make <CR> to accept selected completion item or notify coc.nvim to format\n\" <C-g>u breaks current undo, please make your own choice.\ninoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()\n                              \\: \"\\<C-g>u\\<CR>\\<c-r>=coc#on_enter()\\<CR>\"\n\nfunction! CheckBackspace() abort\n  let col = col('.') - 1\n  return !col || getline('.')[col - 1]  =~# '\\s'\nendfunction\n\n\" Use <c-space> to trigger completion.\nif has('nvim')\n  inoremap <silent><expr> <c-space> coc#refresh()\nelse\n  inoremap <silent><expr> <c-@> coc#refresh()\nendif\n\n\" Use `[g` and `]g` to navigate diagnostics\n\" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.\nnmap <silent> [e <Plug>(coc-diagnostic-prev)\nnmap <silent> ]e <Plug>(coc-diagnostic-next)\n\n\" GoTo code navigation.\nnmap <silent> gd <Plug>(coc-definition)\nnmap <silent> gy <Plug>(coc-type-definition)\nnmap <silent> gi <Plug>(coc-implementation)\nnmap <silent> gr <Plug>(coc-references)\n\n\" Use K to show documentation in preview window.\nnnoremap <silent> K :call ShowDocumentation()<CR>\n\nfunction! ShowDocumentation()\n  if CocAction('hasProvider', 'hover')\n    call CocActionAsync('doHover')\n  else\n    call feedkeys('K', 'in')\n  endif\nendfunction\n\n\" Highlight the symbol and its references when holding the cursor.\nautocmd CursorHold * silent call CocActionAsync('highlight')\nautocmd ColorScheme * highlight CocHighlightText ctermfg=109 ctermbg=60 guifg=#8abeb7 guibg=#5f5f87\n\n\" Symbol renaming.\nnmap <leader>rn <Plug>(coc-rename)\nnmap <Leader>rf <Plug>(coc-refactor)\n\n\" Formatting selected code.\nnmap <Leader>p  <Plug>(coc-format)\nxmap <leader>f  <Plug>(coc-format-selected)\nnmap <leader>f  <Plug>(coc-format-selected)\n\nnmap <leader>ti :call CocAction('showIncomingCalls') <cr>\n\naugroup mygroup\n  autocmd!\n  \" Setup formatexpr specified filetype(s).\n  autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')\n  \" Update signature help on jump placeholder.\n  autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')\naugroup end\n\n\" Applying codeAction to the selected region.\n\" Example: `<leader>aap` for current paragraph\nxmap <leader>a  <Plug>(coc-codeaction-selected)\nnmap <leader>a  <Plug>(coc-codeaction-selected)\n\n\" Remap keys for applying codeAction to the current buffer.\nnmap <leader>ac  <Plug>(coc-codeaction)\n\" Apply AutoFix to problem on the current line.\nnmap <leader>qf  <Plug>(coc-fix-current)\n\n\" Run the Code Lens action on the current line.\nnmap <leader>cl  <Plug>(coc-codelens-action)\n\n\" Map function and class text objects\n\" NOTE: Requires 'textDocument.documentSymbol' support from the language server.\nxmap if <Plug>(coc-funcobj-i)\nomap if <Plug>(coc-funcobj-i)\nxmap af <Plug>(coc-funcobj-a)\nomap af <Plug>(coc-funcobj-a)\nxmap ic <Plug>(coc-classobj-i)\nomap ic <Plug>(coc-classobj-i)\nxmap ac <Plug>(coc-classobj-a)\nomap ac <Plug>(coc-classobj-a)\n\n\" Remap <C-f> and <C-b> for scroll float windows/popups.\nif has('nvim-0.4.0') || has('patch-8.2.0750')\n  nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : \"\\<C-f>\"\n  nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : \"\\<C-b>\"\n  inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? \"\\<c-r>=coc#float#scroll(1)\\<cr>\" : \"\\<Right>\"\n  inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? \"\\<c-r>=coc#float#scroll(0)\\<cr>\" : \"\\<Left>\"\n  vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : \"\\<C-f>\"\n  vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : \"\\<C-b>\"\nendif\n\n\" Use CTRL-S for selections ranges.\n\" Requires 'textDocument/selectionRange' support of language server.\nnmap <silent> <C-s> <Plug>(coc-range-select)\nxmap <silent> <C-s> <Plug>(coc-range-select)\n\n\" Add `:Format` command to format current buffer.\ncommand! -nargs=0 Format :call CocActionAsync('format')\n\n\" Add `:Fold` command to fold current buffer.\ncommand! -nargs=? Fold :call     CocAction('fold', <f-args>)\n\n\" Add `:OR` command for organize imports of the current buffer.\ncommand! -nargs=0 OR   :call     CocActionAsync('runCommand', 'editor.action.organizeImport')\n\n\" Add (Neo)Vim's native statusline support.\n\" NOTE: Please see `:h coc-status` for integrations with external plugins that\n\" provide custom statusline: lightline.vim, vim-airline.\nset statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}\n\n\" Mappings for CoCList\n\" Show all diagnostics.\nnnoremap <silent><nowait> <space>a  :<C-u>CocList diagnostics<cr>\n\" Manage extensions.\nnnoremap <silent><nowait> <space>e  :<C-u>CocList extensions<cr>\n\" Show commands.\nnnoremap <silent><nowait> <space>c  :<C-u>CocList commands<cr>\n\" Find symbol of current document.\nnnoremap <silent><nowait> <space>o  :<C-u>CocList outline<cr>\n\" Search workspace symbols.\nnnoremap <silent><nowait> <space>s  :<C-u>CocList -I symbols<cr>\n\" Do default action for next item.\nnnoremap <silent><nowait> <space>j  :<C-u>CocNext<CR>\n\" Do default action for previous item.\nnnoremap <silent><nowait> <space>k  :<C-u>CocPrev<CR>\n\" Resume latest coc list.\nnnoremap <silent><nowait> <space>p  :<C-u>CocListResume<CR>\n"
  },
  {
    "path": "config/plugins/colorizer.lua",
    "content": "-- nvim-colorizer\n-- ===\n-- See https://github.com/norcalli/nvim-colorizer.lua\n\nrequire 'colorizer'.setup {\n  css = { rgb_fn = true; };\n  scss = { rgb_fn = true; };\n  sass = { rgb_fn = true; };\n  stylus = { rgb_fn = true; };\n  svelte = { rgb_fn = true; };\n  vim = { names = false; };\n  tmux = { names = false; };\n  'javascript';\n  'javascriptreact';\n  'typescript';\n  'typescriptreact';\n  html = {\n    mode = 'foreground';\n  }\n}\n"
  },
  {
    "path": "config/plugins/dashboard.lua",
    "content": "require 'dashboard'.setup {\n  theme = 'hyper',\n  config = {\n    week_header = {\n      enable = true,\n    },\n    shortcut = {\n      { desc = '󰊳 Update', group = '@property', action = 'Lazy update', key = 'u' },\n      {\n        icon = ' ',\n        icon_hl = '@variable',\n        desc = 'Files',\n        group = 'Label',\n        action = 'Telescope find_files',\n        key = 'f',\n      },\n      {\n        desc = ' Apps',\n        group = 'DiagnosticHint',\n        action = 'Telescope app',\n        key = 'a',\n      },\n      {\n        desc = ' dotfiles',\n        group = 'Number',\n        action = 'Telescope dotfiles',\n        key = 'd',\n      },\n    },\n  }\n}\n"
  },
  {
    "path": "config/plugins/defx.vim",
    "content": "\" :h defx\n\" ---\n\" Problems? https://github.com/Shougo/defx.nvim/issues\n\ncall defx#custom#option('_', {\n\t\\ 'resume': 1,\n\t\\ 'winwidth': 25,\n\t\\ 'split': 'vertical',\n\t\\ 'direction': 'topleft',\n\t\\ 'show_ignored_files': 0,\n\t\\ 'columns': 'indent:git:icons:filename',\n\t\\ 'root_marker': '',\n\t\\ 'ignored_files':\n\t\\     '.mypy_cache,.pytest_cache,.git,.hg,.svn,.stversions'\n\t\\   . ',__pycache__,.sass-cache,*.egg-info,.DS_Store,*.pyc'\n\t\\ })\n\ncall defx#custom#column('git', {\n\t\\   'indicators': {\n\t\\     'Modified'  : '•',\n\t\\     'Staged'    : '✚',\n\t\\     'Untracked' : 'ᵁ',\n\t\\     'Renamed'   : '≫',\n\t\\     'Unmerged'  : '≠',\n\t\\     'Ignored'   : 'ⁱ',\n\t\\     'Deleted'   : '✖',\n\t\\     'Unknown'   : '⁇'\n\t\\   }\n\t\\ })\n\ncall defx#custom#column('mark', { 'readonly_icon': '', 'selected_icon': '' })\ncall defx#custom#column('filename', { 'root_marker_highlight': 'Comment' })\n\n\" defx-icons plugin\nlet g:defx_icons_column_length = 2\nlet g:defx_icons_mark_icon = ''\n\n\" Used in s:toggle_width()\nlet s:original_width = get(get(defx#custom#_get().option, '_'), 'winwidth')\n\n\" Events\n\" ---\n\naugroup user_plugin_defx\n\tautocmd!\n\n\t\" Define defx window mappings\n\tautocmd FileType defx call <SID>defx_mappings()\n\n\t\" Delete defx if it's the only buffer left in the window\n\tautocmd WinEnter * if &filetype == 'defx' && winnr('$') == 1 | bdel | endif\n\n\t\" Move focus to the next window if current buffer is defx\n\tautocmd TabLeave * if &filetype == 'defx' | wincmd w | endif\n\n\t\" autocmd WinEnter * if &filetype ==# 'defx'\n\t\"\t\\ |   silent! highlight! link CursorLine TabLineSel\n\t\"\t\\ | endif\n\t\"\n\t\" autocmd WinLeave * if &filetype ==# 'defx'\n\t\"\t\\ |   silent! highlight! link CursorLine NONE\n\t\"\t\\ | endif\n\naugroup END\n\n\" Internal functions\n\" ---\n\nfunction! s:jump_dirty(dir) abort\n\t\" Jump to the next position with defx-git dirty symbols\n\tlet l:icons = get(g:, 'defx_git_indicators', {})\n\tlet l:icons_pattern = join(values(l:icons), '\\|')\n\n\tif ! empty(l:icons_pattern)\n\t\tlet l:direction = a:dir > 0 ? 'w' : 'bw'\n\t\treturn search(printf('\\(%s\\)', l:icons_pattern), l:direction)\n\tendif\nendfunction\n\nfunction! s:defx_toggle_tree() abort\n\t\" Open current file, or toggle directory expand/collapse\n\tif defx#is_directory()\n\t\treturn defx#do_action('open_tree', ['nested', 'toggle'])\n\tendif\n\t\" return defx#do_action('multi', ['drop', 'quit'])\n\treturn defx#do_action('multi', ['drop'])\nendfunction\n\nfunction! s:defx_mappings() abort\n\t\" Defx window keyboard mappings\n\tsetlocal signcolumn=no expandtab\n\tsetlocal cursorline nonu\n\n\tnnoremap <silent><buffer><expr> <CR>  <SID>defx_toggle_tree()\n\tnnoremap <silent><buffer><expr> e     <SID>defx_toggle_tree()\n\tnnoremap <silent><buffer><expr> l     <SID>defx_toggle_tree()\n\tnnoremap <silent><buffer><expr> h     defx#do_action('close_tree')\n\tnnoremap <silent><buffer><expr> t     defx#do_action('open_tree', 'recursive')\n\tnnoremap <silent><buffer><expr> st    defx#do_action('multi', [['drop', 'tabnew'], 'quit'])\n\tnnoremap <silent><buffer><expr> sg    defx#do_action('multi', [['drop', 'vsplit'], 'quit'])\n\tnnoremap <silent><buffer><expr> sv    defx#do_action('multi', [['drop', 'split'], 'quit'])\n\tnnoremap <silent><buffer><expr> P     defx#do_action('preview')\n\tnnoremap <silent><buffer><expr> y     defx#do_action('yank_path')\n\tnnoremap <silent><buffer><expr> x     defx#do_action('execute_system')\n\tnnoremap <silent><buffer><expr> gx    defx#do_action('execute_system')\n\tnnoremap <silent><buffer><expr> .     defx#do_action('toggle_ignored_files')\n\n\t\" Defx's buffer management\n\t\" nnoremap <silent><buffer><expr> <Esc>  defx#do_action('quit')\n\tnnoremap <silent><buffer><expr> q      defx#do_action('quit')\n\tnnoremap <silent><buffer><expr> se     defx#do_action('save_session')\n\tnnoremap <silent><buffer><expr> <C-r>  defx#do_action('redraw')\n\tnnoremap <silent><buffer><expr> <C-g>  defx#do_action('print')\n\n\t\" File/dir management\n\tnnoremap <silent><buffer><expr><nowait> c  defx#do_action('copy')\n\tnnoremap <silent><buffer><expr><nowait> m  defx#do_action('move')\n\tnnoremap <silent><buffer><expr><nowait> p  defx#do_action('paste')\n\tnnoremap <silent><buffer><expr><nowait> r  defx#do_action('rename')\n\tnnoremap <silent><buffer><expr> dd defx#do_action('remove_trash')\n\tnnoremap <silent><buffer><expr> K  defx#do_action('new_directory')\n\tnnoremap <silent><buffer><expr> N  defx#do_action('new_multiple_files')\n\n\t\" Jump\n\tnnoremap <silent><buffer>  [g :<C-u>call <SID>jump_dirty(-1)<CR>\n\tnnoremap <silent><buffer>  ]g :<C-u>call <SID>jump_dirty(1)<CR>\n\n\t\" Change directory\n\tnnoremap <silent><buffer><expr><nowait> \\  defx#do_action('cd', getcwd())\n\tnnoremap <silent><buffer><expr><nowait> &  defx#do_action('cd', getcwd())\n\tnnoremap <silent><buffer><expr> <BS>  defx#async_action('cd', ['..'])\n\tnnoremap <silent><buffer><expr> ~     defx#async_action('cd')\n\tnnoremap <silent><buffer><expr> u   defx#do_action('cd', ['..'])\n\tnnoremap <silent><buffer><expr> 2u  defx#do_action('cd', ['../..'])\n\tnnoremap <silent><buffer><expr> 3u  defx#do_action('cd', ['../../..'])\n\tnnoremap <silent><buffer><expr> 4u  defx#do_action('cd', ['../../../..'])\n\n\t\" Selection\n\tnnoremap <silent><buffer><expr> *  defx#do_action('toggle_select_all')\n\tnnoremap <silent><buffer><expr><nowait> <Space>\n\t\t\\ defx#do_action('toggle_select') . 'j'\n\n\tnnoremap <silent><buffer><expr> S  defx#do_action('toggle_sort', 'Time')\n\tnnoremap <silent><buffer><expr> C\n\t\t\\ defx#do_action('toggle_columns', 'indent:mark:filename:type:size:time')\n\n\t\" Tools\n\tnnoremap <silent><buffer><expr> w   defx#do_action('call', '<SID>toggle_width')\n\tnnoremap <silent><buffer><expr> gd  defx#async_action('multi', ['drop', 'quit', ['call', '<SID>git_diff']])\n\tnnoremap <silent><buffer><expr> gr  defx#do_action('call', '<SID>grep')\n\tnnoremap <silent><buffer><expr> gf  defx#do_action('call', '<SID>find_files')\n\tif exists('$TMUX')\n\t\tnnoremap <silent><buffer><expr> gl  defx#async_action('call', '<SID>explorer')\n\tendif\nendfunction\n\n\" TOOLS\n\" ---\n\nfunction! s:git_diff(context) abort\n\tGina compare\nendfunction\n\nfunction! s:find_files(context) abort\n\t\" Find files in parent directory with Denite\n\tlet l:target = a:context['targets'][0]\n\tlet l:parent = fnamemodify(l:target, ':h')\n\tsilent execute 'wincmd w'\n\tsilent execute 'Denite file/rec:'.l:parent\nendfunction\n\nfunction! s:grep(context) abort\n\t\" Grep in parent directory with Denite\n\tlet l:target = a:context['targets'][0]\n\tlet l:parent = fnamemodify(l:target, ':h')\n\tsilent execute 'wincmd w'\n\tsilent execute 'Denite grep:'.l:parent\nendfunction\n\nfunction! s:toggle_width(context) abort\n\t\" Toggle between defx window width and longest line\n\tlet l:max = 0\n\tfor l:line in range(1, line('$'))\n\t\tlet l:len = strdisplaywidth(substitute(getline(l:line), '\\s\\+$', '', ''))\n\t\tlet l:max = max([l:len + 1, l:max])\n\tendfor\n\tlet l:new = l:max == winwidth(0) ? s:original_width : l:max\n\tcall defx#call_action('resize', l:new)\nendfunction\n\nfunction! s:explorer(context) abort\n\t\" Open file-explorer split with tmux\n\tlet l:explorer = s:find_file_explorer()\n\tif empty('$TMUX') || empty(l:explorer)\n\t\treturn\n\tendif\n\tlet l:target = a:context['targets'][0]\n\tlet l:parent = fnamemodify(l:target, ':h')\n\tlet l:cmd = 'split-window -p 30 -c ' . l:parent . ' ' . l:explorer\n\tsilent execute '!tmux ' . l:cmd\nendfunction\n\nfunction! s:find_file_explorer() abort\n\t\" Detect terminal file-explorer\n\tlet s:file_explorer = get(g:, 'terminal_file_explorer', '')\n\tif empty(s:file_explorer)\n\t\tfor l:explorer in ['lf', 'hunter', 'ranger', 'vifm']\n\t\t\tif executable(l:explorer)\n\t\t\t\tlet s:file_explorer = l:explorer\n\t\t\t\tbreak\n\t\t\tendif\n\t\tendfor\n\tendif\n\treturn s:file_explorer\nendfunction\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/plugins/denite.vim",
    "content": "\" :h denite.txt\n\" ---\n\" Problems? https://github.com/Shougo/denite.nvim/issues\n\n\" Don't reload Denite twice (on vimrc reload)\nif exists('*denite#start')\n\tfinish\nendif\n\n\" Denite general settings\ncall denite#custom#option('_', {\n\t\\ 'prompt': '❯',\n\t\\ 'start_filter': v:true,\n\t\\ 'smartcase': v:true,\n\t\\ 'source_names': 'short',\n\t\\ 'highlight_preview_line': 'CursorColumn',\n\t\\ 'max_candidate_width': 512,\n\t\\ 'max_dynamic_update_candidates': 30000,\n\t\\ })\n\n\" Use Neovim's floating window\nif has('nvim-0.4')\n\thighlight! DeniteBackground ctermfg=250 ctermbg=237 guifg=#ACAFAE guibg=#2C3237\n\n\tcall denite#custom#option('_', {\n\t\t\\ 'split': 'floating',\n\t\t\\ 'filter_split_direction': 'floating',\n\t\t\\ 'floating_preview': v:true,\n\t\t\\ 'preview_height': &lines / 3,\n\t\t\\ 'preview_width': &columns / 2 - 4,\n\t\t\\ 'match_highlight': v:false,\n\t\t\\ 'highlight_window_background': 'DeniteBackground',\n\t\t\\ 'highlight_filter_background': 'NormalFloat',\n\t\t\\ 'highlight_matched_char': 'CursorLineNr',\n\t\t\\ 'highlight_matched_range': 'Comment',\n\t\t\\ })\nelse\n\tcall denite#custom#option('_', {\n\t\t\\ 'vertical_preview': v:true,\n\t\t\\ 'preview_width': &columns / 2,\n\t\t\\ })\nendif\n\n\" Interactive grep search\ncall denite#custom#var('grep', 'min_interactive_pattern', 2)\ncall denite#custom#source('grep', 'args', ['', '', '!'])\n\n\" Allow customizable window positions: top, bottom, centertop, center (default)\nfunction! s:denite_resize(position)\n\tif a:position ==# 'top'\n\t\tcall denite#custom#option('_', {\n\t\t\t\\ 'winwidth': &columns - 1,\n\t\t\t\\ 'winheight': &lines / 3,\n\t\t\t\\ 'wincol': 0,\n\t\t\t\\ 'winrow': 1,\n\t\t\t\\ })\n\telseif a:position ==# 'bottom'\n\t\tcall denite#custom#option('_', {\n\t\t\t\\ 'winwidth': &columns - 1,\n\t\t\t\\ 'winheight': &lines / 3,\n\t\t\t\\ 'wincol': 0,\n\t\t\t\\ 'winrow': (&lines - 2) - (&lines / 3),\n\t\t\t\\ })\n\telseif a:position ==# 'centertop'\n\t\tcall denite#custom#option('_', {\n\t\t\t\\ 'winwidth': &columns / 2,\n\t\t\t\\ 'winheight': &lines / 3,\n\t\t\t\\ 'wincol': &columns / 4,\n\t\t\t\\ 'winrow': (&lines / 12),\n\t\t\t\\ })\n\telse\n\t\t\" Use Denite default, which is centered.\n\tendif\nendfunction\n\n\" Set Denite's window position\nlet g:denite_position = get(g:, 'denite_position', 'centertop')\ncall s:denite_resize(g:denite_position)\n\n\" MATCHERS\n\" Default is 'matcher/fuzzy'\ncall denite#custom#source('tag', 'matchers', ['matcher/substring'])\ncall denite#custom#source('file/old', 'matchers', [\n\t\\ 'matcher/project_files', 'matcher/ignore_globs' ])\n\n\" Use vim-clap's rust binary, called maple\nif dein#tap('vim-clap')\n\tlet s:clap_path = dein#get('vim-clap')['path']\n\tif executable(s:clap_path . '/target/release/maple')\n\t\tcall denite#custom#filter('matcher/clap', 'clap_path', s:clap_path)\n\t\tcall denite#custom#source('file/rec,grep,jump,buffer,file_mru,tag',\n\t\t\t\\ 'matchers', [ 'matcher/clap' ])\n\tendif\nendif\n\n\" SORTERS\n\" Default is 'sorter/rank'\ncall denite#custom#source('z', 'sorters', ['sorter/z'])\nif has('nvim')\n\tcall denite#custom#source('file/old', 'sorters', ['sorter/oldfiles'])\nendif\n\n\" CONVERTERS\n\" Default is none\ncall denite#custom#source(\n\t\\ 'buffer,file_mru,file/old',\n\t\\ 'converters', ['converter/relative_word'])\n\n\" FIND and GREP COMMANDS\n\" ---\n\" Ripgrep\nif executable('rg')\n\tcall denite#custom#var('file/rec', 'command',\n\t\t\\ ['rg', '--hidden', '--files', '--glob', '!.git', '--color', 'never'])\n\n\tcall denite#custom#var('grep', {\n\t\t\\ 'command': ['rg'],\n\t\t\\ 'default_opts': ['--hidden', '-i', '--vimgrep', '--no-heading'],\n\t\t\\ 'recursive_opts': [],\n\t\t\\ 'pattern_opt': ['--regexp'],\n\t\t\\ })\n\n\" The Silver Searcher (ag)\nelseif executable('ag')\n\tcall denite#custom#var('file/rec', 'command',\n\t\t\\ ['ag', '--hidden', '--follow', '--nocolor', '--nogroup', '-g', ''])\n\n\t\" Setup ignore patterns in your .agignore file!\n\t\" https://github.com/ggreer/the_silver_searcher/wiki/Advanced-Usage\n\tcall denite#custom#var('grep', {\n\t\t\\ 'command': ['ag'],\n\t\t\\ 'default_opts': ['--vimgrep', '-i', '--hidden'],\n\t\t\\ 'recursive_opts': [],\n\t\t\\ 'pattern_opt': [],\n\t\t\\ })\n\n\" Ack command\nelseif executable('ack')\n\tcall denite#custom#var('grep', {\n\t\t\\ 'command': ['ack'],\n\t\t\\ 'default_opts': [\n\t\t\\   '--ackrc', $HOME.'/.config/ackrc', '-H', '-i',\n\t\t\\   '--nopager', '--nocolor', '--nogroup', '--column',\n\t\t\\ ],\n\t\t\\ 'recursive_opts': [],\n\t\t\\ 'pattern_opt': ['--match'],\n\t\t\\ })\nendif\n\n\" Denite EVENTS\naugroup user_plugin_denite\n\tautocmd!\n\n\tautocmd FileType denite call s:denite_settings()\n\tautocmd FileType denite-filter call s:denite_filter_settings()\n\tautocmd User denite-preview call s:denite_preview()\n\n\tautocmd VimResized * call s:denite_resize(g:denite_position)\naugroup END\n\n\" Denite main window settings\nfunction! s:denite_settings() abort\n\t\" Window options\n\tsetlocal signcolumn=no cursorline\n\n\t\" Use a more vibrant cursorline for Denite\n\thighlight! link CursorLine WildMenu\n\tautocmd user_plugin_denite BufDelete <buffer> highlight! link CursorLine NONE\n\n\t\" Denite selection window key mappings\n\tnmap <silent><buffer> <C-j> j\n\tnmap <silent><buffer> <C-k> k\n\tnmap <silent><buffer> <C-n> j\n\tnmap <silent><buffer> <C-p> k\n\tnnoremap <silent><buffer><expr> <CR> denite#do_map('do_action')\n\tnnoremap <silent><buffer><expr> i    denite#do_map('open_filter_buffer')\n\tnnoremap <silent><buffer><expr> /    denite#do_map('open_filter_buffer')\n\tnnoremap <silent><buffer><expr> dd   denite#do_map('do_action', 'delete')\n\tnnoremap <silent><buffer><expr> p    denite#do_map('do_action', 'preview')\n\tnnoremap <silent><buffer><expr> st   denite#do_map('do_action', 'tabopen')\n\tnnoremap <silent><buffer><expr> sg   denite#do_map('do_action', 'vsplit')\n\tnnoremap <silent><buffer><expr> sv   denite#do_map('do_action', 'split')\n\tnnoremap <silent><buffer><expr> '    denite#do_map('quick_move')\n\tnnoremap <silent><buffer><expr> q    denite#do_map('quit')\n\tnnoremap <silent><buffer><expr> r    denite#do_map('redraw')\n\tnnoremap <silent><buffer><expr> yy   denite#do_map('do_action', 'yank')\n\tnnoremap <silent><buffer><expr> <Esc>   denite#do_map('quit')\n\tnnoremap <silent><buffer><expr> <Tab>   denite#do_map('choose_action')\n\tnnoremap <silent><buffer><expr><nowait> <Space> denite#do_map('toggle_select').'j'\nendfunction\n\n\" Denite-preview window settings\nfunction! s:denite_preview() abort\n\t\" Window options\n\tsetlocal colorcolumn= signcolumn=no nolist nospell\n\tsetlocal nocursorline nocursorcolumn number norelativenumber\n\n\t\" Clear indents\n\tif exists('*indent_guides#clear_matches')\n\t\tcall indent_guides#clear_matches()\n\tendif\nendfunction\n\n\" Denite-filter window settings\nfunction! s:denite_filter_settings() abort\n\t\" Window options\n\tsetlocal signcolumn=yes nocursorline nonumber norelativenumber\n\n\t\" Disable Deoplete auto-completion within Denite filter window\n\tif exists('*deoplete#custom#buffer_option')\n\t\tcall deoplete#custom#buffer_option('auto_complete', v:false)\n\tendif\n\n\t\" Denite Filter window key mappings\n\timap <silent><buffer> jj          <Plug>(denite_filter_update)\n\tnmap <silent><buffer> <Esc>       <Plug>(denite_filter_update)\n\timap <silent><buffer> <Esc>       <Plug>(denite_filter_update)\n\tnmap <silent><buffer> <C-c>       <Plug>(denite_filter_update)\n\timap <silent><buffer> <C-c>       <Plug>(denite_filter_update)\n\timap <silent><buffer> <C-p>       <Up>\n\timap <silent><buffer> <C-n>       <Down>\n\n\timap <silent><buffer> <Tab>   <Plug>(denite_filter_update)ji\n\timap <silent><buffer> <S-Tab> <Plug>(denite_filter_update)ki\nendfunction\n\ncall denite#custom#filter('matcher_ignore_globs', 'ignore_globs',\n\t      \\ [ '.git/', '.ropeproject/', '__pycache__/', 'eggs/', '.tmp', '.cache',\n\t      \\   'venv/', 'images/', '*.min.*', 'img/', 'fonts/'])\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/plugins/gina.vim",
    "content": "\" :h gina\n\" ---\n\" Problems? https://github.com/lambdalisue/gina.vim/issues\n\ncall gina#custom#command#alias('status', 'st')\ncall gina#custom#command#option('st', '-s')\ncall gina#custom#command#option('status', '-b')\n\n\" call gina#custom#command#option('/\\v(status|branch|ls|grep|changes)', '--opener', 'botright 10split')\n\" call gina#custom#command#option('/\\v(blame|diff|log)', '--opener', 'tabnew')\ncall gina#custom#command#option('commit', '--opener', 'below vnew')\ncall gina#custom#command#option('commit', '--verbose')\n\nlet s:width_quarter = string(winwidth(0) / 4)\nlet s:width_half = string(winwidth(0) / 2)\n\ncall gina#custom#command#option('blame', '--width', s:width_quarter)\nlet g:gina#command#blame#formatter#format = '%au: %su%= on %ti %ma%in'\n\n\" Open in vertical split\ncall gina#custom#command#option(\n\t\\ '/\\%(branch\\|changes\\|status\\|grep\\|log\\|reflog\\)',\n\t\\ '--opener', 'vsplit'\n\t\\)\n\n\" Fixed medium width types\ncall gina#custom#execute(\n\t\\ '/\\%(changes\\|status\\|ls\\)',\n\t\\ 'vertical resize ' . s:width_half . ' | setlocal winfixwidth'\n\t\\)\n\n\" Fixed small width special types\ncall gina#custom#execute(\n\t\\ '/\\%(branch\\)',\n\t\\ 'vertical resize ' . s:width_quarter . ' | setlocal winfixwidth'\n\t\\)\n\n\" Alias 'p'/'dp' globally\ncall gina#custom#action#alias('/.*', 'dp', 'diff:preview')\ncall gina#custom#mapping#nmap('/.*', 'dp', ':<C-u>call gina#action#call(''dp'')<CR>', {'noremap': 1, 'silent': 1})\n\" call gina#custom#action#alias('/\\%(blame\\|log\\)', 'preview', 'botright show:commit:preview')\ncall gina#custom#mapping#nmap('/.*', 'p',\n\t\\ ':<C-u>call gina#action#call(''preview'')<CR>',\n\t\\ {'noremap': 1, 'silent': 1, 'nowait': 1})\n\n\" Echo chunk info with K\ncall gina#custom#mapping#nmap('blame', 'K', '<Plug>(gina-blame-echo)')\n\n\" Blame mappings\nlet g:gina#command#blame#use_default_mappings = 0\ncall gina#custom#mapping#nmap('blame', '<Return>', '<Plug>(gina-blame-open)')\ncall gina#custom#mapping#nmap('blame', '<Backspace>', '<Plug>(gina-blame-back)')\ncall gina#custom#mapping#nmap('blame', '<C-r>', '<Plug>(gina-blame-C-L)')\n"
  },
  {
    "path": "config/plugins/goyo.vim",
    "content": "\n\" Goyo\n\" ----\n\n\" s:goyo_enter() \"{{{\n\" Disable visual candy in Goyo mode\nfunction! s:goyo_enter()\n\tif has('gui_running')\n\t\t\" Gui fullscreen\n\t\tset fullscreen\n\t\tset background=light\n\t\tset linespace=7\n\telseif exists('$TMUX')\n\t\t\" Hide tmux status\n\t\tsilent !tmux set status off\n\tendif\n\n\t\" Activate Limelight\n\tlet s:stl = &l:statusline\n\tlet &l:statusline = ''\n\tLimelight\nendfunction\n\n\" }}}\n\" s:goyo_leave() \"{{{\n\" Enable visuals when leaving Goyo mode\nfunction! s:goyo_leave()\n\tif has('gui_running')\n\t\t\" Gui exit fullscreen\n\t\tset nofullscreen\n\t\tset background=dark\n\t\tset linespace=0\n\telseif exists('$TMUX')\n\t\t\" Show tmux status\n\t\tsilent !tmux set status on\n\tendif\n\n\t\" De-activate Limelight\n\tlet &l:statusline = s:stl\n\tunlet s:stl\n\tLimelight!\nendfunction\n\" }}}\n\n\" Goyo Commands {{{\naugroup user_plugin_goyo\n\tautocmd!\n\tautocmd! User GoyoEnter\n\tautocmd! User GoyoLeave\n\tautocmd  User GoyoEnter nested call <SID>goyo_enter()\n\tautocmd  User GoyoLeave nested call <SID>goyo_leave()\naugroup END\n\" }}}\n\n\" vim: set foldmethod=marker ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/plugins/iron.lua",
    "content": "local iron = require('iron')\n\niron.core.set_config {\n  preferred = {\n    python = 'ipython'\n  }\n}\n"
  },
  {
    "path": "config/plugins/lsp.vim",
    "content": "\" vim-lsp\n\" ---\n\n\" Apply settings for languages that registered LSP\nfunction! s:on_lsp_buffer_enabled() abort\n\tif empty(globpath(&rtp, 'autoload/lsp.vim'))\n\t\tfinish\n\tendif\n\tsetlocal omnifunc=lsp#complete\n\n\tif exists('+tagfunc')\n\t\tsetlocal tagfunc=lsp#tagfunc\n\tendif\n\n\t\" Folds are really slow\n\t\" setlocal foldmethod=expr\n\t\"\t\\ foldexpr=lsp#ui#vim#folding#foldexpr()\n\t\"\t\\ foldtext=lsp#ui#vim#folding#foldtext()\n\n\t\" Prefer native help with vim files\n\tif &filetype != 'vim'\n\t\tnmap <silent><buffer> K  <Plug>(lsp-hover)\n\tendif\n\n\tnmap <silent><buffer> gr     <Plug>(lsp-references)\n\tnmap <silent><buffer> gi     <Plug>(lsp-peek-implementation)\n\tnmap <silent><buffer> gy     <Plug>(lsp-peek-type-definition)\n\tnmap <silent><buffer> <C-]>  <Plug>(lsp-definition)\n\tnmap <silent><buffer> g<C-]> <Plug>(lsp-peek-definition)\n\tnmap <silent><buffer> gd     <Plug>(lsp-peek-declaration)\n\tnmap <silent><buffer> gY     <Plug>(lsp-type-hierarchy)\n\tnmap <silent><buffer> gA     <Plug>(lsp-code-action)\n\tnmap <silent><buffer> ,s     <Plug>(lsp-signature-help)\n\tnmap <silent><buffer> [d     <Plug>(lsp-previous-diagnostic)\n\tnmap <silent><buffer> ]d     <Plug>(lsp-next-diagnostic)\n\tnmap <buffer> <Leader>rn     <Plug>(lsp-rename)\n\tnmap <buffer> <Leader>F      <plug>(lsp-document-format)\n\tvmap <buffer> <Leader>F      <plug>(lsp-document-range-format)\nendfunction\n\naugroup lsp_user_plugin\n\tautocmd!\n\n\tautocmd User lsp_buffer_enabled call <SID>on_lsp_buffer_enabled()\n\n\t\" autocmd CompleteDone * if pumvisible() == 0 | pclose | endif\n\n\t\" autocmd VimResized * call <SID>fix_preview_max_width()\n\n\t\" autocmd FileType markdown.lsp-hover\n\t\"\t\\ nnoremap <buffer> K <Nop>\n\t\"\t\\| nnoremap <silent><buffer>q :pclose<CR>\n\naugroup END\n"
  },
  {
    "path": "config/plugins/whichkey.vim",
    "content": "\" which-key\n\" ---\n\naugroup user_events\n\tautocmd! FileType which_key\n\tautocmd  FileType which_key set laststatus=0 noshowmode noruler\n\t\t\\| autocmd BufLeave <buffer> set laststatus=2 showmode ruler\naugroup END\n\nlet g:which_key_hspace = 3\n\ncall which_key#register('<Space>', \"g:which_key_map\")\n\nlet g:which_key_map = {\n\t\\ 'name': 'rafi vim',\n\t\\ '-': 'swap window select',\n\t\\ '?': 'open dictionary',\n\t\\ 'a': 'open structure',\n\t\\ 'b': 'find in structure',\n\t\\ 'd': 'duplicate line',\n\t\\ 'e': 'open diagnostics',\n\t\\ 'f': 'filter in-place',\n\t\\ 'G': 'distraction-free',\n\t\\ 'h': 'show highlight',\n\t\\ 'j': 'move line down',\n\t\\ 'k': 'move line up',\n\t\\ 'K': 'thesaurus',\n\t\\ 'l': 'open side-menu',\n\t\\ 'N': 'alternate backwards',\n\t\\ 'n': 'alternate forwards',\n\t\\ 'S': 'source vim line',\n\t\\ 'V': 'comment wrap toggle',\n\t\\ 'v': 'comment toggle',\n\t\\ 'W': 'open wiki',\n\t\\ 'w': 'save',\n\t\\ 'Y': 'yank relative path',\n\t\\ 'y': 'yank absolute path',\n\t\\ }\n\nlet g:which_key_map['c'] = {\n\t\\ 'name': '+misc',\n\t\\ 'd': 'change current window directory',\n\t\\ 'n': 'change current word in a repeatable manner (forwards)',\n\t\\ 'N': 'change current word in a repeatable manner (backwards)',\n\t\\ 'p': 'duplicate paragraph',\n\t\\ 'w': 'strip trailing whitespace',\n\t\\ }\n\nlet g:which_key_map['g'] = {\n\t\\ 'name': '+find',\n\t\\ }\n\nlet g:which_key_map['i'] = {\n\t\\ 'name': '+jump',\n\t\\ }\n\nlet g:which_key_map['m'] = {\n\t\\ 'name': '+misc2',\n\t\\ }\n\nlet g:which_key_map['r'] = {\n\t\\ 'name': '+iron',\n\t\\ }\n\nlet g:which_key_map['s'] = {\n\t\\ 'name': '+session',\n\t\\ 'l': ' load project session',\n\t\\ 'e': ' save project session',\n\t\\ }\n\nlet g:which_key_map['t'] = {\n\t\\ 'name': '+toggle',\n\t\\ 'h': ' toggle search highlight',\n\t\\ 'i': ' toggle indent',\n\t\\ 'l': ' toggle hidden chars',\n\t\\ 'n': ' toggle line numbers',\n\t\\ 's': ' toggle spell',\n\t\\ 'w': ' toggle wrap',\n\t\\ }\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/plugins.yaml",
    "content": "---\n# PLUGINS\n# ===\n# See config/plugins/all.vim for plugin mappings and config/plugins/*.vim\n\n# Startup\n# -------\n- repo: Shougo/dein.vim\n- repo: thinca/vim-localrc\n- repo: Shougo/context_filetype.vim\n- repo: jaawerth/nrun.vim\n- { repo: rafi/awesome-vim-colorschemes, merged: 0 }\n\n- repo: sgur/vim-editorconfig\n  hook_add: |-\n    let g:editorconfig_verbose = 1\n    let g:editorconfig_blacklist = {\n      \\ 'filetype': [\n      \\   'git.*', 'fugitive', 'help', 'defx', 'denite.*', 'startify',\n      \\   'vista.*', 'tagbar', 'lsp-.*', 'clap_.*', 'any-jump', 'gina-.*',\n      \\   'lsp-*'\n      \\  ],\n      \\ 'pattern': ['\\.un~$']\n      \\ }\n\n# Improve CursorHold performance\n# See: https://github.com/neovim/neovim/issues/12587\n- { repo: antoinemadec/FixCursorHold.nvim, if: \"has('nvim')\" }\n\n- repo: christoomey/vim-tmux-navigator\n  if: \"! (has('win32') || has('win64'))\"\n\n- repo: tpope/vim-sleuth\n  hook_add: let g:sleuth_neighbor_limit = 5\n\n# GUI only:\n- { repo: equalsraf/neovim-gui-shim, if: has('gui_running') }\n\n# Vim8 only:\n- { repo: roxma/nvim-yarp, if: \"! has('nvim')\", depends: vim-hug-neovim-rpc }\n- { repo: roxma/vim-hug-neovim-rpc, if: \"! has('nvim')\" }\n\n# Lazy Loading\n# ==========================================\n\n# Languages\n# ---------\n- { repo: hail2u/vim-css3-syntax, on_ft: css }\n- { repo: othree/csscomplete.vim, on_ft: css }\n- { repo: cakebaker/scss-syntax.vim, on_ft: [ scss, sass ]}\n- { repo: groenewege/vim-less, on_ft: less }\n- { repo: iloginow/vim-stylus, on_ft: stylus }  # or wavded/vim-stylus ?\n- { repo: mustache/vim-mustache-handlebars, on_ft: [html, mustache, handlebars]}\n- { repo: digitaltoad/vim-pug, on_ft: [ pug, jade ]}\n\n- repo: othree/html5.vim\n  on_ft: html\n  hook_add: |-\n    let g:html5_event_handler_attributes_complete = 0\n    let g:html5_rdfa_attributes_complete = 0\n    let g:html5_microdata_attributes_complete = 0\n    let g:html5_aria_attributes_complete = 0\n\n# Markdown related\n- repo: plasticboy/vim-markdown\n  on_ft: markdown\n  hook_add: |-\n    let g:vim_markdown_frontmatter = 1\n    let g:vim_markdown_strikethrough = 1\n    let g:vim_markdown_folding_disabled = 1\n    let g:vim_markdown_conceal = 0\n    let g:vim_markdown_conceal_code_blocks = 0\n    let g:vim_markdown_new_list_item_indent = 0\n    let g:vim_markdown_toc_autofit = 0\n    let g:vim_markdown_edit_url_in = 'vsplit'\n    let g:vim_markdown_fenced_languages = [\n      \\ 'c++=cpp',\n      \\ 'viml=vim',\n      \\ 'bash=sh',\n      \\ 'ini=dosini',\n      \\ 'js=javascript',\n      \\ 'json=javascript',\n      \\ 'jsx=javascriptreact',\n      \\ 'tsx=typescriptreact',\n      \\ 'docker=Dockerfile',\n      \\ 'makefile=make',\n      \\ 'py=python'\n      \\ ]\n\n# Javascript related\n- repo: pangloss/vim-javascript\n  on_ft: [ javascript, javascriptreact ]\n  hook_add: let g:javascript_plugin_jsdoc = 1\n\n- repo: HerringtonDarkholme/yats.vim\n  on_ft: [ typescript, typescriptreact ]\n\n- repo: MaxMEllon/vim-jsx-pretty\n  on_ft: [ javascript, javascriptreact, typescriptreact ]\n  depends: vim-javascript\n  hook_add: let g:vim_jsx_pretty_colorful_config = 1\n\n- { repo: leafOfTree/vim-svelte-plugin, depends: yats.vim, on_ft: svelte }\n- { repo: heavenshell/vim-jsdoc, on_ft: [ javascript, javascriptreact ] }\n- { repo: jparise/vim-graphql, on_ft: [ javascript, javascriptreact ] }\n- { repo: moll/vim-node, on_ft: [ javascript, javascriptreact ] }\n- { repo: kchmck/vim-coffee-script, on_ft: [ coffee, litcoffee ] }\n- { repo: elzr/vim-json, on_ft: json }\n- { repo: posva/vim-vue, on_ft: vue }\n\n# pangloss/javascript vs. othree/yajs\n#- { repo: othree/yajs.vim, on_ft: [ javascript, javascriptreact ]}\n#- { repo: gavocanov/vim-js-indent, on_ft: [ javascript, javascriptreact ]}\n#- repo: mxw/vim-jsx\n#  on_ft: [ javascript, javascriptreact ]\n#  hook_add: let g:jsx_ext_required = 0\n\n# Python related\n- { repo: vim-python/python-syntax, on_ft: python }\n- { repo: Vimjas/vim-python-pep8-indent, on_ft: python }\n- { repo: vim-scripts/python_match.vim, on_ft: python }  # ?\n- { repo: raimon49/requirements.txt.vim, on_ft: requirements }\n\n# Misc\n- { repo: StanAngeloff/php.vim, on_ft: php }\n- { repo: tbastos/vim-lua, on_ft: lua }\n- { repo: vim-ruby/vim-ruby, on_ft: ruby }\n- { repo: keith/swift.vim, on_ft: swift }\n- { repo: rust-lang/rust.vim, on_ft: rust }\n- { repo: vim-jp/syntax-vim-ex, on_ft: vim }\n- { repo: chrisbra/csv.vim, on_ft: csv }\n- { repo: tpope/vim-git, on_ft: [ gitcommit, gitrebase, gitconfig ]}\n- { repo: ekalinin/Dockerfile.vim, on_ft: [ Dockerfile, docker-compose ]}\n- { repo: tmux-plugins/vim-tmux, on_ft: tmux }\n- { repo: MTDL9/vim-log-highlighting, on_ft: log }\n- { repo: cespare/vim-toml, on_ft: toml }\n- { repo: mboughaba/i3config.vim, on_ft: i3config }\n- { repo: dag/vim-fish, on_ft: fish }\n- { repo: jstrater/mpvim, on_ft: portfile }\n- { repo: robbles/logstash.vim, on_ft: logstash }\n- { repo: lifepillar/pgsql.vim, on_ft: pgsql }\n- { repo: chr4/nginx.vim, on_ft: nginx }\n- { repo: towolf/vim-helm, on_ft: helm }\n- { repo: udalov/kotlin-vim, on_ft: kotlin }\n- { repo: reasonml-editor/vim-reason-plus, on_ft: [ reason, merlin ] }\n\n- repo: pearofducks/ansible-vim\n  on_ft: [ ansible, ansible_hosts, jinja2 ]\n  hook_add: |-\n    let g:ansible_extra_keywords_highlight = 1\n    let g:ansible_template_syntaxes = {\n      \\   '*.json.j2': 'json',\n      \\   '*.(ba)?sh.j2': 'sh',\n      \\   '*.ya?ml.j2': 'yaml',\n      \\   '*.xml.j2': 'xml',\n      \\   '*.conf.j2': 'conf',\n      \\   '*.ini.j2': 'ini'\n      \\ }\n\n- repo: hashivim/vim-terraform\n  on_ft: terraform\n  on_cmd: [ Terraform, TerraformFmt ]\n\n# ==========================================\n# Commands\n# --------\n- repo: Shougo/defx.nvim\n  on_cmd: Defx\n  hook_source: source $VIM_PATH/config/plugins/defx.vim\n\n- { repo: kristijanhusak/defx-git, on_source: defx.nvim }\n- { repo: kristijanhusak/defx-icons, on_source: defx.nvim }\n\n- { repo: tyru/caw.vim, on_map: { nx: <Plug> }}\n- { repo: lambdalisue/fin.vim, on_cmd: Fin }\n- { repo: mbbill/undotree, on_cmd: UndotreeToggle }\n- { repo: jreybert/vimagit, on_cmd: Magit }\n- { repo: tweekmonster/helpful.vim, on_cmd: HelpfulVersion }\n- { repo: kana/vim-altr, on_map: { n: <Plug> }}\n- { repo: Shougo/vinarise.vim, on_cmd: Vinarise }\n- { repo: guns/xterm-color-table.vim, on_cmd: XtermColorTable }\n- { repo: cocopon/colorswatch.vim, rev: main, on_cmd: ColorSwatchGenerate }\n- { repo: dstein64/vim-startuptime, on_cmd: StartupTime }\n- { repo: lambdalisue/suda.vim, on_event: BufRead }\n\n- repo: liuchengxu/vim-which-key\n  on_cmd: [ WhichKey, WhichKeyVisual ]\n  hook_source: source $VIM_PATH/config/plugins/whichkey.vim\n\n- repo: lambdalisue/gina.vim\n  on_cmd: Gina\n  on_ft: [ gitcommit, gitrebase ]\n  hook_source: source $VIM_PATH/config/plugins/gina.vim\n\n- repo: mhinz/vim-grepper\n  on_map: { nx: <Plug> }\n  on_cmd: Grepper\n  hook_add: |-\n    let g:grepper = {\n        \\ 'tools': ['rg', 'git', 'fd'],\n        \\ 'fd': {\n        \\   'grepprg':    'fd',\n        \\   'grepformat': '%f',\n        \\   'escape':     '\\+*^$()[]',\n        \\ }}\n\n- repo: brooth/far.vim\n  on_cmd: [ Far, Farp, F ]\n  hook_source: |-\n    if executable('rg')\n      let g:far#source = 'rg'\n    elseif executable('ag')\n      let g:far#source = 'ag'\n    elseif executable('ack')\n      let g:far#source = 'ack'\n    endif\n\n- repo: pechorin/any-jump.vim\n  on_cmd: [ AnyJump, AnyJumpVisual ]\n  hook_add: |-\n    let g:any_jump_disable_default_keybindings = 1\n    autocmd user_events FileType any-jump setlocal cursorline\n\n- repo: Vigemus/iron.nvim\n  if: has('nvim')\n  on_cmd: [ IronRepl, IronReplHere, IronFocus, IronSend, IronWatchCurrentFile ]\n  on_map: { nv: <Plug> }\n  on_func: IronUnwatchFile\n  hook_add: let g:iron_map_defaults = 0 | let g:iron_map_extended = 0\n  hook_source: luafile $VIM_PATH/config/plugins/iron.lua\n\n- repo: kana/vim-niceblock\n  on_map: { x: <Plug> }\n  hook_add: let g:niceblock_no_default_key_mappings = 0\n\n- repo: t9md/vim-choosewin\n  on_map: { n: <Plug> }\n  hook_add: |-\n    let g:choosewin_label = 'ADFGHJKLUIOPQWERT'\n    let g:choosewin_label_padding = 5\n\n- repo: wfxr/minimap.vim\n  on_cmd: [ Minimap, MinimapToggle ]\n  hook_source: |-\n    let g:minimap_block_filetypes = ['fugitive', 'nerdtree', 'defx']\n\n- repo: mzlogin/vim-markdown-toc\n  on_cmd: [ GenTocGFM, GenTocRedcarpet, GenTocGitLab, UpdateToc ]\n  hook_add: let g:vmt_auto_update_on_save = 0\n\n- repo: reedes/vim-wordy\n  on_cmd: [ Wordy, NoWordy, NextWordy ]\n  # hook_add: let g:wordy_spell_dir = $DATA_PATH . '/wordy'\n\n- repo: liuchengxu/vista.vim\n  # on_cmd: Vista\n  hook_add: |-\n    let g:vista#renderer#enable_icon = 1\n    let g:vista_echo_cursor_strategy = 'scroll'\n    let g:vista_vimwiki_executive = 'markdown'\n    let g:vista_executive_for = {\n      \\ 'vimwiki': 'markdown',\n      \\ 'pandoc': 'markdown',\n      \\ 'markdown': 'toc',\n      \\ 'go': 'coc',\n      \\ }\n\n- repo: junegunn/fzf\n  merged: 0\n  on_cmd: FZF\n  type__depth: 1\n  hook_source: |-\n    let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'highlight': 'Todo', 'border': 'rounded' } }\n\n- repo: junegunn/fzf.vim\n  depends: fzf\n  merged: 0\n  on_cmd: [ Files, GitFiles, Buffers, Lines, Locate, Colors, Ag, Rg, Tags ]\n  on_func: [ fzf#vim#with_preview, fzf#run, vista#finder#fzf#Run ]\n\n- repo: Ron89/thesaurus_query.vim\n  on_cmd:\n    - Thesaurus\n    - ThesaurusQueryReplaceCurrentWord\n    - ThesaurusQueryLookupCurrentWord\n  hook_add: |-\n    let g:tq_map_keys = 0\n    let g:tq_use_vim_autocomplete = 0\n\n# ==========================================\n# Interface\n# ---------\n- { repo: itchyny/vim-gitbranch, on_event: FileType }\n- { repo: itchyny/vim-parenmatch, on_event: FileType }\n- { repo: romainl/vim-cool, on_event: [ CursorMoved, InsertEnter ]}\n- { repo: haya14busa/vim-asterisk, on_map: { nv: <Plug> }}\n- { repo: rhysd/accelerated-jk, on_map: { n: <Plug> }, if: $SUDO_USER == '' }\n- { repo: haya14busa/vim-edgemotion, on_map: { nv: <Plug> }}\n- { repo: t9md/vim-quickhl, on_map: { nv: <Plug> }}\n- { repo: rafi/vim-sidemenu, on_map: { nv: <Plug> }}\n\n- repo: machakann/vim-highlightedyank\n  if: \"! has('nvim-0.5')\"\n  on_event: TextYankPost\n  hook_source: let g:highlightedyank_highlight_duration = 200\n\n- repo: romainl/vim-qf\n  on_ft: qf\n  on_event: QuickFixCmdPost\n  on_map: { n: <Plug> }\n  hook_add: |-\n    let g:qf_bufname_or_text = 1\n    let g:qf_auto_open_quickfix = 0\n    let g:qf_auto_open_loclist = 0\n    let g:qf_auto_resize = 0\n    autocmd User preview_open_pre\n      \\  let g:vim_markdown_no_default_key_mappings = 1\n      \\| let g:vim_markdown_emphasis_multiline = 0\n    autocmd User preview_open_post\n      \\  unlet! g:vim_markdown_no_default_key_mappings\n      \\| unlet! g:vim_markdown_emphasis_multiline\n\n- repo: itchyny/vim-cursorword\n  on_event: FileType\n  hook_add: let g:cursorword = 0\n  hook_source: |-\n    augroup user_plugin_cursorword\n      autocmd!\n      autocmd FileType json,yaml,markdown,nginx,dosini,conf\n        \\ let b:cursorword = 1\n      autocmd WinEnter * if &diff || &pvw | let b:cursorword = 0 | endif\n      autocmd InsertEnter * if get(b:, 'cursorword', 0) == 1\n        \\| let b:cursorword = 0\n        \\| endif\n      autocmd InsertLeave * if get(b:, 'cursorword', 1) == 0\n        \\| let b:cursorword = 1\n        \\| endif\n    augroup END\n\n- repo: airblade/vim-gitgutter\n  on_event: FileType\n  hook_add: |-\n    let g:gitgutter_map_keys = 0\n    let g:gitgutter_sign_added = '▎'\n    let g:gitgutter_sign_modified = '▎'\n    let g:gitgutter_sign_removed = '▍'\n    let g:gitgutter_sign_removed_first_line = '▘'\n    let g:gitgutter_sign_removed_above_and_below = '_¯'\n    let g:gitgutter_sign_modified_removed = '▍'\n    let g:gitgutter_preview_win_floating = 1\n    let g:gitgutter_sign_allow_clobber = 0\n    let g:gitgutter_sign_priority = 0\n    let g:gitgutter_override_sign_column_highlight = 0\n\n- repo: kshenoy/vim-signature\n  depends: vim-gitgutter\n  on_event: FileType\n  hook_add: |-\n    let g:SignatureForceRemoveGlobal = 0\n    let g:SignatureUnconditionallyRecycleMarks = 1\n    let g:SignatureErrorIfNoAvailableMarks = 0\n    let g:SignaturePurgeConfirmation = 0\n    let g:SignatureMarkTextHLDynamic = 1\n    let g:SignatureMarkerTextHLDynamic = 1\n    let g:SignatureIncludeMarkers = repeat('⚐', 10)\n    autocmd user_events User GitGutter call signature#sign#Refresh()\n\n- repo: nathanaelkane/vim-indent-guides\n  if: 0\n  on_event: FileType\n  hook_source: |-\n    let g:indent_guides_enable_on_vim_startup = 0\n    let g:indent_guides_default_mapping = 0\n    let g:indent_guides_tab_guides = 0\n    let g:indent_guides_color_change_percent = 3\n    let g:indent_guides_guide_size = 1\n    let g:indent_guides_exclude_filetypes = [\n      \\ 'help', 'man', 'fern', 'defx', 'denite', 'denite-filter', 'startify',\n      \\ 'vista', 'vista_kind', 'tagbar', 'lsp-hover', 'clap_input', 'fzf',\n      \\ 'any-jump', 'gina-status', 'gina-commit', 'gina-log', 'minimap',\n      \\ 'quickpick-filter', 'lsp-quickpick-filter'\n      \\ ]\n    autocmd user_events FileType * ++once IndentGuidesEnable\n\n- repo: rhysd/committia.vim\n  on_event: BufReadPost\n  hook_source: let g:committia_min_window_width = 70\n\n- repo: junegunn/goyo.vim\n  depends: limelight.vim\n  on_cmd: Goyo\n  hook_source: source $VIM_PATH/config/plugins/goyo.vim\n\n- repo: junegunn/limelight.vim\n  on_cmd: Limelight\n\n- repo: itchyny/calendar.vim\n  on_cmd: Calendar\n  hook_source: |-\n    let g:calendar_google_calendar = 1\n    let g:calendar_google_task = 1\n\n- repo: deris/vim-shot-f\n  on_map: { nxo: <Plug> }\n  hook_add: let g:shot_f_no_default_key_mappings = 1\n\n- repo: vimwiki/vimwiki\n  on_map: { n: <Plug> }\n  on_cmd: [ VimwikiIndex, VimwikiUISelect ]\n  hook_add: |-\n    let g:vimwiki_use_calendar = 1\n    let g:vimwiki_hl_headers = 1\n    let g:vimwiki_hl_cb_checked = 1\n    let g:vimwiki_autowriteall = 0\n  hook_source: |-\n    let g:vimwiki_list = [\n    \\   { 'diary_header': 'Diary',\n    \\     'diary_link_fmt': '%Y-%m/%d',\n    \\     'auto_toc': 1,\n    \\     'path': '~/docs/wiki/',\n    \\     'syntax': 'markdown',\n    \\     'ext': '.md' },\n    \\   { 'path': '~/docs/books/',\n    \\     'syntax': 'markdown',\n    \\     'ext': '.md' }\n    \\ ]\n\n- repo: norcalli/nvim-colorizer.lua\n  if: has('nvim-0.4')\n  on_event: FileType\n  hook_source: luafile $VIM_PATH/config/plugins/colorizer.lua\n\n# ==========================================\n# Completion and code analysis\n# ----------\n\n# - repo: prabirshrestha/async.vim  # only autoload functions, lazy by nature\n#\n# - repo: prabirshrestha/asyncomplete.vim\n#   on_source: asyncomplete-lsp.vim\n#   hook_add: let g:asyncomplete_auto_completeopt = 0\n#   hook_source: source $VIM_PATH/config/plugins/asyncomplete.vim\n#\n# - repo: prabirshrestha/asyncomplete-lsp.vim\n#   on_source: vim-lsp\n#\n# - repo: prabirshrestha/vim-lsp\n#   on_source: vim-lsp-settings\n#   hook_source: source $VIM_PATH/config/plugins/lsp.vim\n#   hook_add: |-\n#     let g:lsp_auto_enable = argc() > 0\n#     let g:lsp_ignorecase = 1\n#     let g:lsp_signs_enabled = 1\n#     let g:lsp_async_completion = 1\n#     let g:lsp_fold_enabled = 0\n#     let g:lsp_text_edit_enabled = 1\n#     let g:lsp_peek_alignment = 'top'\n#     let g:lsp_diagnostics_enabled = 1\n#     let g:lsp_diagnostics_echo_cursor = 1\n#     let g:lsp_diagnostics_echo_delay = 400\n#     let g:lsp_diagnostics_virtual_text_enabled = 0\n#     let g:lsp_diagnostics_highlights_delay = 400\n#     let g:lsp_diagnostics_signs_error = {'text': '✖'}\n#     let g:lsp_diagnostics_signs_warning = {'text': '⬪'}\n#     let g:lsp_diagnostics_signs_hint = {'text': '▪'}\n#     let g:lsp_diagnostics_signs_information = {'text': '▫'}\n#\n# - repo: mattn/vim-lsp-settings\n#   on_event: [ BufReadPre, VimEnter ]\n#   merged: 0\n#   hook_post_source: |-\n#     if ! g:lsp_auto_enable\n#       call lsp#enable()\n#     endif\n#   hook_add: |-\n#     let g:lsp_settings = {\n#     \\   'yaml-language-server': {\n#     \\     'allowlist': ['yaml', 'yaml.ansible'],\n#     \\   }\n#     \\ }\n#\n# - repo: prabirshrestha/asyncomplete-necovim.vim\n#   on_source: asyncomplete.vim\n#   hook_source: |-\n#     autocmd User asyncomplete_setup call asyncomplete#register_source(\n#       \\ asyncomplete#sources#necovim#get_source_options({\n#       \\ 'name': 'necovim',\n#       \\ 'allowlist': ['vim'],\n#       \\ 'completor': function('asyncomplete#sources#necovim#completor'),\n#       \\ }))\n#\n# - repo: Shougo/neco-vim\n#   on_source: asyncomplete-necovim.vim\n#\n# - repo: prabirshrestha/asyncomplete-buffer.vim\n#   on_source: asyncomplete.vim\n#   hook_source: |-\n#     autocmd User asyncomplete_setup call asyncomplete#register_source(\n#       \\ asyncomplete#sources#buffer#get_source_options({\n#       \\ 'name': 'buffer',\n#       \\ 'allowlist': ['*'],\n#       \\ 'blocklist': ['go', 'denite', 'denite-filter', 'clap_input',\n#       \\               'quickpick-filter', 'lsp-quickpick-filter'],\n#       \\ 'completor': function('asyncomplete#sources#buffer#completor'),\n#       \\ 'config': {\n#       \\    'max_buffer_size': 4000000,\n#       \\  },\n#       \\ }))\n#\n# - repo: prabirshrestha/asyncomplete-tags.vim\n#   if: executable('ctags')\n#   on_source: asyncomplete.vim\n#   hook_source: |-\n#     autocmd User asyncomplete_setup call asyncomplete#register_source(\n#       \\ asyncomplete#sources#tags#get_source_options({\n#       \\ 'name': 'tags',\n#       \\ 'allowlist': ['*'],\n#       \\ 'blocklist': ['go', 'python', 'vim', 'denite', 'denite-filter',\n#       \\               'clap_input', 'quickpick-filter', 'lsp-quickpick-filter'],\n#       \\ 'completor': function('asyncomplete#sources#tags#completor'),\n#       \\ 'config': { 'max_file_size': 5000000 },\n#       \\ }))\n#\n# - repo: prabirshrestha/asyncomplete-file.vim\n#   on_source: asyncomplete.vim\n#   hook_source: |-\n#     autocmd User asyncomplete_setup call asyncomplete#register_source(\n#       \\ asyncomplete#sources#file#get_source_options({\n#       \\ 'name': 'file',\n#       \\ 'priority': 10,\n#       \\ 'allowlist': ['*'],\n#       \\ 'blocklist': ['denite', 'denite-filter', 'clap_input',\n#       \\               'quickpick-filter', 'lsp-quickpick-filter'],\n#       \\ 'completor': function('asyncomplete#sources#file#completor')\n#       \\ }))\n#\n# - repo: wellle/tmux-complete.vim\n#   if: \"! (has('win32') || has('win64'))\"\n#   on_source: asyncomplete.vim\n#   hook_add: |-\n#     let g:tmuxcomplete#trigger = ''\n#     let g:tmuxcomplete#asyncomplete_source_options = {\n#       \\ 'name': 'tmux',\n#       \\ 'priority': 0,\n#       \\ 'allowlist': ['*'],\n#       \\ 'blocklist': ['denite', 'denite-filter', 'clap_input',\n#       \\               'quickpick-filter', 'lsp-quickpick-filter'],\n#       \\ 'config': {\n#       \\   'splitmode': 'words',\n#       \\   'filter_prefix': 1,\n#       \\   'show_incomplete': 1,\n#       \\   'sort_candidates': 0,\n#       \\   'scrollback': 0,\n#       \\   'truncate': 0\n#       \\   }\n#       \\ }\n#\n# - repo: prabirshrestha/asyncomplete-ultisnips.vim\n#   if: has('python3')\n#   on_source: asyncomplete.vim\n#   hook_source: |-\n#     autocmd User asyncomplete_setup call asyncomplete#register_source(\n#       \\ asyncomplete#sources#ultisnips#get_source_options({\n#       \\ 'name': 'snip',\n#       \\ 'priority': 0,\n#       \\ 'allowlist': ['*'],\n#       \\ 'blocklist': ['denite', 'denite-filter', 'clap_input',\n#       \\               'quickpick-filter', 'lsp-quickpick-filter'],\n#       \\ 'completor': function('asyncomplete#sources#ultisnips#completor'),\n#       \\ }))\n#\n# - repo: SirVer/ultisnips\n#   if: has('python3')\n#   on_event: FileType\n#   hook_add: |-\n#     let g:UltiSnipsExpandTrigger = '<C-l>'\n#     let g:UltiSnipsListSnippets = '<C-Tab>'\n#     let g:UltiSnipsJumpForwardTrigger = '<Tab>'\n#     let g:UltiSnipsJumpBackwardTrigger = '<S-Tab>'\n\n- repo: honza/vim-snippets\n  # depends: ultisnips\n  on_event: FileType\n  if: has('python3')\n  merged: 0\n\n- repo: mattn/emmet-vim\n  on_event: InsertEnter\n  on_ft:\n    - css\n    - html\n    - vue\n    - svelte\n    - javascript\n    - javascriptreact\n    - typescript\n    - typescriptreact\n  hook_source: |-\n    let g:user_emmet_complete_tag = 0\n    let g:user_emmet_install_global = 0\n    let g:user_emmet_install_command = 0\n    let g:user_emmet_mode = 'i'\n\n- repo: ludovicchabant/vim-gutentags\n  if: executable('ctags')\n  on_event: [ BufReadPost, BufWritePost ]\n  hook_add: |-\n    let g:gutentags_cache_dir = $DATA_PATH . '/tags'\n    let g:gutentags_generate_on_write = 0\n    let g:gutentags_generate_on_missing = 0\n    let g:gutentags_generate_on_new = 0\n    let g:gutentags_exclude_project_root = [ '/usr/local' ]\n    let g:gutentags_exclude_filetypes = [ 'defx', 'denite', 'vista', 'magit' ]\n    let g:gutentags_ctags_exclude = [\n      \\ '.idea', '.cache', '.tox', '.bundle', 'build', 'dist' ]\n\n- repo: Raimondi/delimitMate\n  on_event: FileType\n  hook_source: |-\n    let g:delimitMate_expand_cr = 1\n    let g:delimitMate_expand_space = 1\n    let g:delimitMate_smart_quotes = 1\n    let g:delimitMate_expand_inside_quotes = 0\n    let g:delimitMate_excluded_ft = 'mail,txt,denite-filter,clap_input'\n    augroup user_plugin_delimitMate\n      au!\n      au FileType python let b:delimitMate_nesting_quotes = ['\"', \"'\"]\n      au FileType markdown let b:delimitMate_nesting_quotes = [\"`\"]\n      au FileType tex let b:delimitMate_quotes = \"\"\n      au FileType tex let b:delimitMate_matchpairs = \"(:),[:],{:},`:'\"\n    augroup END\n\n# ==========================================\n# Denite\n# ------\n- repo: Shougo/denite.nvim\n  on_cmd: Denite\n  trusted: 1\n  hook_source: source $VIM_PATH/config/plugins/denite.vim\n\n- repo: Shougo/neomru.vim\n  on_source: denite.nvim\n  hook_add: |-\n    let g:neomru#directory_mru_path = $DATA_PATH . '/mru/dir'\n    let g:neomru#file_mru_path = $DATA_PATH . '/mru/file'\n    let g:unite_source_file_mru_limit = 5000\n\n- { repo: Shougo/neoyank.vim, on_source: denite.nvim, on_event: TextYankPost }\n- { repo: Shougo/junkfile.vim, on_source: denite.nvim }\n- { repo: chemzqm/unite-location, on_source: denite.nvim }\n- { repo: rafi/vim-denite-session, on_source: denite.nvim }\n\n- repo: rafi/vim-denite-z\n  on_source: denite.nvim\n  hook_source: |-\n    command! -nargs=+ -complete=file Z call denite#start(\n      \\ [{'name': 'z', 'args': [<q-args>], {'immediately': 1}}])\n\n- repo: liuchengxu/vim-clap\n  merged: 0\n  on_cmd: Clap\n  hook_add: |-\n    let g:clap_cache_directory = $DATA_PATH . '/clap'\n    let g:clap_disable_run_rooter = v:true\n    let g:clap_theme = 'atom_dark'\n    let g:clap_layout = { 'relative': 'editor' }\n    let g:clap_enable_icon = 1\n    let g:clap_search_box_border_style = 'curve'\n    let g:clap_provider_grep_enable_icon = 1\n    let g:clap_prompt_format = '%spinner%%forerunner_status% %provider_id%: '\n    let g:clap_current_selection_sign = {\n      \\ 'text': '→',\n      \\ 'texthl': 'ClapCurrentSelectionSign',\n      \\ 'linehl': 'ClapCurrentSelection' }\n    let g:clap_selected_sign = {\n      \\ 'text': '* ',\n      \\ 'texthl': 'ClapSelectedSign',\n      \\ 'linehl': 'ClapSelected' }\n    highlight! link ClapMatches Function\n    highlight! link ClapNoMatchesFound WarningMsg\n\n# ==========================================\n# Operators\n# ---------\n- repo: kana/vim-operator-user  # only autoload functions, lazy by nature\n\n- { repo: kana/vim-operator-replace, on_map: { vnx: <Plug> }}\n\n- repo: machakann/vim-sandwich\n  on_map: { vonx: <Plug>(operator-sandwich- }\n  hook_add: |-\n    let g:sandwich_no_default_key_mappings = 1\n    let g:operator_sandwich_no_default_key_mappings = 1\n    let g:textobj_sandwich_no_default_key_mappings = 1\n\n# ==========================================\n# Text objects\n# ------------\n- repo: kana/vim-textobj-user  # only autoload functions, lazy by nature\n- { repo: terryma/vim-expand-region, on_map: { x: <Plug> }}\n- { repo: AndrewRadev/sideways.vim, on_map: { onx: <Plug>Sideways }}\n- { repo: AndrewRadev/splitjoin.vim, on_map: { n: <Plug>Splitjoin }}\n- { repo: AndrewRadev/linediff.vim, on_cmd: Linediff }\n\n- repo: AndrewRadev/dsf.vim\n  on_map: { n: <Plug>Dsf }\n  hook_add: let g:dsf_no_mappings = 1\n\n- repo: kana/vim-textobj-function\n  on_map: { ox: <Plug> }\n  hook_add: let g:textobj_function_no_default_key_mappings = 1\n\n#  vim: set ts=2 sw=2 tw=80 et :\n"
  },
  {
    "path": "config/statusline.vim",
    "content": "\" Statusline\n\" ---\n\nlet s:stl  = \" %7*%{&paste ? '=' : ''}%*\"         \" Paste symbol\nlet s:stl .= \"%4*%{&readonly ? '' : '#'}%*\"       \" Modified symbol\nlet s:stl .= \"%6*%{badge#mode('🔒', '🔎')}\"       \" Read-only symbol\nlet s:stl .= '%*%n'                               \" Buffer number\nlet s:stl .= \"%6*%{badge#modified('+')}%0*\"       \" Write symbol\nlet s:stl .= ' %1*%{badge#filename()}%* '         \" Filename\nlet s:stl .= '%<'                                 \" Start truncating here\nlet s:stl .= '%( %{badge#branch()} %)'           \" Git branch name\nlet s:stl .= '%4*%(%{badge#syntax()} %)%*'        \" Syntax lint\nlet s:stl .= \"%4*%(%{badge#trails('␣%s')} %)%*\"   \" Whitespace\nlet s:stl .= '%3*%(%{badge#indexing()} %)%*'      \" Indexing indicator\nlet s:stl .= '%3*%(%{badge#gitstatus()} %)%*'     \" Git status\nlet s:stl .= '%='                                 \" Align to right\nlet s:stl .= '%{badge#format()} %4*%*'           \" File format\nlet s:stl .= '%( %{&fenc} %)'                     \" File encoding\nlet s:stl .= '%4*%*%( %{&ft} %)'                 \" File type\nlet s:stl .= '%3*%2* %l/%2c%4p%% '               \" Line and column\n\n\" Non-active Statusline\nlet s:stl_nc = \" %{badge#mode('🔒', 'Z')}%n\"   \" Read-only symbol\nlet s:stl_nc .= \"%6*%{badge#modified('+')}%*\"  \" Unsaved changes symbol\nlet s:stl_nc .= ' %{badge#filename()}'         \" Relative supername\nlet s:stl_nc .= '%='                           \" Align to right\nlet s:stl_nc .= '%{&ft} '                      \" File type\n\n\" Status-line blacklist\nlet s:statusline_filetypes_ignore = get(g:, 'statusline_filetypes_ignore',\n\t\\ 'defx\\|denite\\|vista\\|undotree\\|diff\\|sidemenu\\|qf')\n\nlet s:statusline_filetypes = get(g:, 'statusline_filetypes', {\n\t\\ 'defx': ['%{fnamemodify(getcwd(), \":t\")}%=%l/%L'],\n\t\\ 'magit': [\n\t\\   '%y %{badge#gitstatus()}%<%=%{fnamemodify(badge#filename(), \":~\")}%=%l/%L',\n\t\\   '%y %{badge#gitstatus()}%= %l/%L'],\n\t\\ 'minimap': [' '],\n\t\\ 'denite-filter': ['%#Normal#'],\n\t\\ })\n\n\" s:set_state replaces current statusline\nfunction! s:set_state(filetype, index, default)\n\t\" Skip statusline render during session loading\n\tif &previewwindow || exists('g:SessionLoad') \"|| empty(a:filetype)\n\t\treturn\n\tendif\n\tif has_key(s:statusline_filetypes, a:filetype)\n\t\tlet l:states = s:statusline_filetypes[a:filetype]\n\t\tlet l:want = get(l:states, a:index, l:states[0])\n\t\tif &l:statusline != l:want\n\t\t\tlet &l:statusline = l:want\n\t\tendif\n\telseif a:filetype !~# s:statusline_filetypes_ignore\n\t\tif &l:statusline != a:default\n\t\t\tlet &l:statusline = a:default\n\t\tendif\n\tendif\nendfunction\n\n\" Bind to Vim events\naugroup user_statusline\n\tautocmd!\n\n\t\" Set active/inactive statusline templates\n\tautocmd VimEnter,ColorScheme, * let &l:statusline = s:stl\n\tautocmd FileType,WinEnter,BufWinEnter * call s:set_state(&filetype, 0, s:stl)\n\tautocmd WinLeave * call s:set_state(&filetype, 1, s:stl_nc)\n\n\t\" Redraw on Vim events\n\tautocmd FileChangedShellPost,BufFilePost,BufNewFile,BufWritePost * redrawstatus\n\n\t\" Redraw on Plugins custom events\n\tautocmd User ALELintPost,ALEFixPost redrawstatus\n\tautocmd User NeomakeJobFinished redrawstatus\n\tautocmd User GutentagsUpdating redrawstatus\n\tautocmd User CocStatusChange,CocGitStatusChange redrawstatus\n\tautocmd User CocDiagnosticChange redrawstatus\n\t\" autocmd User lsp_diagnostics_updated redrawstatus\n\n\t\" if exists('##LspDiagnosticsChanged')\n\t\" \tautocmd LspDiagnosticsChanged * redrawstatus\n\t\" endif\naugroup END\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/tabline.vim",
    "content": "\" Tabline\n\" ---\n\n\" Configuration\n\nlet g:badge_numeric_charset =\n\t\\ get(g:, 'badge_numeric_charset',\n\t\\ ['⁰','¹','²','³','⁴','⁵','⁶','⁷','⁸','⁹'])\n\t\"\\ ['₀','₁','₂','₃','₄','₅','₆','₇','₈','₉'])\n\n\" Limit display of directories in path\nlet g:badge_tab_filename_max_dirs =\n\t\\ get(g:, 'badge_tab_filename_max_dirs', 1)\n\n\" Limit display of characters in each directory in path\nlet g:badge_tab_dir_max_chars =\n\t\\ get(g:, 'badge_tab_dir_max_chars', 5)\n\n\" Display entire tabline\nfunction! Tabline()\n\tif exists('g:SessionLoad')\n\t\t\" Skip tabline render during session loading\n\t\treturn ''\n\tendif\n\n\t\" Active project name\n\tlet l:tabline =\n\t\t\\ '%#TabLineAlt# %{\"  \" . badge#project()} %#TabLineAltShade#'\n\n\t\" Iterate through all tabs and collect labels\n\tlet l:current = tabpagenr()\n\tfor i in range(tabpagenr('$'))\n\t\tlet l:nr = i + 1\n\t\tlet l:bufnrlist = tabpagebuflist(l:nr)\n\t\tlet l:bufnr = l:bufnrlist[tabpagewinnr(l:nr) - 1]\n\n\t\t\" Left-side of single tab\n\t\tif l:nr == l:current\n\t\t\tlet l:tabline .= '%#TabLineFill#%#TabLineSel# '\n\t\telse\n\t\t\tlet l:tabline .= '%#TabLine#  '\n\t\tendif\n\n\t\t\" Get file-name with custom cutoff settings\n\t\tlet l:tabline .= '%' . l:nr . 'T%{badge#filename('\n\t\t\t\\ . l:bufnr . ', ' . g:badge_tab_filename_max_dirs . ', '\n\t\t\t\\ . g:badge_tab_dir_max_chars . ', \"tabname\")}'\n\n\t\t\" Append window count, for tabs\n\t\tlet l:win_count = tabpagewinnr(l:nr, '$')\n\t\tfor l:bufnr in l:bufnrlist\n\t\t\tlet l:bufname = bufname(l:bufnr)\n\t\t\tif empty(l:bufname) || l:bufname =~\n\t\t\t\t\\ '^\\(denite\\|defx\\|fugitive\\|magit\\|fern\\|hover\\|clap_\\|Telescope\\)'\n\t\t\t\tlet l:win_count -= 1\n\t\t\tendif\n\t\tendfor\n\t\tif l:win_count > 1\n\t\t\tlet l:tabline .= s:numtr(l:win_count, g:badge_numeric_charset)\n\t\tendif\n\n\t\t\" Add '+' if one of the buffers in the tab page is modified\n\t\tfor l:bufnr in l:bufnrlist\n\t\t\tif getbufvar(l:bufnr, \"&modified\")\n\t\t\t\tlet l:tabline .= (l:nr == l:current ? '%#Number#' : '%6*') . '+%*'\n\t\t\t\tbreak\n\t\t\tendif\n\t\tendfor\n\n\t\t\" Right-side of single tab\n\t\tif l:nr == l:current\n\t\t\tlet l:tabline .= '%#TabLineSel# %#TabLineFill#'\n\t\telse\n\t\t\tlet l:tabline .= '%#TabLine#  '\n\t\tendif\n\tendfor\n\n\t\" Empty elastic space and session indicator\n\tlet l:tabline .=\n\t\t\\ '%#TabLineFill#%T%=%#TabLine#' .\n\t\t\\ '%{badge#session(\"' . fnamemodify(v:this_session, ':t:r') . '  \")}'\n\n\treturn l:tabline\nendfunction\n\nfunction! s:numtr(number, charset) abort\n\tlet l:result = ''\n\tfor l:char in split(a:number, '\\zs')\n\t\tlet l:result .= a:charset[l:char]\n\tendfor\n\treturn l:result\nendfunction\n\nlet &tabline='%!Tabline()'\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/terminal.vim",
    "content": "\" Vim Only Terminal Tweaks: Colors, cursor shape, and tmux\n\" ---\n\n\" Paste\n\" Credits: https://github.com/Shougo/shougo-s-github\n\" ---\n\" let &t_ti .= \"\\e[?2004h\"\n\" let &t_te .= \"\\e[?2004l\"\n\" let &pastetoggle = \"\\e[201~\"\n\"\n\" function! s:XTermPasteBegin(ret) abort\n\" \tsetlocal paste\n\" \treturn a:ret\n\" endfunction\n\"\n\" noremap  <special> <expr> <Esc>[200~ <SID>XTermPasteBegin('0i')\n\" inoremap <special> <expr> <Esc>[200~ <SID>XTermPasteBegin('')\n\" cnoremap <special> <Esc>[200~ <nop>\n\" cnoremap <special> <Esc>[201~ <nop>\n\n\" Mouse settings\n\" ---\nif has('mouse')\n\tif has('mouse_sgr')\n\t\tset ttymouse=sgr\n\telse\n\t\tset ttymouse=xterm2\n\tendif\nendif\n\n\" Disable modifyOtherKeys\n\" See: https://github.com/vim/vim/issues/5200\nlet &t_TI = \"\"\nlet &t_TE = \"\"\n\n\" Cursor-shape\n\" Credits: https://github.com/wincent/terminus\n\" ---\n\" Detect terminal\nlet s:tmux = exists('$TMUX')\nlet s:iterm = exists('$ITERM_PROFILE') || exists('$ITERM_SESSION_ID')\nlet s:iterm2 = s:iterm && exists('$TERM_PROGRAM_VERSION') &&\n\t\\ match($TERM_PROGRAM_VERSION, '\\v^[2-9]\\.') == 0\nlet s:konsole = exists('$KONSOLE_DBUS_SESSION') ||\n\t\\ exists('$KONSOLE_PROFILE_NAME')\n\n\" 1 or 0 -> blinking block\n\" 2 -> solid block\n\" 3 -> blinking underscore\n\" 4 -> solid underscore\n\" Recent versions of xterm (282 or above) also support\n\" 5 -> blinking vertical bar\n\" 6 -> solid vertical bar\nlet s:normal_shape = 0\nlet s:insert_shape = 5\nlet s:replace_shape = 3\nif s:iterm2\n\tlet s:start_insert = \"\\<Esc>]1337;CursorShape=\" . s:insert_shape . \"\\x7\"\n\tlet s:start_replace = \"\\<Esc>]1337;CursorShape=\" . s:replace_shape . \"\\x7\"\n\tlet s:end_insert = \"\\<Esc>]1337;CursorShape=\" . s:normal_shape . \"\\x7\"\nelseif s:iterm || s:konsole\n\tlet s:start_insert = \"\\<Esc>]50;CursorShape=\" . s:insert_shape . \"\\x7\"\n\tlet s:start_replace = \"\\<Esc>]50;CursorShape=\" . s:replace_shape . \"\\x7\"\n\tlet s:end_insert = \"\\<Esc>]50;CursorShape=\" . s:normal_shape . \"\\x7\"\nelse\n\tlet s:cursor_shape_to_vte_shape = {1: 6, 2: 4, 0: 2, 5: 6, 3: 4}\n\tlet s:insert_shape = s:cursor_shape_to_vte_shape[s:insert_shape]\n\tlet s:replace_shape = s:cursor_shape_to_vte_shape[s:replace_shape]\n\tlet s:normal_shape = s:cursor_shape_to_vte_shape[s:normal_shape]\n\tlet s:start_insert = \"\\<Esc>[\" . s:insert_shape . ' q'\n\tlet s:start_replace = \"\\<Esc>[\" . s:replace_shape . ' q'\n\tlet s:end_insert = \"\\<Esc>[\" . s:normal_shape . ' q'\nendif\n\nfunction! s:tmux_wrap(string)\n\tif strlen(a:string) == 0 | return '' | end\n\tlet l:tmux_begin = \"\\<Esc>Ptmux;\"\n\tlet l:tmux_end = \"\\<Esc>\\\\\"\n\tlet l:parsed = substitute(a:string, \"\\<Esc>\", \"\\<Esc>\\<Esc>\", 'g')\n\treturn l:tmux_begin.l:parsed.l:tmux_end\nendfunction\n\nif s:tmux\n\tlet s:start_insert = s:tmux_wrap(s:start_insert)\n\tlet s:start_replace = s:tmux_wrap(s:start_replace)\n\tlet s:end_insert = s:tmux_wrap(s:end_insert)\nendif\n\nlet &t_SI = s:start_insert\nif v:version > 704 || v:version == 704 && has('patch687')\n\tlet &t_SR = s:start_replace\nend\nlet &t_EI = s:end_insert\n\n\" Tmux specific settings\n\" ---\nif s:tmux\n\tset ttyfast\n\n\t\" Assigns some xterm(1)-style keys to escape sequences passed by tmux\n\t\" when 'xterm-keys' is set to 'on'.  Inspired by an example given by\n\t\" Chris Johnsen at https://stackoverflow.com/a/15471820\n\t\" Credits: Mark Oteiza\n\t\" Documentation: help:xterm-modifier-keys man:tmux(1)\n\texecute \"set <xUp>=\\e[1;*A\"\n\texecute \"set <xDown>=\\e[1;*B\"\n\texecute \"set <xRight>=\\e[1;*C\"\n\texecute \"set <xLeft>=\\e[1;*D\"\n\n\texecute \"set <xHome>=\\e[1;*H\"\n\texecute \"set <xEnd>=\\e[1;*F\"\n\n\texecute \"set <Insert>=\\e[2;*~\"\n\texecute \"set <Delete>=\\e[3;*~\"\n\texecute \"set <PageUp>=\\e[5;*~\"\n\texecute \"set <PageDown>=\\e[6;*~\"\n\n\texecute \"set <xF1>=\\e[1;*P\"\n\texecute \"set <xF2>=\\e[1;*Q\"\n\texecute \"set <xF3>=\\e[1;*R\"\n\texecute \"set <xF4>=\\e[1;*S\"\n\n\texecute \"set <F5>=\\e[15;*~\"\n\texecute \"set <F6>=\\e[17;*~\"\n\texecute \"set <F7>=\\e[18;*~\"\n\texecute \"set <F8>=\\e[19;*~\"\n\texecute \"set <F9>=\\e[20;*~\"\n\texecute \"set <F10>=\\e[21;*~\"\n\texecute \"set <F11>=\\e[23;*~\"\n\texecute \"set <F12>=\\e[24;*~\"\nendif\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/theme.vim",
    "content": "\" Theme\n\" ---\n\"\n\" Autoloads theme according to user selected colorschemes\n\nfunction! s:theme_init()\n\t\" Load cached colorscheme or hybrid by default\n\tlet l:default = 'hybrid'\n\tlet l:cache = s:theme_cache_file()\n\tif ! exists('g:colors_name')\n\t\tset background=dark\n\t\tlet l:scheme = filereadable(l:cache) ? readfile(l:cache)[0] : l:default\n\t\tsilent! execute 'colorscheme' l:scheme\n\tendif\nendfunction\n\nfunction! s:theme_autoload()\n\tif exists('g:colors_name')\n\t\tlet theme_path = $VIM_PATH . '/themes/' . g:colors_name . '.vim'\n\t\tif filereadable(theme_path)\n\t\t\texecute 'source' fnameescape(theme_path)\n\t\tendif\n\t\t\" Persist theme\n\t\tcall writefile([g:colors_name], s:theme_cache_file())\n\tendif\nendfunction\n\nfunction! s:theme_cache_file()\n\treturn $DATA_PATH . '/theme.txt'\nendfunction\n\nfunction! s:theme_cached_scheme(default)\n\tlet l:cache_file = s:theme_cache_file()\n\treturn filereadable(l:cache_file) ? readfile(l:cache_file)[0] : a:default\nendfunction\n\nfunction! s:theme_cleanup()\n\tif ! exists('g:colors_name')\n\t\treturn\n\tendif\n\thighlight clear\nendfunction\n\naugroup user_theme\n\tautocmd!\n\tautocmd ColorScheme * call s:theme_autoload()\n\tif has('patch-8.0.1781') || has('nvim-0.3.2')\n\t\tautocmd ColorSchemePre * call s:theme_cleanup()\n\tendif\naugroup END\n\ncall s:theme_init()\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "config/vimrc",
    "content": "\" https://github.com/rafi/vim-config\n\" Created By: Rafael Bodill\n\n\" Runtime and Plugins\n\" ===\n\nif &compatible\n\t\" vint: -ProhibitSetNoCompatible\n\tset nocompatible\n\t\" vint: +ProhibitSetNoCompatible\nendif\n\n\" Set main configuration directory as parent directory\nlet $VIM_PATH = fnamemodify(resolve(expand('<sfile>:p')), ':h:h')\n\nfunction! s:source_file(path, ...)\n\t\" Source user configuration files with set/global sensitivity\n\tlet use_global = get(a:000, 0, ! has('vim_starting'))\n\tlet abspath = resolve($VIM_PATH . '/' . a:path)\n\tif ! use_global\n\t\texecute 'source' fnameescape(abspath)\n\t\treturn\n\tendif\n\n\tlet tempfile = tempname()\n\tlet content = map(readfile(abspath),\n\t\t\\ \"substitute(v:val, '^\\\\W*\\\\zsset\\\\ze\\\\W', 'setglobal', '')\")\n\ttry\n\t\tcall writefile(content, tempfile)\n\t\texecute printf('source %s', fnameescape(tempfile))\n\tfinally\n\t\tif filereadable(tempfile)\n\t\t\tcall delete(tempfile)\n\t\tendif\n\tendtry\nendfunction\n\n\" Initialize startup settings\nif has('vim_starting')\n\t\" Use spacebar as leader and ; as secondary-leader\n\t\" Required before loading plugins!\n\t\" let g:mapleader=\"\\<Space>\"\n\tlet g:mapleader=\",\"\n\tlet g:maplocalleader=';'\n\n\t\" Release keymappings prefixes, evict entirely for use of plug-ins.\n\tnnoremap <Space>  <Nop>\n\txnoremap <Space>  <Nop>\n\tnnoremap ,        <Nop>\n\txnoremap ,        <Nop>\n\tnnoremap ;        <Nop>\n\txnoremap ;        <Nop>\n\n\t\" Vim only, Linux terminal settings\n\tif ! has('nvim') && ! has('gui_running') && ! has('win32') && ! has('win64')\n\t\tcall s:source_file('config/terminal.vim')\n\tendif\nendif\n\n\" Load user scripts with confidential information\n\" or pre-settings like g:elite_mode\nif filereadable($VIM_PATH . '/.vault.vim')\n\tcall s:source_file('.vault.vim')\nendif\n\n\" Initialize plugin-manager and load main config files\ncall s:source_file('config/init.vim')\ncall s:source_file('config/plugins/all.vim')\n\n\" Initialize all my configurations\ncall s:source_file('config/general.vim')\ncall s:source_file('config/filetype.vim')\ncall s:source_file('config/mappings.vim')\n\" call s:source_file('config/theme.vim')\ncolorscheme hybrid_reverse  \" change to your favorite theme\n\n\" Load user custom local settings\nif filereadable($VIM_PATH . '/config/local.vim')\n\tcall s:source_file('config/local.vim')\nendif\n\nif get(g:, 'statusline_plugin_enable', 1)\n\tcall s:source_file('config/statusline.vim')\nendif\nif get(g:, 'tabline_plugin_enable', 1)\n\tcall s:source_file('config/tabline.vim')\nendif\n\nset secure\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "filetype.vim",
    "content": "\" File-type Detection\n\" ===\n\nif exists('did_load_filetypes')\n\tfinish\nendif\n\naugroup filetypedetect \"{{{\n\n\tautocmd BufNewFile,BufRead */.config/git/users/* setfiletype gitconfig\n\n\tautocmd BufNewFile,BufRead */playbooks/*.{yml,yaml} setfiletype yaml.ansible\n\tautocmd BufNewFile,BufRead */inventory/*            setfiletype ansible_hosts\n\t\" autocmd BufNewFile,BufRead */templates/*.{yaml,tpl} setfiletype yaml.gotexttmpl\n\n\tautocmd BufNewFile,BufRead *.hcl                setfiletype terraform\n\tautocmd BufNewFile,BufRead yarn.lock            setfiletype yaml\n\tautocmd BufNewFile,BufRead */.kube/config       setfiletype yaml\n\tautocmd BufNewFile,BufRead *.postman_collection setfiletype json\n\tautocmd BufNewFile,BufRead .tern-{project,port} setfiletype json\n\tautocmd BufNewFile,BufRead *.js.map             setfiletype json\n\tautocmd BufNewFile,BufRead .jsbeautifyrc        setfiletype json\n\tautocmd BufNewFile,BufRead .eslintrc            setfiletype json\n\tautocmd BufNewFile,BufRead .jscsrc              setfiletype json\n\tautocmd BufNewFile,BufRead .babelrc             setfiletype json\n\tautocmd BufNewFile,BufRead .watchmanconfig      setfiletype json\n\tautocmd BufNewFile,BufRead .buckconfig          setfiletype toml\n\tautocmd BufNewFile,BufRead .flowconfig          setfiletype ini\n\tautocmd BufNewFile,BufRead Jenkinsfile*         setfiletype groovy\n\tautocmd BufNewFile,BufRead Tmuxfile,tmux/config setfiletype tmux\n\tautocmd BufNewFile,BufRead Brewfile             setfiletype ruby\n\tautocmd BufNewFile,BufRead *.recipe             setfiletype python\n\tautocmd BufNewFile,BufRead *.jce                setfiletype jce\n\naugroup END\n\" }}}\n\n\" vim: set foldmethod=marker ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "init.vim",
    "content": "execute 'source' fnamemodify(expand('<sfile>'), ':h').'/config/vimrc'\n"
  },
  {
    "path": "plugin/actionmenu.vim",
    "content": "\" actionmenu\n\" ---\n\" Context-aware menu at your cursor\n\" Forked from: https://github.com/kizza/actionmenu.nvim\n\nif exists('g:loaded_actionmenu') || ! has('nvim')\n\tfinish\nendif\nlet g:loaded_actionmenu = 1\n\ncommand! -nargs=0 ActionMenu call s:actionmenu()\n\nfunction! s:actionmenu()\n\tlet l:cword = expand('<cword>')\n\tcall actionmenu#open(s:build_menu(l:cword), function('s:apply_action'))\nendfunction\n\nfunction! s:apply_action(selected)\n\tif ! empty(get(a:selected, 'user_data'))\n\t\texecute a:selected['user_data']\n\tendif\nendfunction\n\nfunction! s:build_menu(cword)\n\tlet l:items = []\n\tlet l:filetype = &filetype\n\n\tif empty(a:cword)\n\n\t\t\" Blank operations\n\t\tlet l:items = extend(l:items, [\n\t\t\t\\ { 'word': 'Select all', 'user_data': 'normal! ggVG' },\n\t\t\t\\ { 'word': '-------' },\n\t\t\t\\ ])\n\n\telse\n\n\t\tif l:filetype ==# 'python' || l:filetype ==# 'go'\n\t\t\tlet l:items = extend(l:items, [\n\t\t\t\t\\ { 'word': 'Declaration', 'user_data': 'LspDeclaration' },\n\t\t\t\t\\ { 'word': 'Definition', 'user_data': 'LspDefinition' },\n\t\t\t\t\\ { 'word': 'References…', 'user_data': 'LspReferences' },\n\t\t\t\t\\ { 'word': 'Implementation', 'user_data': 'LspImplementation' },\n\t\t\t\t\\ { 'word': 'TypeDefinition', 'user_data': 'LspTypeDefinition' },\n\t\t\t\t\\ { 'word': 'TypeHierarchy', 'user_data': 'LspTypeHierarchy' },\n\t\t\t\t\\ { 'word': '--------' },\n\t\t\t\t\\ ])\n\t\tendif\n\n\t\t\" Word operations\n\t\tlet l:items = extend(l:items, [\n\t\t\t\\ { 'word': 'Find symbol…', 'user_data': 'DeniteCursorWord tag:include -no-start-filter' },\n\t\t\t\\ { 'word': 'Paste from…', 'user_data': 'Denite neoyank -default-action=replace -no-start-filter' },\n\t\t\t\\ { 'word': 'Grep…', 'user_data': 'DeniteCursorWord grep -no-start-filter' },\n\t\t\t\\ { 'word': 'Jump…', 'user_data': 'AnyJump' },\n\t\t\t\\ { 'word': '-------' },\n\t\t\t\\ ])\n\tendif\n\n\t\" File operations\n\tlet l:items = extend(l:items, [\n\t\t\\ { 'word': 'Diagnostics', 'user_data': 'LspDocumentDiagnostics' },\n\t\t\\ { 'word': 'Bookmark', 'user_data': 'normal mm' },\n\t\t\\ { 'word': 'Git diff', 'user_data': 'Gina compare' },\n\t\t\\ { 'word': 'Unsaved diff', 'user_data': 'DiffOrig' },\n\t\t\\ { 'word': 'Open in browser', 'user_data': 'Gina browse' },\n\t\t\\ ])\n\n\treturn l:items\nendfunction\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "plugin/devhelp.vim",
    "content": "\" Open Dash or Zeal on words under cursor\n\" ---\n\"\n\" Behaviors:\n\" - Map `gK` for selected filetypes\n\nif exists('g:loaded_devhelp') && g:loaded_devhelp\n\tfinish\nendif\nlet g:loaded_devhelp = 1\n\naugroup plugin_devhelp\n\tautocmd!\n\n\tautocmd FileType yaml.ansible,php,css,less,html,markdown,vim,sql,ruby\n\t\t\\ nmap <silent><buffer> gK :call <SID>show_help(expand('<cword>'))<CR>\n\n\tautocmd FileType javascript,javascriptreact,conf\n\t\t\\ nmap <silent><buffer> gK :call <SID>show_help(expand('<cword>'), '')<CR>\n\naugroup END\n\nfunction! s:show_help(word, ...)\n\t\" Open Dash/Zeal on word\n\t\" Arguments: word, filetype\n\tlet l:word = a:word\n\tlet l:lang = a:0 > 0 && a:1 ? a:1 : &filetype\n\tlet l:expr = split(l:lang, '\\.')[-1] . ':' . l:word\n\n\tif executable('/Applications/Dash.app/Contents/MacOS/Dash')\n\t\texecute '!open -g dash://' . l:expr\n\telseif executable('zeal')\n\t\texecute '!zeal --query \"' . l:expr . '\"'\n\telse\n\t\techohl ErrorMsg\n\t\techomsg 'Unable to find Dash or Zeal, install one of these.'\n\t\techohl None\n\tendif\n\tredraw!\nendfunction\n"
  },
  {
    "path": "plugin/difftools.vim",
    "content": "\" Diff Unsaved Changes\n\" ---\n\"\n\" Commands:\n\" - DiffOrig: Show diff of unsaved changes\n\nif exists('g:loaded_difftools')\n\tfinish\nendif\nlet g:loaded_difftools = 1\n\naugroup plugin_difftools\n\tautocmd!\n\tautocmd BufWinLeave __diff call s:close_diff()\naugroup END\n\nfunction! s:open_diff()\n\t\" Open diff window and start comparison\n\tlet l:bnr = bufnr('%')\n\tcall setwinvar(winnr(), 'diff_origin', l:bnr)\n\tvertical new __diff\n\tlet l:diff_bnr = bufnr('%')\n\tnnoremap <buffer><silent> q :quit<CR>\n\tsetlocal buftype=nofile bufhidden=wipe\n\tr ++edit #\n\t0d_\n\tdiffthis\n\tsetlocal readonly\n\twincmd p\n\tlet b:diff_bnr = l:diff_bnr\n\tnnoremap <buffer><silent> q :execute bufwinnr(b:diff_bnr) . 'q'<CR>\n\tdiffthis\nendfunction\n\nfunction! s:close_diff()\n\t\" Close diff window, switch to original window and disable diff\n\t\" Credits: https://github.com/chemzqm/vim-easygit\n\tlet wnr = +bufwinnr(+expand('<abuf>'))\n\tlet val = getwinvar(wnr, 'diff_origin')\n\tif ! len(val) | return | endif\n\tfor i in range(1, winnr('$'))\n\t\tif i == wnr | continue | endif\n\t\tif len(getwinvar(i, 'diff_origin'))\n\t\t\treturn\n\t\tendif\n\tendfor\n\tlet wnr = bufwinnr(val)\n\tif wnr > 0\n\t\texecute wnr . 'wincmd w'\n\t\tdiffoff\n\tendif\nendfunction\n\n\" Display diff of unsaved changes\ncommand! -nargs=0 DiffOrig call s:open_diff()\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "plugin/filesystem.vim",
    "content": "\" Helpers for dealing with the filesystem\n\" ---\n\"\n\" Behaviors:\n\" - Before writing file ensure directories exist\n\"\n\" Commands:\n\" - GitOpenDirty: Open all dirty files in repository\n\nif exists('g:loaded_filesystemplugin')\n\tfinish\nendif\nlet g:loaded_filesystemplugin = 1\n\naugroup plugin_filesystem\n\tautocmd!\n\tautocmd BufWritePre * call s:mkdir(expand('<afile>:p:h'), v:cmdbang)\naugroup END\n\nfunction! s:mkdir(dir, force)\n\t\" Credits: https://github.com/Shougo/shougo-s-github\n\tif ! isdirectory(a:dir) && empty(&l:buftype) &&\n\t\t\t\\ (a:force || input(printf('\"%s\" does not exist. Create? [y/N]',\n\t\t\t\\              a:dir)) =~? '^y\\%[es]$')\n\t\tcall mkdir(a:dir, 'p')\n\tendif\nendfunction\n\ncommand! -nargs=0 GitOpenDirty call s:git_open_dirty()\n\n\" Open a split for each dirty file in git\nfunction! s:git_open_dirty()\n\tsilent only \" Close all windows, unless they're modified\n\tlet status =\n\t\t\\ system('git status -s | grep \"^ \\?\\(M\\|A\\|UU\\)\" | sed \"s/^.\\{3\\}//\"')\n\tlet filenames = split(status, \"\\n\")\n\tif ! empty(filenames)\n\t\texec 'edit ' . filenames[0]\n\t\tfor filename in filenames[1:]\n\t\t\texec 'sp ' . filename\n\t\tendfor\n\tendif\nendfunction\n"
  },
  {
    "path": "plugin/jumpfile.vim",
    "content": "\" Jump entire buffers from jumplist\n\" ---\n\"\n\" Commands:\n\" - JumpBuffer: Finds next (1) or previous (-1) file in jumplist\n\nif exists('g:loaded_jumpbuffer')\n\tfinish\nendif\nlet g:loaded_jumpfiles = 1\n\n\" direction - 1=forward, -1=backward\n\" Credits: https://superuser.com/a/1455940/252171\nfunction! JumpBuffer(direction)\n\tlet [ jumplist, curjump ] = getjumplist()\n\tlet jumpcmdstr = a:direction > 0 ? '<C-o>' : '<C-i>'\n\tlet jumpcmdchr = a:direction > 0 ? \"\\<C-o>\" : \"\\<C-i>\"\n\tlet searchrange = a:direction > 0\n\t\t\\ ? range(curjump - 1, 0, -1)\n\t\t\\ : range(curjump + 1, len(jumplist))\n\n\tfor i in searchrange\n\t\tlet l:nr = jumplist[i]['bufnr']\n\t\tif l:nr != bufnr('%') && bufname(l:nr) !~? \"^\\a\\+://\"\n\t\t\tlet n = abs((i - curjump) * a:direction)\n\t\t\techo 'Executing' jumpcmdstr n . ' times'\n\t\t\texecute 'normal! ' . n . jumpcmdchr\n\t\t\tbreak\n\t\tendif\n\tendfor\nendfunction\n"
  },
  {
    "path": "plugin/sessions.vim",
    "content": "\" Session Management\n\" ---\n\"\n\" Behaviors:\n\" - Save active session when quitting vim completely\n\"\n\" Commands:\n\" - SessionSave [name]: Create and activate new session\n\" - SessionLoad [name]: Clear buffers and load selected session\n\" - SessionClose:       Save session and clear all buffers\n\" - SessionDetach:      Stop persisting session, leave buffers open\n\"\n\" If [name] is empty, the current working-directory is used.\n\"\n\" Options:\n\" - g:session_directory defaults to DATA_PATH/session (see config/vimrc)\n\nif exists('g:loaded_sessionsplugin')\n\tfinish\nendif\nlet g:loaded_sessionsplugin = 1\n\n\" Options\n\" ---\n\nlet g:session_directory = get(g:, 'session_directory', $DATA_PATH . '/session')\n\n\" Commands\n\" ---\n\n\" Save and persist session\ncommand! -nargs=? -complete=customlist,<SID>session_list SessionSave\n\t\\ call s:session_save(<q-args>)\n\n\" Load and persist session\ncommand! -nargs=? -complete=customlist,<SID>session_list SessionLoad\n\t\\ call s:session_load(<q-args>)\n\n\" Close session, but leave buffers opened\ncommand! SessionDetach call s:session_detach()\n\n\" Close session and all buffers\ncommand! SessionClose call s:session_close()\n\n\" Save session on quit if one is loaded\naugroup plugin_sessions\n\tautocmd!\n\n\t\" If session is loaded, write session file on quit\n\tautocmd VimLeavePre * call s:session_save_current()\n\n\t\" autocmd SessionLoadPost * ++once unsilent\n\t\"\t\\ echomsg 'Loaded \"' . fnamemodify(v:this_session, ':t:r') . '\" session'\naugroup END\n\n\" Private functions\n\" ---\n\nfunction! s:session_save(name)\n\tif ! isdirectory(g:session_directory)\n\t\tcall mkdir(g:session_directory, 'p')\n\tendif\n\tlet file_name = empty(a:name) ? s:project_name() : a:name\n\tlet file_path = g:session_directory . '/' . file_name . '.vim'\n\texecute 'mksession! ' . fnameescape(file_path)\n\tlet v:this_session = file_path\n\n\techohl MoreMsg\n\techo 'Session `' . file_name . '` is now persistent'\n\techohl None\nendfunction\n\nfunction! s:session_load(name)\n\tcall s:session_save_current()\n\n\tlet file_name = empty(a:name) ? s:project_name() : a:name\n\tlet file_path = g:session_directory . '/' . file_name . '.vim'\n\tif filereadable(file_path)\n\t\tcall s:buffers_wipeout()\n\t\texecute 'silent source ' . file_path\n\telse\n\t\techohl ErrorMsg\n\t\techomsg 'The session \"' . file_path . '\" doesn''t exist'\n\t\techohl None\n\tendif\nendfunction\n\nfunction! s:session_close()\n\tif ! empty(v:this_session) && ! exists('g:SessionLoad')\n\t\tcall s:session_save_current()\n\t\tcall s:session_detach()\n\t\tcall s:buffers_wipeout()\n\tendif\nendfunction\n\nfunction! s:session_save_current()\n\tif ! empty(v:this_session) && ! exists('g:SessionLoad')\n\t\texecute 'mksession! ' . fnameescape(v:this_session)\n\tendif\nendfunction\n\nfunction! s:session_detach()\n\tif ! empty(v:this_session) && ! exists('g:SessionLoad')\n\t\tlet v:this_session = ''\n\t\tredrawtabline\n\t\tredrawstatus\n\tendif\nendfunction\n\nfunction! s:buffers_wipeout()\n\tnoautocmd silent! %bwipeout!\nendfunction\n\nfunction! s:session_list(A, C, P)\n\tlet glob_pattern = g:session_directory . '/' . fnameescape(a:A) . '*.vim'\n\treturn map(split(glob(glob_pattern), '\\n'), \"fnamemodify(v:val, ':t:r')\")\nendfunction\n\nfunction! s:project_name()\n\tlet l:cwd = resolve(getcwd())\n\tlet l:cwd = substitute(l:cwd, '^' . $HOME . '/', '', '')\n\tlet l:cwd = fnamemodify(l:cwd, ':p:gs?/?_?')\n\tlet l:cwd = substitute(l:cwd, '^\\.', '', '')\n\treturn l:cwd\nendfunction\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "plugin/unixhelp.vim",
    "content": "\" Unix Help\n\" ---\n\" Open man pages for gitconfig, tmux, and sh files\n\"\n\" Behaviors:\n\" - If one of the supported filetypes is loaded, map K to open help window\n\"\n\" Options:\n\" - g:unixhelp_open_with_tmux enable to use tmux splits for help windows\n\nif exists('g:loaded_unixhelp')\n\tfinish\nendif\nlet g:loaded_unixhelp = 1\n\nlet g:unixhelp_open_with_tmux = get(g:, 'unixhelp_open_with_tmux', 0)\n\naugroup plugin_unixhelp\n\tautocmd!\n\tautocmd FileType gitconfig,tmux nnoremap <silent><buffer> K\n\t\t\\ :<C-u>call <SID>open_man(&filetype, expand('<cword>'))<CR>\naugroup END\n\nfunction! s:open_man(ft, search_word)\n\tlet l:mapping = {\n\t\t\\   'gitconfig': 'git-config',\n\t\t\\ }\n\n\tlet l:ft = a:ft\n\tif has_key(l:mapping, l:ft)\n\t\tlet l:ft = l:mapping[l:ft]\n\tendif\n\n\tif empty(l:ft)\n\t\techoerr 'Sorry, no help supported for \"' . l:ft . '\" filetypes.'\n\t\treturn\n\tendif\n\n\tlet l:cmd = 'man ' . l:ft\n\tif g:unixhelp_open_with_tmux && ! empty('$TMUX')\n\t\tcall s:man_tmux(l:cmd, a:search_word)\n\telse\n\t\tcall s:man_preview(l:cmd, a:search_word)\n\tendif\nendfunction\n\n\" Open file-explorer split with tmux\nfunction! s:man_tmux(str, word)\n\tif empty('$TMUX')\n\t\treturn\n\tendif\n\tlet l:cmd = 'MANPAGER=\"less --pattern='.shellescape(a:word, 1).'\" '.a:str\n\tsilent execute '!tmux split-window -p 30 '.shellescape(l:cmd, 1)\nendfunction\n\nfunction! s:man_preview(str, word)\n\tsilent! wincmd P\n\tif ! &previewwindow\n\t\tnoautocmd execute 'bo' &previewheight 'new'\n\t\tset previewwindow\n\t\tsilent! wincmd P\n\telse\n\t\texecute 'resize' &previewheight\n\tendif\n\tsetlocal buftype=nofile bufhidden=delete noswapfile\n\tsetlocal noreadonly modifiable\n\texecute '%delete_'\n\n\tsilent execute '%!MANPAGER=cat '.a:str\n\n\tsetlocal readonly filetype=man\n\tnnoremap <silent><buffer> q :<C-u>set nopvw<CR>:<C-u>bdelete!<CR>\n\t\" normal! gg\n\t\" silent! execute 'normal! /'.a:word.\"\\<CR>\"\n\t\" let @/ = a:word\n\t\" noautocmd wincmd p\n\tcall feedkeys('/'.a:word.\"\\<CR>\", 'nt')\nendfunction\n"
  },
  {
    "path": "plugin/whitespace.vim",
    "content": "\" Whitespace utilities\n\" ---\n\"\n\" Behaviors:\n\" - Display special highlight for trailing whitespace and space preceding tabs\n\"\n\" Commands:\n\" - WhitespaceErase: Strips trailing whitespace from buffer\n\" - WhitespaceNext: Cursor jump to next whitespace issue\n\" - WhitespacePrev: Cursor jump to next whitespace issue\n\"\n\" Options:\n\" - g:whitespace_filetype_blacklist override default whitespace blacklist\n\" - g:whitespace_characters overrides default whitespace chars (default: \\s)\n\" - g:whitespace_pattern overrides pattern (default: chars . \\+$)\n\" - g:whitespace_pattern_normal overrides normal mode pattern\n\" - g:whitespace_pattern_insert overrides insert mode pattern\n\nif exists('g:loaded_pluginwhitespace')\n\tfinish\nendif\nlet g:loaded_pluginwhitespace = 1\n\n\" Remove end of line white space\ncommand! -range=% WhitespaceErase call <SID>WhitespaceErase(<line1>, <line2>)\n\n\" Search for trailing white space forwards\ncommand! -range=% WhitespaceNext call <SID>WhitespaceJump(1, <line1>, <line2>)\n\n\" Search for trailing white space backwards\ncommand! -range=% WhitespacePrev call <SID>WhitespaceJump(-1, <line1>, <line2>)\n\n\" Whitespace events\nif v:version >= 702\n\taugroup plugin_whitespace\n\t\tautocmd!\n\t\tautocmd InsertEnter * call <SID>ToggleWhitespace('i')\n\t\tautocmd InsertLeave * call <SID>ToggleWhitespace('n')\n\taugroup END\nendif\n\nlet s:ws_chars = get(g:, 'whitespace_characters', '\\s')\nlet s:ws_pattern = get(g:, 'whitespace_pattern', s:ws_chars . '\\+$')\nlet s:normal_pattern = get(g:, 'whitespace_pattern_normal',\n\t\\ s:ws_pattern . '\\| \\+\\ze\\t')\nlet s:insert_pattern = get(g:, 'whitespace_pattern_insert',\n\t\\ s:ws_chars . '\\+\\%#\\@<!$')\n\nlet s:blacklist = get(g:, 'whitespace_filetype_blacklist', [\n\t\\ 'diff', 'git', 'gitcommit', 'help', 'qf', 'denite', 'defx' ])\n\nfunction! s:ToggleWhitespace(mode)\n\tif &buftype =~? 'nofile\\|help' || index(s:blacklist, &filetype) > -1\n\t\treturn\n\telseif a:mode ==? ''\n\t\tcall matchdelete(w:whitespace_match_id)\n\t\treturn\n\telse\n\t\tlet l:pattern = (a:mode ==# 'i') ? s:insert_pattern : s:normal_pattern\n\t\tif exists('w:whitespace_match_id')\n\t\t\tcall matchdelete(w:whitespace_match_id)\n\t\t\tcall matchadd('ExtraWhitespace', l:pattern, 10, w:whitespace_match_id)\n\t\telse\n\t\t\thighlight! link ExtraWhitespace SpellBad\n\t\t\tlet w:whitespace_match_id = matchadd('ExtraWhitespace', l:pattern)\n\t\tendif\n\tendif\nendfunction\n\nfunction! s:WhitespaceErase(line1, line2)\n\tlet l:save_cursor = getpos('.')\n\tsilent! execute ':' . a:line1 . ',' . a:line2 . 's/' . s:ws_pattern . '//'\n\tcall setpos('.', l:save_cursor)\nendfunction\n\n\" Search for trailing whitespace\nfunction! s:WhitespaceJump(direction, from, to)\n\tlet l:opts = 'wz'\n\tlet l:until = a:to\n\tif a:direction < 1\n\t\tlet l:opts .= 'b'\n\t\tlet l:until = a:from\n\tendif\n\n\t\" Full file, allow wrapping\n\tif a:from == 1 && a:to == line('$')\n\t\tlet l:until = 0\n\tendif\n\n\t\" Go to pattern\n\tlet l:found = search(s:normal_pattern, l:opts, l:until)\nendfunction\n\n\" vim: set ts=2 sw=2 tw=80 noet :\n"
  },
  {
    "path": "snippets/.gitignore",
    "content": ""
  },
  {
    "path": "snippets/go.snip",
    "content": "snippet     todo\nabbr        # todo comment\n    // TODO: <`strftime(\"%Y-%m-%d\")` `$USER`> ${0}\n"
  },
  {
    "path": "snippets/javascript.snip",
    "content": "snippet cs\n\tvar cx = React.addons.classSet;\nsnippet cdm\n\tcomponentDidMount: function() {\n\t\t${1}\n\t},\nsnippet cdup\n\tcomponentDidUpdate: function(prevProps, prevState) {\n\t\t${1}\n\t},\nsnippet cwm\n\tcomponentWillMount: function() {\n\t\t${1}\n\t},\nsnippet cwr\n\tcomponentWillReceiveProps: function(nextProps) {\n\t\t${1}\n\t},\nsnippet cwun\n\tcomponentWillUnmount: function() {\n\t\t${1}\n\t},\nsnippet cwu\n\tcomponentWillUpdate: function(nextProps, nextState) {\n\t\t${1}\n\t},\nsnippet cx\n\tcx({\n\t\t${1}: ${2}\n\t});\nsnippet fup\n\tforceUpdate(${1:callback});\nsnippet gdp\n\tgetDefaultProps: function() {\n\t\treturn {\n\t\t\t${1}\n\t\t};\n\t},\nsnippet gis\n\tgetInitialState: function() {\n\t\treturn {\n\t\t\t${1}: ${2}\n\t\t};\n\t},\nsnippet ism\n\tisMounted()\nsnippet jsx\n\t/**\n\t * @jsx React.DOM\n\t */\n\n\tvar React = require('react');\n\n\tvar ${1:ClassName} = React.createClass({\n\n\t\trender: function() {\n\t\t\treturn (\n\t\t\t\t${0:<div />}\n\t\t\t);\n\t\t}\n\n\t});\n\n\tmodule.exports = $1;\nsnippet pt\n\tpropTypes: {\n\t\t${1}: React.PropTypes.${2:string}\n\t},\nsnippet rcc\n\tvar ${1:ClassName} = React.createClass({\n\n\t\trender: function() {\n\t\t\treturn (\n\t\t\t\t${0:<div />}\n\t\t\t);\n\t\t}\n\n\t});\nsnippet ren\n\trender: function() {\n\t\treturn (\n\t\t\t${1:<div />}\n\t\t);\n\t}\nsnippet sst\n\tsetState({\n\t\t${1}: ${2}\n\t});\nsnippet scu\n\tshouldComponentUpdate: function(nextProps, nextState) {\n\t\t${1}\n\t},\nsnippet props\n\tthis.props.${1}\nsnippet state\n\tthis.state.${1}\nsnippet trp\n\ttransferPropsTo(${1});\n"
  },
  {
    "path": "snippets/python.snip",
    "content": "snippet     ip\nabbr        import ipdb\n    import ipdb; ipdb.set_trace()\n\nsnippet     pp\nabbr        import pprint..\n    import pprint; pprint.pprint(${1})\n\nsnippet     pprint\nabbr        import pprint..\n    import pprint; pprint.pprint(${1})\n\nsnippet     tr\nabbr        import traceback..\n    import traceback; traceback.print_exc()\n\nsnippet     nose\nabbr        from nose\n    from nose.tools import set_trace; set_trace()\n\nsnippet     todo\nabbr        # todo comment\n    # TODO: <`strftime(\"%Y-%m-%d\")` `$USER`> # ${0}\n"
  },
  {
    "path": "themes/hybrid.vim",
    "content": "\n\" hybrid custom\n\" ===\n\n\" gVim Appearance {{{\n\" ---\nif has('gui_running')\n\tset guifont=PragmataPro:h16\n\tset guioptions=Mc\n\t\" set noantialias\nendif\n\" }}}\n\n\" Terminal colors {{{\n\" ---\nlet g:terminal_color_0 = '#2a2a2a'\nlet g:terminal_color_1 = '#d370a3'\nlet g:terminal_color_2 = '#6d9e3f'\nlet g:terminal_color_3 = '#b58858'\nlet g:terminal_color_4 = '#6095c5'\nlet g:terminal_color_5 = '#ac7bde'\nlet g:terminal_color_6 = '#3ba275'\nlet g:terminal_color_7 = '#ffffff'\nlet g:terminal_color_8 = '#686868'\nlet g:terminal_color_9 = '#ffa7da'\nlet g:terminal_color_10 = '#a3d572'\nlet g:terminal_color_11 = '#efbd8b'\nlet g:terminal_color_12 = '#98cbfe'\nlet g:terminal_color_13 = '#e5b0ff'\nlet g:terminal_color_14 = '#75daa9'\nlet g:terminal_color_15 = '#cfcfcf'\n\" }}}\n\n\" Tabline {{{\n\" ---\n\" TabLineFill: Tab pages line, where there are no labels\nhi TabLineFill ctermfg=234 ctermbg=236 guifg=#1C1C1C guibg=#303030 cterm=NONE gui=NONE\n\" TabLine: Not-active tab page label\nhi TabLine     ctermfg=243 ctermbg=236 guifg=#767676 guibg=#303030 cterm=NONE gui=NONE\n\" TabLineSel: Active tab page label\nhi TabLineSel  ctermfg=241 ctermbg=234 guifg=#626262 guibg=#1C1C1C cterm=NONE gui=NONE\n\" Custom\nhighlight TabLineSelShade  ctermfg=235 ctermbg=234 guifg=#262626 guibg=#1C1C1C\nhighlight TabLineAlt       ctermfg=252 ctermbg=238 guifg=#D0D0D0 guibg=#444444\nhighlight TabLineAltShade  ctermfg=238 ctermbg=236 guifg=#444444 guibg=#303030\n\" }}}\n\n\" Highlights: Statusline {{{\nhighlight StatusLine   ctermfg=236 ctermbg=248 guifg=#30302c guibg=#a8a897 cterm=reverse gui=reverse\nhighlight StatusLineNC ctermfg=236 ctermbg=242 guifg=#30302c guibg=#666656 cterm=reverse gui=reverse\n\n\" Filepath color\nhighlight User1 guifg=#D7D7BC guibg=#30302c ctermfg=251 ctermbg=236\n\" Line and column information\nhighlight User2 guifg=#a8a897 guibg=#4e4e43 ctermfg=248 ctermbg=239\n\" Line and column corner arrow\nhighlight User3 guifg=#4e4e43 guibg=#30302c ctermfg=239 ctermbg=236\n\" Buffer # symbol and whitespace or syntax errors\nhighlight User4 guifg=#666656 guibg=#30302c ctermfg=242 ctermbg=236\n\" Write symbol\nhighlight User6 guifg=#cf6a4c guibg=#30302c ctermfg=167 ctermbg=236\n\" Paste symbol\nhighlight User7 guifg=#99ad6a guibg=#30302c ctermfg=107 ctermbg=236\n\" Syntax and whitespace\nhighlight User8 guifg=#ffb964 guibg=#30302c ctermfg=215 ctermbg=236\n\" }}}\n\n\" Highlights: General GUI {{{\n\" ---\n\" :h slow-terminal  \" gui=NONE guifg=NONE\nhighlight NonText cterm=NONE ctermfg=NONE\nhighlight! link jsFutureKeys PreProc\nhighlight! WarningMsg  ctermfg=100 guifg=#CCC566\nhighlight! link QuickFixLine WildMenu\nhighlight! link lspReference Visual\n\n\" if has('nvim') || has('patch-7.4.2218')\n\" \thighlight EndOfBuffer gui=NONE guifg=#303030\n\" endif\n\nif has('nvim')\n\thighlight TermCursor    gui=NONE guibg=#cc22a0\n\thighlight TermCursorNC  gui=NONE guibg=#666666\n\t\" highlight NormalNC      gui=NONE guibg=#2c2c2c guifg=#bfbfbf\nendif\n\nhighlight! link vimFunc Function\nhighlight! link vimFunction Function\nhighlight! link vimUserFunc PreProc\n\nhighlight! link htmlBold String\nhighlight! link htmlItalic Type\nhighlight! link markdownH1 Title\nhighlight! link htmlH1 markdownH1\nhighlight! link htmlH2 markdownH1\nhighlight! link htmlH3 markdownH1\nhighlight! link htmlH4 markdownH1\nhighlight! link htmlH5 markdownH1\nhighlight! link htmlH6 markdownH1\nhighlight! link htmlSpecialChar SpecialChar\nhighlight! link htmlTag Keyword\nhighlight! link htmlTagN Identifier\nhighlight! link htmlEndTag Statement\n\nhighlight! link VimwikiHeaderChar markdownHeadingDelimiter\nhighlight! link VimwikiHR Keyword\nhighlight! link VimwikiList markdownListMarker\n\nhi! link mkdBold htmlBold\nhi! link mkdItalic htmlItalic\n\" hi! link mkdString Keyword\n\" hi! link mkdCodeStart mkdCode\n\" hi! link mkdCodeEnd mkdCode\n\" hi! link mkdBlockquote Comment\n\" hi! link mkdListItem Keyword\n\" hi! link mkdListItemLine Normal\n\" hi! link mkdFootnotes mkdFootnote\n\" hi! link mkdLink markdownLinkText\n\" hi! link mkdURL markdownUrl\n\" hi! link mkdInlineURL mkdURL\n\" hi! link mkdID Identifier\n\" hi! link mkdLinkDef mkdLink\n\" hi! link mkdLinkDefTarget mkdURL\n\" hi! link mkdLinkTitle mkdInlineURL\n\" hi! link mkdDelimiter Keyword\n\n\" See: https://github.com/itchyny/vim-parenmatch\nlet g:parenmatch_highlight = 0\nhighlight! ParenMatch ctermbg=236 guibg=#494D2A cterm=underline gui=underline\n\n\" See: https://github.com/dominikduda/vim_current_word\nhighlight! CurrentWord ctermbg=236 guibg=#2D3C42 cterm=NONE gui=NONE\nhighlight! CurrentWordTwins ctermbg=235 guibg=#252A3D cterm=NONE gui=NONE\n\" highlight! CurrentWord ctermbg=60 guibg=#2D3C42 cterm=NONE gui=NONE\n\" highlight! CurrentWordTwins ctermbg=237 guibg=#2B2A22 cterm=NONE gui=NONE\n\n\" highlight! link MatchParen  Visual\n\" highlight! MatchParen  ctermfg=NONE guifg=NONE ctermbg=236 guibg=#2d3c42\n\" highlight! ParenMatch  ctermfg=NONE guifg=NONE ctermbg=236 guibg=#494d2A\n\n\" highlight! Error  term=NONE cterm=NONE\n\" highlight! link WarningMsg  Comment\n\" highlight! link pythonSpaceError  NONE\n\" highlight! link pythonIndentError NONE\n\" highlight! link mkdLineBreak      NONE\n\" }}}\n\n\" Plugin: Defx and plugins {{{\n\" ---\nhighlight def link Defx_filename_directory  Directory\n\nhighlight! Defx_git_Modified  ctermfg=1   guifg=#D370A3\nhighlight! Defx_git_Staged    ctermfg=10  guifg=#A3D572\nhighlight! Defx_git_Deleted   ctermfg=167 guifg=#fb4934\nhighlight def link Defx_git_Renamed   Title\nhighlight def link Defx_git_Unmerged  Label\nhighlight def link Defx_git_Untracked Comment\nhighlight def link Defx_git_Ignored   Comment\nhighlight def link Defx_git_Unknown   Comment\n\n\" }}}\n\n\" Plugin: Ale {{{\n\" ---\nhighlight! ALEErrorSign ctermfg=167 guifg=#fb4934\nhighlight! ALEWarningSign ctermfg=214 guifg=#fabd2f\nhighlight! ALEInfoSign ctermfg=109 guifg=#83a598\n\" }}}\n\n\" Plugin: Neomake icons {{{\n\" ---\n\" let g:neomake_error_sign = {'text': '✘', 'texthl': 'ErrorMsg'}\n\" let g:neomake_warning_sign = {'text': '✚', 'texthl': 'WarningSyntax'}\n\" let g:neomake_message_sign = {'text': '♯', 'texthl': 'NeomakeMessageSign'}\n\" let g:neomake_info_sign = {'text': '⋆', 'texthl': 'NeomakeInfoSign'}\n\" highlight! clear WarningSyntax\n\" highlight! WarningSyntax ctermfg=58 guifg=#7d7629\n\"}}}\n\n\" Plugin: vim-gitgutter {{{\n\" ---\nhighlight! GitGutterAdd ctermfg=22 guifg=#008500 ctermbg=234 guibg=#1c1c1c\nhighlight! GitGutterChange ctermfg=58 guifg=#808200 ctermbg=234 guibg=#1c1c1c\nhighlight! GitGutterDelete ctermfg=52 guifg=#800000 ctermbg=234 guibg=#1c1c1c\nhighlight! GitGutterChangeDelete ctermfg=52 guifg=#800000 ctermbg=234 guibg=#1c1c1c\n\" }}}\n\n\" Plugin: denite {{{\n\" ---\nhighlight! clear WildMenu\nhighlight! WildMenu ctermbg=97 guibg=#82395F\nhighlight! link deniteSelectedLine Statement\nhighlight! link deniteMatchedChar Function\nhighlight! link deniteMatchedRange Underlined\nhighlight! link deniteMode Comment\nhighlight! link deniteSource_QuickfixPosition qfLineNr\nhighlight! link deniteSource__LocationListPosition qfLineNr\nhighlight! link deniteSource__LocationListError Constant\nhighlight! link deniteSource__LocationListWarning PreProc\n\" }}}\n\n\" Plugin: vim-highlightedyank {{{\n\" ---\nhighlight! link HighlightedyankRegion DiffText\n\" }}}\n\n\" Plugin: vim-shot-f {{{\n\" ---\nhighlight! link ShotFGraph Number\nhighlight! link ShotFBlank ErrorMsg\n\" }}}\n\n\" Plugin: vim-signature {{{\nhighlight! SignatureMarkText    ctermfg=11 guifg=#756207 ctermbg=234 guibg=#1c1c1c\nhighlight! SignatureMarkerText  ctermfg=12 guifg=#4EA9D7 ctermbg=234 guibg=#1c1c1c\n\" }}}\n\n\" Plugin: vim-choosewin {{{\n\" ---\nlet g:choosewin_color_label = {\n\t\\ 'cterm': [  75, 233 ], 'gui': [ '#7f99cd', '#000000' ] }\nlet g:choosewin_color_label_current = {\n\t\\ 'cterm': [ 228, 233 ], 'gui': [ '#D7D17C', '#000000' ] }\nlet g:choosewin_color_other = {\n\t\\ 'cterm': [ 235, 235 ], 'gui': [ '#232323', '#000000' ] }\n\" }}}\n\n\" vim: set foldmethod=marker ts=2 sw=0 tw=80 noet :\n"
  },
  {
    "path": "themes/rafi-2015.vim",
    "content": "\n\" rafi-2015 - hybrid custom\n\" =========================\n\n\" gVim Appearance {{{\n\" ---------------------------------------------------------\nif has('gui_running')\n\tset guifont=PragmataPro:h17\n\tset noantialias\nendif\n\" }}}\n\n\" UI elements {{{\n\" ---------------------------------------------------------\nset showbreak=↪\nset fillchars=vert:│,fold:─\nset listchars=tab:\\⋮\\ ,extends:⟫,precedes:⟪,nbsp:.,trail:·\n\" }}}\n\n\" Tabline {{{\n\" ---------------------------------------------------------\nhi TabLine          ctermfg=236 ctermbg=243 guifg=#303030 guibg=#767676\nhi TabLineFill      ctermfg=236 guifg=#303030\nhi TabLineSel       ctermfg=241 ctermbg=234 guifg=#626262 guibg=#1C1C1C gui=NONE\nhi TabLineSelShade  ctermfg=235 ctermbg=234 guifg=#262626 guibg=#1C1C1C\nhi TabLineAlt       ctermfg=234 ctermbg=236 guifg=#1C1C1C guibg=#303030\nhi TabLineSel2      ctermfg=252 ctermbg=238 guifg=#D0D0D0 guibg=#444444\nhi TabLineSel2Shade ctermfg=238 ctermbg=236 guifg=#444444 guibg=#303030\n\nfunction! Tabline() abort \"{{{\n\tlet s:tabline =\n\t\t\\ '%#TabLineSel2# %{badge#project()} '.\n\t\t\\ '%#TabLineSel2Shade#⮀'.\n\t\t\\ '%#TabLine#  '\n\n\tlet nr = tabpagenr()\n\tfor i in range(tabpagenr('$'))\n\t\tif i + 1 == nr\n\t\t\tlet s:tabline .=\n\t\t\t\t\\ '%#TabLineSelShade#░%#TabLineSel#'.\n\t\t\t\t\\ '%'.(i+1).'T%{badge#label('.(i+1).', \"⮀\")} '.\n\t\t\t\t\\ '%#TabLineAlt#⮀ '\n\t\telse\n\t\t\tlet s:tabline .=\n\t\t\t\t\\ '%#TabLine# '.\n\t\t\t\t\\ '%'.(i+1).'T%{badge#label('.(i+1).', \"⮀\")} '.\n\t\t\t\t\\ ' '\n\t\tendif\n\tendfor\n\tlet s:tabline .=\n\t\t\\ '%#TabLineFill#%T%=%#TabLine#%{badge#session(\"[S]\")}'\n\treturn s:tabline\nendfunction \"}}}\n\nlet &tabline='%!Tabline()'\n\" }}}\n\n\" Statusline {{{\n\" ------------------------------------------=--------------------=------------\n\"               Gibberish                   | What da heck?      | Example\n\" ------------------------------------------+--------------------+------------\nlet s:stl =\" %7*%{&paste?'=':''}%*\"        \"| Paste symbol       | =\nlet s:stl.=\"%4*%{&ro?'':'#'}%*\"            \"| Modifiable symbol  | #\nlet s:stl.='%6*%{badge#mode()}'            \"| Readonly symbol    | \nlet s:stl.='%*%n'                          \"| Buffer number      | 3\nlet s:stl.='%6*%{badge#modified()}%0*'     \"| Write symbol       | +\nlet s:stl.=' %1*%{badge#filename()}%*'     \"| Relative supername | cor/app.js\nlet s:stl.=' %<'                           \"| Truncate here      |\nlet s:stl.='%( %{badge#branch()} %)'      \"| Git branch name    |  master\nlet s:stl.='%4*%(%{badge#trails()} %)'     \"| Space and indent   | trail34\nlet s:stl.='%(%{badge#syntax()} %)%*'      \"| syntax error/warn  | E:1W:1\nlet s:stl.='%='                            \"| Align to right     |\nlet s:stl.='%{badge#format()} %4*%*'      \"| File format        | unix \nlet s:stl.='%( %{&fenc} %)'                \"| File encoding      | utf-8\nlet s:stl.='%4*%*%( %{&ft} %)'            \"| File type          |  python\nlet s:stl.='%3*%2* %l/%2c%4p%% %*'        \"| Line and column    | 69:77/ 90%\n\" ------------------------------------------'--------------------'------------\n\n\" Non-active Statusline {{{\n\" ------------------------------------------+--------------------+------------\nlet s:stl_nc = \" %{&paste?'=':''}\"         \"| Paste symbol       | =\nlet s:stl_nc.= '%{badge#mode()}%n'         \"| Readonly & buffer  | 7\nlet s:stl_nc.= '%6*%{badge#modified()}%*'  \"| Write symbol       | +\nlet s:stl_nc.= ' %{badge#filename()}'      \"| Relative supername | src/main.py\nlet s:stl_nc.= '%='                        \"| Align to right     |\nlet s:stl_nc.= '%{&ft} '                   \"| File type          | python\n\" ------------------------------------------'--------------------'---------}}}\n\n\" Highlights: Statusline {{{\nhighlight StatusLine   ctermfg=236 ctermbg=248 guifg=#30302c guibg=#a8a897\nhighlight StatusLineNC ctermfg=236 ctermbg=242 guifg=#30302c guibg=#666656\n\n\" Filepath color\nhighlight User1 guifg=#D7D7BC guibg=#30302c ctermfg=251 ctermbg=236\n\" Line and column information\nhighlight User2 guifg=#a8a897 guibg=#4e4e43 ctermfg=248 ctermbg=239\n\" Line and column corner arrow\nhighlight User3 guifg=#4e4e43 guibg=#30302c ctermfg=239 ctermbg=236\n\" Buffer # symbol and whitespace or syntax errors\nhighlight User4 guifg=#666656 guibg=#30302c ctermfg=242 ctermbg=236\n\" Write symbol\nhighlight User6 guifg=#cf6a4c guibg=#30302c ctermfg=167 ctermbg=236\n\" Paste symbol\nhighlight User7 guifg=#99ad6a guibg=#30302c ctermfg=107 ctermbg=236\n\" Syntax and whitespace\nhighlight User8 guifg=#ffb964 guibg=#30302c ctermfg=215 ctermbg=236\n\" }}}\n\n\" Toggle Statusline {{{\naugroup statusline\n\tautocmd!\n\tautocmd WinEnter,FileType,BufWinEnter,BufReadPost * let &l:statusline = s:stl\n\tautocmd WinLeave * let &l:statusline = s:stl_nc\naugroup END \"}}}\n\n\" }}}\n\n\" Highlights: General GUI {{{\n\" ---------------------------------------------------------\nhighlight! Error  term=NONE cterm=NONE\nhighlight! link ExtraWhitespace  SpellBad\nhighlight! link WarningMsg  Comment\n\" }}}\n\n\" Highlights: Popup menu {{{\n\" ---------------------------------------------------------\n\"highlight Pmenu       ctermfg=245 ctermbg=235\n\"highlight PmenuSel    ctermfg=236 ctermbg=248\n\"highlight PmenuSbar   ctermbg=235\n\"highlight PmenuThumb  ctermbg=238\n\" }}}\n\n\" Highlights: Markdown {{{\n\" ---------------------------------------------------------\n\"highlight link yamlScalar  Normal\n\"highlight link htmlH1      Statement\n\"highlight htmlItalic  ctermfg=230 cterm=NONE term=NONE\n\" }}}\n\n\" Plugin: VimFiler icons {{{\n\" ---------------------------------------------------------\nlet g:vimfiler_tree_indentation = 1\nlet g:vimfiler_tree_leaf_icon = '┆'\nlet g:vimfiler_tree_opened_icon = '▼'\nlet g:vimfiler_tree_closed_icon = '▷'\nlet g:vimfiler_file_icon = ' '\nlet g:vimfiler_readonly_file_icon = '⭤'\nlet g:vimfiler_marked_file_icon = '✓'\n\"}}}\n\n\" Plugin: GitGutter icons {{{\n\" ---------------------------------------------------------\nlet g:gitgutter_sign_added = '▎'\nlet g:gitgutter_sign_modified = '▎'\nlet g:gitgutter_sign_removed = '▏'\nlet g:gitgutter_sign_removed_first_line = '▔'\nlet g:gitgutter_sign_modified_removed = '▋'\n\"}}}\n\n\" Plugin: Indent-Guides icons {{{\n\" ---------------------------------------------------------\nlet g:indent_guides_guide_size = 1\nlet g:indent_guides_start_level = 1\nlet g:indent_guides_auto_colors = 0\n\"}}}\n\n\" Plugin: vim-gitgutter {{{\n\" ---------------------------------------------------------\nhighlight GitGutterAdd ctermfg=22 guifg=#006000 ctermbg=NONE\nhighlight GitGutterChange ctermfg=58 guifg=#5F6000 ctermbg=NONE\nhighlight GitGutterDelete ctermfg=52 guifg=#600000 ctermbg=NONE\nhighlight GitGutterChangeDelete ctermfg=52 guifg=#600000 ctermbg=NONE\n\" }}}\n\n\" Plugin: unite.vim {{{\n\" ---------------------------------------------------------\nhighlight link uniteInputPrompt   Question\n\n\" Grep\n\"highlight link uniteSource__Grep           Normal\n\"highlight link uniteCandidateInputKeyword  Function\n\"highlight uniteSource__GrepLineNr       ctermfg=240 guifg=#808070\n\"highlight uniteSource__GrepLine         ctermfg=245 guifg=#808070\n\"highlight uniteSource__GrepFile         ctermfg=4   guifg=#8197bf\n\"highlight uniteSource__GrepSeparator    ctermfg=5   guifg=#f0a0c0\n\"highlight uniteSource__GrepPattern      ctermfg=1   guifg=#cf6a4c\n\" }}}\n\n\" Plugin: unite-quickfix {{{\n\" ---------------------------------------------------------\n\"highlight UniteQuickFixWarning              ctermfg=1\n\"highlight uniteSource__QuickFix             ctermfg=8\n\"highlight uniteSource__QuickFix_Bold        ctermfg=249\n\"highlight link uniteSource__QuickFix_File   Directory\n\"highlight link uniteSource__QuickFix_LineNr qfLineNr\n\" }}}\n\n\" Plugin: vimfiler.vim {{{\n\" ---------------------------------------------------------\nhighlight vimfilerNonMark     ctermfg=132 guifg=#B05E87\nhighlight vimfilerLeaf        ctermfg=238 guifg=#444444\nhighlight vimfilerClosedFile  ctermfg=246 guifg=#949494\nhighlight link vimfilerOpenedFile  Normal\nhighlight link vimfilerNormalFile  Comment\nhighlight link vimfilerMarkedFile  Type\n\" }}}\n\n\" Plugin: vim-indent-guides {{{\n\" ---------------------------------------------------------\nhighlight IndentGuidesOdd  guibg=#262626 ctermbg=235\nhighlight IndentGuidesEven guibg=#303030 ctermbg=236\n\" }}}\n\n\" Plugin: vim-operator-flashy {{{\n\" ---------------------------------------------------------\nhighlight link Flashy Todo\n\" }}}\n\n\" vim: set foldmethod=marker ts=2 sw=0 tw=80 noet :\n"
  },
  {
    "path": "themes/rafi-2016.vim",
    "content": "\n\" rafi-2016 - hybrid custom\n\" =========================\n\n\" gVim Appearance {{{\n\" ---------------------------------------------------------\nif has('gui_running')\n\tset guifont=Monaco:h14\n\"\tset guifont=PragmataPro:h14\n\"\tset noantialias\nendif\n\" }}}\n\n\" UI elements {{{\n\" ---------------------------------------------------------\nset showbreak=↪\nset fillchars=vert:│,fold:─\nset listchars=tab:\\⋮\\ ,extends:⟫,precedes:⟪,nbsp:␣,trail:·\n\" }}}\n\n\" Tabline {{{\n\" ---------------------------------------------------------\n\" TabLineFill: Tab pages line, where there are no labels\nhi TabLineFill ctermfg=234 ctermbg=236 guifg=#1C1C1C guibg=#303030 cterm=NONE gui=NONE\n\" TabLine: Not-active tab page label\nhi TabLine     ctermfg=243 ctermbg=236 guifg=#767676 guibg=#303030 cterm=NONE gui=NONE\n\" TabLineSel: Active tab page label\nhi TabLineSel  ctermfg=241 ctermbg=234 guifg=#626262 guibg=#1C1C1C cterm=NONE gui=NONE\n\" Custom\nhighlight TabLineSelShade  ctermfg=235 ctermbg=234 guifg=#262626 guibg=#1C1C1C\nhighlight TabLineAlt       ctermfg=252 ctermbg=238 guifg=#D0D0D0 guibg=#444444\nhighlight TabLineAltShade  ctermfg=238 ctermbg=236 guifg=#444444 guibg=#303030\n\nfunction! Tabline() abort \"{{{\n\t\" Active project tab\n\tlet s:tabline =\n\t\t\\ '%#TabLineAlt# %{badge#project()} '.\n\t\t\\ '%#TabLineAltShade#▛'.\n\t\t\\ '%#TabLineFill#  '\n\n\tlet nr = tabpagenr()\n\tfor i in range(tabpagenr('$'))\n\t\tif i + 1 == nr\n\t\t\t\" Active tab\n\t\t\tlet s:tabline .=\n\t\t\t\t\\ '%#TabLineSelShade#░%#TabLineSel#'.\n\t\t\t\t\\ '%'.(i+1).'T%{badge#label('.(i+1).', \"▛\", \"N/A\")} '.\n\t\t\t\t\\ '%#TabLineFill#▞ '\n\t\telse\n\t\t\t\" Normal tab\n\t\t\tlet s:tabline .=\n\t\t\t\t\\ '%#TabLine# '.\n\t\t\t\t\\ '%'.(i+1).'T%{badge#label('.(i+1).', \"▛\", \"N/A\")} '.\n\t\t\t\t\\ '▘ '\n\t\tendif\n\tendfor\n\t\" Empty space and session indicator\n\tlet s:tabline .=\n\t\t\\ '%#TabLineFill#%T%=%#TabLine#%{badge#session(\"['.fnamemodify(v:this_session, ':t:r').']\")}'\n\treturn s:tabline\nendfunction \"}}}\n\nlet &tabline='%!Tabline()'\n\" }}}\n\n\" Statusline {{{\nlet s:stl  = \" %7*%{&paste ? '=' : ''}%*\"         \" Paste symbol\nlet s:stl .= \"%4*%{&readonly ? '' : '#'}%*\"       \" Modifide symbol\nlet s:stl .= '%6*%{badge#mode()}'                 \" Readonly symbol\nlet s:stl .= '%*%n'                               \" Buffer number\nlet s:stl .= \"%6*%{badge#modified('+')}%0*\"       \" Write symbol\nlet s:stl .= ' %1*%{badge#filename()}%*'          \" Filename\nlet s:stl .= ' %<'                                \" Truncate here\nlet s:stl .= '%( %{badge#branch()} %)'           \" Git branch name\nlet s:stl .= \"%4*%(%{badge#trails('WS:%s')} %)\"  \" Whitespace\nlet s:stl .= '%(%{badge#syntax()} %)%*'           \" syntax check\nlet s:stl .= '%='                                 \" Align to right\nlet s:stl .= '%{badge#format()} %4*%*'           \" File format\nlet s:stl .= '%( %{&fenc} %)'                     \" File encoding\nlet s:stl .= '%4*%*%( %{&ft} %)'                 \" File type\nlet s:stl .= '%3*%2* %l/%2c%4p%% '               \" Line and column\n\"let s:stl .= \"%{gutentags#statusline('[*]')}%*\"\n\n\" Non-active Statusline {{{\nlet s:stl_nc = \" %{badge#mode('⚒', 'Z')}%n\"    \" Readonly & buffer\nlet s:stl_nc .= \"%6*%{badge#modified('+')}%*\"  \" Write symbol\nlet s:stl_nc .= ' %{badge#filename()}'         \" Relative supername\nlet s:stl_nc .= '%='                           \" Align to right\nlet s:stl_nc .= '%{&ft} '                      \" File type\n\" }}}\n\n\" Highlights: Statusline {{{\nhighlight StatusLine   ctermfg=236 ctermbg=248 guifg=#30302c guibg=#a8a897\nhighlight StatusLineNC ctermfg=236 ctermbg=242 guifg=#30302c guibg=#666656\n\n\" Filepath color\nhighlight User1 guifg=#D7D7BC guibg=#30302c ctermfg=251 ctermbg=236\n\" Line and column information\nhighlight User2 guifg=#a8a897 guibg=#4e4e43 ctermfg=248 ctermbg=239\n\" Line and column corner arrow\nhighlight User3 guifg=#4e4e43 guibg=#30302c ctermfg=239 ctermbg=236\n\" Buffer # symbol and whitespace or syntax errors\nhighlight User4 guifg=#666656 guibg=#30302c ctermfg=242 ctermbg=236\n\" Write symbol\nhighlight User6 guifg=#cf6a4c guibg=#30302c ctermfg=167 ctermbg=236\n\" Paste symbol\nhighlight User7 guifg=#99ad6a guibg=#30302c ctermfg=107 ctermbg=236\n\" Syntax and whitespace\nhighlight User8 guifg=#ffb964 guibg=#30302c ctermfg=215 ctermbg=236\n\" }}}\n\nlet s:disable_statusline =\n\t\\ 'denite\\|unite\\|vimfiler\\|tagbar\\|nerdtree\\|undotree\\|gundo\\|diff'\n\n\" Toggle Statusline {{{\naugroup statusline\n\tautocmd!\n\tautocmd FileType,WinEnter,BufWinEnter,BufReadPost *\n\t\t\\ if &filetype !~? s:disable_statusline\n\t\t\\ | let &l:statusline = s:stl\n\t\t\\ | endif\n\tautocmd WinLeave *\n\t\t\\ if &filetype !~? s:disable_statusline\n\t\t\\ | let &l:statusline = s:stl_nc\n\t\t\\ | endif\naugroup END \"}}}\n\n\" }}}\n\n\" Highlights: General GUI {{{\n\" ---------------------------------------------------------\nhighlight! Error  term=NONE cterm=NONE\nhighlight! link mkdLineBreak      NONE\nhighlight! link pythonSpaceError  NONE\nhighlight! link pythonIndentError NONE\nhighlight! link WarningMsg  Comment\nhighlight! link ExtraWhitespace  SpellBad\n\" }}}\n\n\" Plugin: VimFiler icons {{{\n\" ---------------------------------------------------------\nlet g:vimfiler_tree_indentation = 1\nlet g:vimfiler_tree_leaf_icon = '┆'\nlet g:vimfiler_tree_opened_icon = '▼'\nlet g:vimfiler_tree_closed_icon = '▷'\nlet g:vimfiler_file_icon = ' '\nlet g:vimfiler_readonly_file_icon = '✖'\nlet g:vimfiler_marked_file_icon = '✓'\n\"}}}\n\n\" Plugin: NERDTree icons and highlights {{{\n\" ---------------------------------------------------------\nlet g:NERDTreeIndicatorMapCustom = {\n\t\\ 'Modified':  '',\n\t\\ 'Staged':    'ᴍ',\n\t\\ 'Untracked': '⁇',\n\t\\ 'Renamed':   '',\n\t\\ 'Unmerged':  '',\n\t\\ 'Deleted':   '',\n\t\\ 'Dirty':     '·',\n\t\\ 'Clean':     '✓',\n\t\\ 'Unknown':   '?'\n\t\\ }\n\nlet g:NERDTreeDirArrowExpandable = '▷'\nlet g:NERDTreeDirArrowCollapsible = '▼'\n\nhighlight! NERDTreeOpenable ctermfg=132 guifg=#B05E87\nhighlight! def link NERDTreeClosable NERDTreeOpenable\n\nhighlight! NERDTreeFile ctermfg=246 guifg=#999999\nhighlight! NERDTreeExecFile ctermfg=246 guifg=#999999\n\nhighlight! clear NERDTreeFlags\nhighlight! NERDTreeFlags ctermfg=234 guifg=#1d1f21\nhighlight! NERDTreeCWD ctermfg=240 guifg=#777777\n\nhighlight! NERDTreeGitStatusModified ctermfg=1 guifg=#D370A3\nhighlight! NERDTreeGitStatusStaged ctermfg=10 guifg=#A3D572\nhighlight! NERDTreeGitStatusUntracked ctermfg=12 guifg=#98CBFE\nhighlight! def link NERDTreeGitStatusRenamed Title\nhighlight! def link NERDTreeGitStatusUnmerged Label\nhighlight! def link NERDTreeGitStatusDirDirty Constant\nhighlight! def link NERDTreeGitStatusDirClean DiffAdd\nhighlight! def link NERDTreeGitStatusUnknown Comment\n\nfunction! s:NERDTreeHighlight()\n\tfor l:name in keys(g:NERDTreeIndicatorMapCustom)\n\t\tlet l:icon = g:NERDTreeIndicatorMapCustom[l:name]\n\t\tif empty(l:icon)\n\t\t\tcontinue\n\t\tendif\n\t\tlet l:prefix = index(['Dirty', 'Clean'], l:name) > -1 ? 'Dir' : ''\n\t\tlet l:hiname = escape('NERDTreeGitStatus'.l:prefix.l:name, '~')\n\t\texecute 'syntax match '.l:hiname.' #'.l:icon.'# containedin=NERDTreeFlags'\n\tendfor\n\n\tsyntax match NERDTreeOpenBracket /\\[/\n\t\t\\ contained containedin=NERDTreeFlags conceal\nendfunction\n\naugroup AddHighlighting\n\tautocmd!\n\tautocmd FileType nerdtree call s:NERDTreeHighlight()\naugroup END\n\"}}}\n\n\" Plugin: Tagbar icons {{{\n\" ---------------------------------------------------------\nlet g:tagbar_iconchars = ['▷', '◢']\n\"}}}\n\n\" Plugin: Neomake icons {{{\n\" ---------------------------------------------------------\nlet g:neomake_error_sign = {'text': '⎖', 'texthl': 'ErrorMsg'}\nlet g:neomake_warning_sign = {'text': '⎖', 'texthl': 'WarningMsg'}\nlet g:neomake_message_sign = {'text': 's', 'texthl': 'NeomakeMessageSign'}\nlet g:neomake_info_sign = {'text': 'i', 'texthl': 'NeomakeInfoSign'}\n\"}}}\n\n\" Plugin: GitGutter icons {{{\n\" ---------------------------------------------------------\nlet g:gitgutter_sign_added = '▎'\nlet g:gitgutter_sign_modified = '▎'\nlet g:gitgutter_sign_removed = '▏'\nlet g:gitgutter_sign_removed_first_line = '▔'\nlet g:gitgutter_sign_modified_removed = '▋'\n\"}}}\n\n\" Plugin: Indent-Guides icons {{{\n\" ---------------------------------------------------------\nlet g:indent_guides_guide_size = 1\nlet g:indent_guides_start_level = 1\nlet g:indent_guides_auto_colors = 0\n\"}}}\n\n\" Plugin: vim-gitgutter {{{\n\" ---------------------------------------------------------\nhighlight GitGutterAdd ctermfg=22 guifg=#006000 ctermbg=NONE\nhighlight GitGutterChange ctermfg=58 guifg=#5F6000 ctermbg=NONE\nhighlight GitGutterDelete ctermfg=52 guifg=#600000 ctermbg=NONE\nhighlight GitGutterChangeDelete ctermfg=52 guifg=#600000 ctermbg=NONE\n\" }}}\n\n\" Plugin: denite {{{\n\" ---------------------------------------------------------\nhighlight clear WildMenu\nhighlight link WildMenu CursorLine\nhighlight link deniteSelectedLine Type\nhighlight link deniteMatchedChar Function\nhighlight link deniteMatchedRange Underlined\nhighlight link deniteMode Comment\n\" }}}\n\n\" Plugin: vimfiler.vim {{{\n\" ---------------------------------------------------------\nhighlight vimfilerNonMark     ctermfg=132 guifg=#B05E87\nhighlight vimfilerLeaf        ctermfg=238 guifg=#444444\nhighlight vimfilerClosedFile  ctermfg=246 guifg=#949494\nhighlight link vimfilerOpenedFile  Normal\nhighlight link vimfilerNormalFile  Comment\nhighlight link vimfilerMarkedFile  Type\n\" }}}\n\n\" Plugin: vim-indent-guides {{{\n\" ---------------------------------------------------------\nhighlight IndentGuidesOdd  guibg=#262626 ctermbg=235\nhighlight IndentGuidesEven guibg=#303030 ctermbg=236\n\" }}}\n\n\" Plugin: vim-operator-flashy {{{\n\" ---------------------------------------------------------\nhighlight link Flashy Todo\n\" }}}\n\n\" }}}\n\" Plugin: vim-bookmarks {{{\nlet g:bookmark_sign = '⚐'\nhighlight BookmarkSign            ctermfg=12 guifg=#4EA9D7\nhighlight BookmarkAnnotationSign  ctermfg=11 guifg=#EACF49\n\" }}}\n\n\" Plugin: vim-choosewin {{{\n\" ---------------------------------------------------------\nlet g:choosewin_label = 'SDFJKLZXCV'\nlet g:choosewin_overlay_enable = 1\nlet g:choosewin_statusline_replace = 1\nlet g:choosewin_overlay_clear_multibyte = 0\nlet g:choosewin_blink_on_land = 0\n\nlet g:choosewin_color_label = {\n\t\\ 'cterm': [ 236, 2 ], 'gui': [ '#555555', '#000000' ] }\nlet g:choosewin_color_label_current = {\n\t\\ 'cterm': [ 234, 220 ], 'gui': [ '#333333', '#000000' ] }\nlet g:choosewin_color_other = {\n\t\\ 'cterm': [ 235, 235 ], 'gui': [ '#333333' ] }\nlet g:choosewin_color_overlay = {\n\t\\ 'cterm': [ 2, 10 ], 'gui': [ '#88A2A4' ] }\nlet g:choosewin_color_overlay_current = {\n\t\\ 'cterm': [ 72, 64 ], 'gui': [ '#7BB292' ] }\n\" }}}\n\n\" vim: set foldmethod=marker ts=2 sw=0 tw=80 noet :\n"
  },
  {
    "path": "themes/rafi-2017.vim",
    "content": "\n\" rafi-2017 - hybrid custom\n\" =========================\n\n\" gVim Appearance {{{\n\" ---------------------------------------------------------\nif has('gui_running')\n\tset guifont=PragmataPro:h16\n\t\" set noantialias\nendif\n\" }}}\n\n\" UI elements {{{\n\" ---------------------------------------------------------\nset showbreak=↪\nset fillchars=vert:│,fold:─\nset listchars=tab:\\▏\\ ,extends:⟫,precedes:⟪,nbsp:␣,trail:·\n\n\" icons:  ▏│ ¦ ╎ ┆ ⋮ ⦙ ┊ \n\" }}}\n\n\" Tabline {{{\n\" ---------------------------------------------------------\n\" TabLineFill: Tab pages line, where there are no labels\nhi TabLineFill ctermfg=234 ctermbg=236 guifg=#1C1C1C guibg=#303030 cterm=NONE gui=NONE\n\" TabLine: Not-active tab page label\nhi TabLine     ctermfg=243 ctermbg=236 guifg=#767676 guibg=#303030 cterm=NONE gui=NONE\n\" TabLineSel: Active tab page label\nhi TabLineSel  ctermfg=241 ctermbg=234 guifg=#626262 guibg=#1C1C1C cterm=NONE gui=NONE\n\" Custom\nhighlight TabLineSelShade  ctermfg=235 ctermbg=234 guifg=#262626 guibg=#1C1C1C\nhighlight TabLineAlt       ctermfg=252 ctermbg=238 guifg=#D0D0D0 guibg=#444444\nhighlight TabLineAltShade  ctermfg=238 ctermbg=236 guifg=#444444 guibg=#303030\n\nfunction! Tabline() abort \"{{{\n\t\" Active project tab\n\tlet s:tabline =\n\t\t\\ '%#TabLineAlt# %{badge#project()} '.\n\t\t\\ '%#TabLineAltShade#▛'.\n\t\t\\ '%#TabLineFill#  '\n\n\tlet nr = tabpagenr()\n\tfor i in range(tabpagenr('$'))\n\t\tif i + 1 == nr\n\t\t\t\" Active tab\n\t\t\tlet s:tabline .=\n\t\t\t\t\\ '%#TabLineSelShade#░%#TabLineSel#'.\n\t\t\t\t\\ '%'.(i+1).'T%{badge#label('.(i+1).', \"▛\", \"N/A\")} '.\n\t\t\t\t\\ '%#TabLineFill#▞ '\n\t\telse\n\t\t\t\" Normal tab\n\t\t\tlet s:tabline .=\n\t\t\t\t\\ '%#TabLine# '.\n\t\t\t\t\\ '%'.(i+1).'T%{badge#label('.(i+1).', \"▛\", \"N/A\")} '.\n\t\t\t\t\\ '▘ '\n\t\tendif\n\tendfor\n\t\" Empty space and session indicator\n\tlet s:tabline .=\n\t\t\\ '%#TabLineFill#%T%=%#TabLine#%{badge#session(\"['.fnamemodify(v:this_session, ':t:r').']\")}'\n\treturn s:tabline\nendfunction \"}}}\n\nlet &tabline='%!Tabline()'\n\" }}}\n\n\" Statusline {{{\nlet s:stl  = \" %7*%{&paste ? '=' : ''}%*\"         \" Paste symbol\nlet s:stl .= \"%4*%{&readonly ? '' : '#'}%*\"       \" Modifide symbol\nlet s:stl .= \"%6*%{badge#mode('⚠ ', 'Z')}\"        \" Read-only symbol\nlet s:stl .= '%*%n'                               \" Buffer number\nlet s:stl .= \"%6*%{badge#modified('+')}%0*\"       \" Write symbol\nlet s:stl .= ' %1*%{badge#filename()}%*'          \" Filename\nlet s:stl .= ' %<'                                \" Truncate here\nlet s:stl .= '%( %{badge#branch()} %)'           \" Git branch name\nlet s:stl .= \"%4*%(%{badge#trails('⤐ %s')} %)\"   \" Whitespace\nlet s:stl .= '%(%{badge#syntax()} %)%*'           \" syntax check\nlet s:stl .= '%='                                 \" Align to right\nlet s:stl .= '%{badge#format()} %4*%*'           \" File format\nlet s:stl .= '%( %{&fenc} %)'                     \" File encoding\nlet s:stl .= '%4*%*%( %{&ft} %)'                 \" File type\nlet s:stl .= '%3*%2* %l/%2c%4p%% '               \" Line and column\nlet s:stl .= '%{badge#indexing()}%*'              \" Indexing tags indicator\n\n\" Non-active Statusline {{{\nlet s:stl_nc = \" %{badge#mode('⚠ ', 'Z')}%n\"   \" Readonly & buffer\nlet s:stl_nc .= \"%6*%{badge#modified('+')}%*\"  \" Write symbol\nlet s:stl_nc .= ' %{badge#filename()}'         \" Relative supername\nlet s:stl_nc .= '%='                           \" Align to right\nlet s:stl_nc .= '%{&ft} '                      \" File type\n\" }}}\n\n\" Highlights: Statusline {{{\nhighlight StatusLine   ctermfg=236 ctermbg=248 guifg=#30302c guibg=#a8a897\nhighlight StatusLineNC ctermfg=236 ctermbg=242 guifg=#30302c guibg=#666656\n\n\" Filepath color\nhighlight User1 guifg=#D7D7BC guibg=#30302c ctermfg=251 ctermbg=236\n\" Line and column information\nhighlight User2 guifg=#a8a897 guibg=#4e4e43 ctermfg=248 ctermbg=239\n\" Line and column corner arrow\nhighlight User3 guifg=#4e4e43 guibg=#30302c ctermfg=239 ctermbg=236\n\" Buffer # symbol and whitespace or syntax errors\nhighlight User4 guifg=#666656 guibg=#30302c ctermfg=242 ctermbg=236\n\" Write symbol\nhighlight User6 guifg=#cf6a4c guibg=#30302c ctermfg=167 ctermbg=236\n\" Paste symbol\nhighlight User7 guifg=#99ad6a guibg=#30302c ctermfg=107 ctermbg=236\n\" Syntax and whitespace\nhighlight User8 guifg=#ffb964 guibg=#30302c ctermfg=215 ctermbg=236\n\" }}}\n\nlet s:disable_statusline =\n\t\\ 'denite\\|defx\\|tagbar\\|nerdtree\\|undotree\\|diff\\|peekaboo\\|sidemenu'\n\n\" Toggle Statusline {{{\naugroup statusline\n\tautocmd!\n\tautocmd FileType,WinEnter,BufWinEnter,BufReadPost *\n\t\t\\ if &filetype !~? s:disable_statusline\n\t\t\\ | let &l:statusline = s:stl\n\t\t\\ | endif\n\tautocmd WinLeave *\n\t\t\\ if &filetype !~? s:disable_statusline\n\t\t\\ | let &l:statusline = s:stl_nc\n\t\t\\ | endif\naugroup END \"}}}\n\n\" }}}\n\n\" Highlights: General GUI {{{\n\" ---------------------------------------------------------\n\" highlight! Error  term=NONE cterm=NONE\n\" highlight! link WarningMsg  Comment\nhighlight! link pythonSpaceError  NONE\nhighlight! link pythonIndentError NONE\n\" highlight! link mkdLineBreak      NONE\nhighlight! link ExtraWhitespace  SpellBad\nhighlight! WarningMsg ctermfg=100 guifg=#CCC566\n\" }}}\n\nhighlight ParenMatch  ctermbg=236 guibg=#30302c\nhighlight CursorWord0 ctermbg=236 guibg=#30302c\nhighlight CursorWord1 ctermbg=236 guibg=#30302c\n\n\" Plugin: Defx icons and highlights {{{\n\" ---------------------------------------------------------\nlet g:defx_git#indicators = {\n\t\\ 'Modified'  : '•',\n\t\\ 'Staged'    : '✚',\n\t\\ 'Untracked' : 'ᵁ',\n\t\\ 'Renamed'   : '≫',\n\t\\ 'Unmerged'  : '≠',\n\t\\ 'Ignored'   : 'ⁱ',\n\t\\ 'Deleted'   : '✖',\n\t\\ 'Unknown'   : '⁇'\n\t\\ }\n\nhighlight Defx_filename_3_Modified  ctermfg=1  guifg=#D370A3\nhighlight Defx_filename_3_Staged    ctermfg=10 guifg=#A3D572\nhighlight Defx_filename_3_Ignored   ctermfg=8  guifg=#404660\nhighlight def link Defx_filename_3_Untracked Comment\nhighlight def link Defx_filename_3_Unknown Comment\nhighlight def link Defx_filename_3_Renamed Title\nhighlight def link Defx_filename_3_Unmerged Label\n\" highlight Defx_git_Deleted   ctermfg=13 guifg=#b294bb\n\n\" Plugin: NERDTree icons and highlights {{{\n\" ---------------------------------------------------------\nlet g:NERDTreeIndicatorMapCustom = {\n\t\\ 'Modified':  '·',\n\t\\ 'Staged':    '‧',\n\t\\ 'Untracked': '?',\n\t\\ 'Renamed':   '≫',\n\t\\ 'Unmerged':  '≠',\n\t\\ 'Deleted':   '✃',\n\t\\ 'Dirty':     '⁖',\n\t\\ 'Clean':     '✓',\n\t\\ 'Unknown':   '⁇'\n\t\\ }\n\nlet g:NERDTreeDirArrowExpandable = '▷'\nlet g:NERDTreeDirArrowCollapsible = '▼'\n\nhighlight! NERDTreeOpenable ctermfg=132 guifg=#B05E87\nhighlight! def link NERDTreeClosable NERDTreeOpenable\n\nhighlight! NERDTreeFile ctermfg=246 guifg=#999999\nhighlight! NERDTreeExecFile ctermfg=246 guifg=#999999\n\nhighlight! clear NERDTreeFlags\nhighlight! NERDTreeFlags ctermfg=234 guifg=#1d1f21\nhighlight! NERDTreeCWD ctermfg=240 guifg=#777777\n\nhighlight! NERDTreeGitStatusModified ctermfg=1 guifg=#D370A3\nhighlight! NERDTreeGitStatusStaged ctermfg=10 guifg=#A3D572\nhighlight! NERDTreeGitStatusUntracked ctermfg=12 guifg=#98CBFE\nhighlight! def link NERDTreeGitStatusRenamed Title\nhighlight! def link NERDTreeGitStatusUnmerged Label\nhighlight! def link NERDTreeGitStatusDirDirty Constant\nhighlight! def link NERDTreeGitStatusDirClean DiffAdd\nhighlight! def link NERDTreeGitStatusUnknown Comment\n\nfunction! s:NERDTreeHighlight()\n\tfor l:name in keys(g:NERDTreeIndicatorMapCustom)\n\t\tlet l:icon = g:NERDTreeIndicatorMapCustom[l:name]\n\t\tif empty(l:icon)\n\t\t\tcontinue\n\t\tendif\n\t\tlet l:prefix = index(['Dirty', 'Clean'], l:name) > -1 ? 'Dir' : ''\n\t\tlet l:hiname = escape('NERDTreeGitStatus'.l:prefix.l:name, '~')\n\t\texecute 'syntax match '.l:hiname.' #'.l:icon.'# containedin=NERDTreeFlags'\n\tendfor\n\n\tsyntax match hideBracketsInNerdTree \"\\]\" contained conceal containedin=NERDTreeFlags\n\tsyntax match hideBracketsInNerdTree \"\\[\" contained conceal containedin=NERDTreeFlags\n\t\" setlocal conceallevel=3\n\t\" setlocal concealcursor=nvic\nendfunction\n\naugroup nerdtree-highlights\n\tautocmd!\n\tautocmd FileType nerdtree call s:NERDTreeHighlight()\naugroup END\n\"}}}\n\n\" Plugin: Tagbar icons {{{\n\" ---------------------------------------------------------\nlet g:tagbar_iconchars = ['▷', '◢']\n\"}}}\n\n\" Plugin: Neomake icons {{{\n\" ---------------------------------------------------------\nlet g:neomake_error_sign = {'text': '⚠', 'texthl': 'ErrorMsg'}\nlet g:neomake_warning_sign = {'text': '⌁', 'texthl': 'WarningSyntax'}\nlet g:neomake_message_sign = {'text': '⌂', 'texthl': 'NeomakeMessageSign'}\nlet g:neomake_info_sign = {'text': '⊹', 'texthl': 'NeomakeInfoSign'}\n\"}}}\nhighlight! WarningSyntax ctermfg=58 guifg=#7d7629\n\n\" Plugin: GitGutter icons {{{\n\" ---------------------------------------------------------\nlet g:gitgutter_sign_added = '▎'\nlet g:gitgutter_sign_modified = '▎'\nlet g:gitgutter_sign_removed = '▏'\nlet g:gitgutter_sign_removed_first_line = '▔'\nlet g:gitgutter_sign_modified_removed = '▋'\n\"}}}\n\n\" Plugin: vim-gitgutter {{{\n\" ---------------------------------------------------------\nhighlight! GitGutterAdd ctermfg=22 guifg=#006000 ctermbg=NONE guibg=NONE\nhighlight! GitGutterChange ctermfg=58 guifg=#5F6000 ctermbg=NONE guibg=NONE\nhighlight! GitGutterDelete ctermfg=52 guifg=#600000 ctermbg=NONE guibg=NONE\nhighlight! GitGutterChangeDelete ctermfg=52 guifg=#600000 ctermbg=NONE guibg=NONE\n\" }}}\n\n\" Plugin: denite {{{\n\" ---------------------------------------------------------\nhighlight! clear WildMenu\nhighlight! link WildMenu CursorLine\nhighlight! link deniteSelectedLine Type\nhighlight! link deniteMatchedChar Function\nhighlight! link deniteMatchedRange Underlined\nhighlight! link deniteMode Comment\nhighlight! link deniteSource_QuickfixPosition qfLineNr\n\" }}}\n\n\" Plugin: vim-operator-flashy {{{\n\" ---------------------------------------------------------\nhighlight! link Flashy DiffText\n\" }}}\n\n\" Plugin: vim-bookmarks {{{\nlet g:bookmark_sign = '⚐'\nhighlight! BookmarkSign            ctermfg=12 guifg=#4EA9D7\nhighlight! BookmarkAnnotationSign  ctermfg=11 guifg=#EACF49\n\" }}}\n\n\" Plugin: vim-choosewin {{{\n\" ---------------------------------------------------------\nlet g:choosewin_label = 'SDFJKLZXCV'\nlet g:choosewin_overlay_enable = 1\nlet g:choosewin_statusline_replace = 1\nlet g:choosewin_overlay_clear_multibyte = 0\nlet g:choosewin_blink_on_land = 0\n\nlet g:choosewin_color_label = {\n\t\\ 'cterm': [ 236, 2 ], 'gui': [ '#555555', '#000000' ] }\nlet g:choosewin_color_label_current = {\n\t\\ 'cterm': [ 234, 220 ], 'gui': [ '#333333', '#000000' ] }\nlet g:choosewin_color_other = {\n\t\\ 'cterm': [ 235, 235 ], 'gui': [ '#333333' ] }\nlet g:choosewin_color_overlay = {\n\t\\ 'cterm': [ 2, 10 ], 'gui': [ '#88A2A4' ] }\nlet g:choosewin_color_overlay_current = {\n\t\\ 'cterm': [ 72, 64 ], 'gui': [ '#7BB292' ] }\n\" }}}\n\n\" vim: set foldmethod=marker ts=2 sw=0 tw=80 noet :\n"
  },
  {
    "path": "venv.sh",
    "content": "#!/usr/bin/env bash\n\n_try_pyenv() {\n\tlocal name='' src=''\n\tif hash pyenv 2>/dev/null; then\n\t\techo '===> pyenv found, searching virtualenvs…'\n\t\tfor name in neovim neovim3 nvim; do\n\t\t\tsrc=\"$(pyenv prefix \"${name}\" 2>/dev/null)\"\n\t\t\tif [ -d \"${src}\" ]; then\n\t\t\t\techo \"===> pyenv virtualenv found '${name}', upgrading...\"\n\t\t\t\t# Symlink virtualenv for easy access\n\t\t\t\tln -fs \"${src}\" \"${__venv}\"\n\t\t\t\treturn 0\n\t\t\tfi\n\t\tdone\n\t\techo \"===> skipping pyenv. manual virtualenv isn't found\"\n\t\techo\n\t\techo \"Press Ctrl+C and use pyenv to create one yourself (name it 'neovim')\"\n\t\techo \"and run ${0} again. Or press Enter to continue and create a\"\n\t\techo \"virtualenv using: python3 -m venv '${__venv}'\"\n\t\tread -r\n\telse\n\t\techo '===> pyenv not found, skipping'\n\tfi\n\treturn 1\n}\n\n_try_python() {\n\tif ! hash python3 2>/dev/null; then\n\t\techo '===> python3 not found, skipping'\n\t\treturn 1\n\tfi\n\techo \"===> python3 found\"\n\t[ -d \"${__venv}\" ] || python3 -m venv \"${__venv}\"\n}\n\nmain() {\n\t# Concat a base path for vim cache and virtual environment\n\tlocal __cache=\"${XDG_CACHE_HOME:-$HOME/.cache}/vim\"\n\tlocal __venv=\"${__cache}/venv\"\n\tmkdir -p \"${__cache}\"\n\n\tif [ -d \"${__venv}/neovim2\" ]; then\n\t\techo -n '===> ERROR: Python 2 has ended its life, '\n\t\techo ' only python3 virtualenv is created now.'\n\t\techo \"Delete '${__venv}' (or backup!) first, and then run ${0} again.\"\n\telif _try_pyenv || _try_python; then\n\t\t# Install Python 3 requirements\n\t\t\"${__venv}/bin/pip\" install -U pynvim PyYAML Send2Trash\n\t\techo '===> success'\n\telse\n\t\techo '===> ERROR: Unable to setup python3 virtualenv.'\n\t\techo -e '\\nConsider using pyenv with its virtualenv plugin:'\n\t\techo '- https://github.com/pyenv/pyenv'\n\t\techo '- https://github.com/pyenv/pyenv-virtualenv'\n\tfi\n}\n\nmain\n"
  },
  {
    "path": "vimrc",
    "content": "\" Note: Skip initialization for vim-tiny or vim-small.\nif 1\n\texecute 'source' fnamemodify(expand('<sfile>'), ':h').'/config/vimrc'\nendif\n"
  }
]