PegasusWang / vim-config

Lean mean (Neo)Vim machine, carefully crafted with :heart: Use with Neovim v0.1.5+ or Vim v7.4+
490 stars 109 forks source link

Rafael Bodill's Neo/vim Config

Lean mean Neo/vim machine, 30-45ms startup time.

Best with Neovim 0.5.x or Vim 8.x and python3 enabled.

I encourage you to fork this repo and create your own experience. Learn how to tweak and change Neo/vim to the way YOU like it. This is my cultivation of years of tweaking, use it as a git remote and stay in-touch with upstream for reference or cherry-picking.

Table of Contents (๐Ÿ”Ž Click to expand/collapse) * [Features](#features) * [Screenshot](#screenshot) * [Prerequisites](#prerequisites) * [Install](#install) * [Language-Server Protocol (LSP)](#language-server-protocol-lsp) * [Upgrade](#upgrade) * [Recommended Fonts](#recommended-fonts) * [Recommended Linters](#recommended-linters) * [Recommended Tools](#recommended-tools) * [User Custom Config](#user-custom-config) * [Structure](#structure) * [Plugin Highlights](#plugin-highlights) * [Plugins Included](#plugins-included) * [Non Lazy-Loaded Plugins](#non-lazy-loaded-plugins) * [Lazy-Loaded Plugins](#lazy-loaded-plugins) * [Language](#language) * [Commands](#commands) * [Interface](#interface) * [Completion & Code-Analysis](#completion--code-analysis) * [Denite & Clap](#denite--clap) * [Operators & Text Objects](#operators--text-objects) * [Custom Key-mappings](#custom-key-mappings) * [Navigation](#navigation) * [File Operations](#file-operations) * [Edit](#edit) * [Search & Replace](#search--replace) * [Clipboard](#clipboard) * [Command & History](#command--history) * [Editor UI](#editor-ui) * [Custom Tools & Plugins](#custom-tools--plugins) * [Window Management](#window-management) * [Git Version Control](#git-version-control) * [Plugin: Denite](#plugin-denite) * [Plugin: Defx](#plugin-defx) * [Plugin: Clap](#plugin-clap) * [Plugin: Asyncomplete and Emmet](#plugin-asyncomplete-and-emmet) * [Plugin: Any-Jump](#plugin-any-jump) * [Plugin: Signature](#plugin-signature) * [Credits & Contribution](#credits--contribution)

Features

Screenshot

Vim screenshot

Prerequisites

Caveat: You must have one of these tools installed: yj, yq, yaml2json, Ruby, or Python with PyYAML in-order for the YAML configuration to be parsed.

Install

1. Let's clone this repo! Clone to ~/.config/nvim, we'll also symlink it for regular Vim:

mkdir ~/.config
git clone git://github.com/PegasusWang/vim-config.git ~/.config/nvim
cd ~/.config/nvim
ln -s ~/.config/nvim ~/.vim  # For "regular" Vim

2. Install the Python 3 pynvim library. This is also needed for Vim 8 if you want to use Denite and Defx.

Neovim: ./venv.sh or pip3 install --user pynvim

Vim: pip3 install --user pynvim

3. Run make test to test your nvim/vim version and capabilities.

4. Run make to install all plugins.

5. If you are experiencing problems, run and read nvim -c checkhealth

Test Python 3 availability with :py3 print(sys.version_info)

Enjoy! :smile:

Language-Server Protocol (LSP)

To leverage LSP auto-completions and other functionalities, once you open a file in Neo/vim, run :LspInstallServer <name> to use [mattn/vim-lsp-settings] installation feature, use Tab to list available servers.

Here are a few useful commands:

Upgrade

cd ~/.config/nvim
make update

This will run git pull --ff --ff-only and update all plugins using [Shougo/dein.vim] package-manager (:call dein#update()).

Recommended Fonts

On macOS with Homebrew, choose one of the Nerd Fonts, for example, to install the Hack font:

brew tap homebrew/cask-fonts
brew search nerd-font
brew cask install font-hack-nerd-font
brew cask install font-iosevka-nerd-font-mono
brew cask install font-jetbrains-mono
brew cask install font-fira-code

Recommended Linters

brew install shellcheck jsonlint yamllint tflint ansible-lint
brew install tidy-html5 proselint write-good
yarn global add eslint jshint jsxhint stylelint sass-lint
yarn global add markdownlint-cli raml-cop
pip3 install --user vim-vint pycodestyle pyflakes flake8

Recommended Tools

User Custom Config

If you want to add your own configuration, create the config/local.vim file and add your personal vimscript there. If you'd like to install plugins by yourself, create a config/local.plugins.yaml file and manage your own plugin collection.

If you want to disable some of the plugins I use, you can overwrite them, e.g.:

- { repo: mattn/vim-lsp-settings, if: 0 }

Disable built-in statusline & tabline

You can use your local config/local.vim to disable status and tab lines:

let g:tabline_plugin_enable = 0
let g:statusline_plugin_enable = 0

Now, using config/local.plugins.yaml you can install any line plugin you want, e.g.:

# Use only one!
- repo: itchyny/lightline.vim
- repo: vim-airline/vim-airline
- repo: glepnir/galaxyline.nvim
- repo: glepnir/spaceline.vim
- repo: liuchengxu/eleline.vim

Structure

Plugin Highlights

Note that 95% of the plugins are lazy-loaded.

Plugins Included

List (๐Ÿ”Ž Click to expand/collapse) ### Non Lazy-Loaded Plugins | Name | Description | -------------- | ---------------------- | [Shougo/dein.vim] | Dark powered Vim/Neovim plugin manager | [rafi/awesome-colorschemes] | Awesome color-schemes | [thinca/vim-localrc] | Enable configuration file of each directory | [romainl/vim-cool] | Simple plugin that makes hlsearch more useful | [sgur/vim-editorconfig] | EditorConfig plugin written entirely in Vimscript | [christoomey/tmux-navigator] | Seamless navigation between tmux panes and vim splits | [tpope/vim-sleuth] | Heuristically set buffer indent options | [antoinemadec/FixCursorHold.nvim] | Neovim CursorHold workaround | [roxma/nvim-yarp] | Vim8 remote plugin framework for Neovim | [roxma/vim-hug-neovim-rpc] | Vim8 compatibility layer for neovim rpc client ### Lazy-Loaded Plugins #### Language | Name | Description | -------------- | ---------------------- | [hail2u/vim-css3-syntax] | CSS3 syntax support to vim's built-in `syntax/css.vim` | [othree/csscomplete.vim] | Updated built-in CSS complete with latest standards | [cakebaker/scss-syntax.vim] | Syntax file for scss (Sassy CSS) | [groenewege/vim-less] | Syntax for LESS | [iloginow/vim-stylus] | Syntax, indentation and autocomplete for Stylus | [mustache/vim-mustache-handlebars] | Mustache and handlebars syntax | [digitaltoad/vim-pug] | Pug (formerly Jade) syntax and indentation | [othree/html5.vim] | HTML5 omnicomplete and syntax | [plasticboy/vim-markdown] | Markdown syntax highlighting | [pangloss/vim-javascript] | Enhanced Javascript syntax | [HerringtonDarkholme/yats.vim] | Advanced TypeScript Syntax Highlighting | [MaxMEllon/vim-jsx-pretty] | React JSX syntax pretty highlighting | [leafOfTree/vim-svelte-plugin] | Syntax and indent plugin for Svelte | [heavenshell/vim-jsdoc] | Generate JSDoc to your JavaScript code | [jparise/vim-graphql] | GraphQL file detection, syntax highlighting, and indentation | [moll/vim-node] | Superb development with Node.js | [kchmck/vim-coffee-script] | CoffeeScript support | [elzr/vim-json] | Better JSON support | [posva/vim-vue] | Syntax Highlight for Vue.js components | [vim-python/python-syntax] | Enhanced version of the original Python syntax | [Vimjas/vim-python-pep8-indent] | A nicer Python indentation style | [vim-scripts/python_match.vim] | Extend the % motion for Python files | [raimon49/requirements.txt.vim] | Python requirements file format | [StanAngeloff/php.vim] | Up-to-date PHP syntax file (5.3 โ€“ 7.1 support) | [tbastos/vim-lua] | Lua 5.3 syntax and indentation improved support | [vim-ruby/vim-ruby] | Ruby support | [keith/swift.vim] | Swift support | [rust-lang/rust.vim] | Rust support | [vim-jp/syntax-vim-ex] | Improved Vim syntax highlighting | [chrisbra/csv.vim] | Handling column separated data | [tpope/vim-git] | Git runtime files | [ekalinin/Dockerfile.vim] | Syntax and snippets for Dockerfile | [tmux-plugins/vim-tmux] | Plugin for tmux.conf | [MTDL9/vim-log-highlighting] | Syntax highlighting for generic log files | [cespare/vim-toml] | Syntax for TOML | [mboughaba/i3config.vim] | i3 window manager config syntax | [dag/vim-fish] | Fish shell edit support | [jstrater/mpvim] | Macports portfile configuration files | [robbles/logstash.vim] | Highlights logstash configuration files | [lifepillar/pgsql.vim] | PostgreSQL syntax and indent | [chr4/nginx.vim] | Improved nginx syntax and indent | [towolf/vim-helm] | Syntax for Helm templates (yaml + gotmpl + sprig) | [udalov/kotlin-vim] | Kotlin syntax and indent | [reasonml-editor/vim-reason-plus] | Reason syntax and indent | [pearofducks/ansible-vim] | Improved YAML support for Ansible | [hashivim/vim-terraform] | Base Terraform integration #### Commands | Name | Description | -------------- | ---------------------- | [Shougo/defx.nvim] | Dark powered file explorer implementation | [kristijanhusak/defx-git] | Git status implementation for Defx | [kristijanhusak/defx-icons] | Filetype icons for Defx | [tyru/caw.vim] | Robust comment plugin with operator support | [Shougo/context_filetype.vim] | Context filetype detection for nested code | [lambdalisue/fin.vim] | Filter the buffer content in-place | [mbbill/undotree] | Ultimate undo history visualizer | [jreybert/vimagit] | Ease your git work-flow within Vim | [tweekmonster/helpful.vim] | Display vim version numbers in docs | [lambdalisue/gina.vim] | Asynchronously control git repositories | [mhinz/vim-grepper] | Helps you win at grep | [kana/vim-altr] | Switch to the alternate file without interaction | [Shougo/vinarise.vim] | Hex editor | [guns/xterm-color-table.vim] | Display 256 xterm colors with their RGB equivalents | [cocopon/colorswatch.vim] | Generate a beautiful color swatch for the current buffer | [dstein64/vim-startuptime] | Visually profile Vim's startup time | [lambdalisue/suda.vim] | An alternative sudo.vim for Vim and Neovim | [liuchengxu/vim-which-key] | Shows key-bindings in pop-up | [brooth/far.vim] | Fast find and replace plugin | [pechorin/any-jump.vim] | Jump to any definition and references without overhead | [jaawerth/nrun.vim] | "which" and "exec" functions targeted at local node project bin | [Vigemus/iron.nvim] | Interactive REPL over Neovim | [kana/vim-niceblock] | Make blockwise Visual mode more useful | [t9md/vim-choosewin] | Choose window to use, like tmux's 'display-pane' | [wfxr/minimap.vim] | Blazing fast minimap for vim, powered by code-minimap | [mzlogin/vim-markdown-toc] | Generate table of contents for Markdown files | [reedes/vim-wordy] | Uncover usage problems in your writing | [liuchengxu/vista.vim] | Viewer & Finder for LSP symbols and tags in Vim | [junegunn/fzf] | Powerful command-line fuzzy finder | [junegunn/fzf.vim] | Fzf integration | [Ron89/thesaurus_query.vim] | Multi-language thesaurus query and replacement #### Interface | Name | Description | -------------- | ---------------------- | [itchyny/vim-gitbranch] | Lightweight git branch detection | [itchyny/vim-parenmatch] | Efficient alternative to the standard matchparen plugin | [haya14busa/vim-asterisk] | Improved * motions | [rhysd/accelerated-jk] | Up/down movement acceleration | [haya14busa/vim-edgemotion] | Jump to the edge of block | [t9md/vim-quickhl] | Highlight words quickly | [rafi/vim-sidemenu] | Small side-menu useful for terminal users | [machakann/vim-highlightedyank] | Make the yanked region apparent | [itchyny/cursorword] | Underlines word under cursor | [airblade/vim-gitgutter] | Show git changes at Vim gutter and un/stages hunks | [kshenoy/vim-signature] | Display and toggle marks | [nathanaelkane/vim-indent-guides] | Visually display indent levels in code | [rhysd/committia.vim] | Pleasant editing on Git commit messages | [junegunn/goyo] | Distraction-free writing | [junegunn/limelight] | Hyperfocus-writing | [itchyny/calendar.vim] | Calendar application | [deris/vim-shot-f] | Highlight characters to move directly with f/t/F/T | [vimwiki/vimwiki] | Personal Wiki for Vim | [norcalli/nvim-colorizer.lua] | The fastest Neovim colorizer #### Completion & Code-Analysis | Name | Description | -------------- | ---------------------- | [prabirshrestha/async.vim] | Normalize async job control API for Vim and Neovim | [prabirshrestha/asyncomplete.vim] | Async-completion in pure Vimscript for Vim8 and Neovim | [prabirshrestha/asyncomplete-lsp.vim] | Provide Language Server Protocol autocompletion source | [prabirshrestha/vim-lsp] | Async Language Server Protocol plugin for Vim and Neovim | [mattn/vim-lsp-settings] | Auto LSP configurations for vim-lsp | [Shougo/neco-vim] | Completion source for Vimscript | [prabirshrestha/asyncomplete-necovim.vim] | Provides syntax autocomplete via neco-vim | [prabirshrestha/asyncomplete-buffer.vim] | Provides buffer autocomplete | [prabirshrestha/asyncomplete-tags.vim] | Provides tag autocomplete via vim tagfiles | [prabirshrestha/asyncomplete-file.vim] | Provides file autocomplete | [wellle/tmux-complete.vim] | Completion of words in adjacent tmux panes | [prabirshrestha/asyncomplete-ultisnips.vim] | Provides UltiSnips autocomplete | [SirVer/ultisnips] | Ultimate snippet solution | [honza/vim-snippets] | Community-maintained snippets for programming languages | [mattn/emmet-vim] | Provides support for expanding abbreviations alรก emmet | [ludovicchabant/vim-gutentags] | Manages your tag files | [Raimondi/delimitMate] | Auto-completion for quotes, parens, brackets #### Denite & Clap | Name | Description | -------------- | ---------------------- | [Shougo/denite.nvim] | Dark powered asynchronous unite all interfaces | [Shougo/neomru.vim] | Denite plugin for MRU | [Shougo/neoyank.vim] | Denite plugin for yank history | [Shougo/junkfile.vim] | Denite plugin for temporary files | [chemzqm/unite-location] | Denite location & quickfix lists | [rafi/vim-denite-session] | Browse and open sessions | [rafi/vim-denite-z] | Filter and browse Z (jump around) data file | [liuchengxu/vim-clap] | Modern performant generic finder and dispatcher #### Operators & Text Objects | Name | Description | -------------- | ---------------------- | [kana/vim-operator-user] | Define your own custom operators | [kana/vim-operator-replace] | Operator to replace text with register content | [machakann/vim-sandwich] | Search, select, and edit sandwich text objects | [kana/vim-textobj-user] | Create your own text objects | [terryma/vim-expand-region] | Visually select increasingly larger regions of text | [AndrewRadev/sideways.vim] | Match function arguments | [AndrewRadev/splitjoin.vim] | Transition code between multi-line and single-line | [AndrewRadev/linediff.vim] | Perform diffs on blocks of code | [AndrewRadev/dsf.vim] | Delete surrounding function call | [kana/vim-textobj-function] | Text objects for functions [Shougo/dein.vim]: https://github.com/Shougo/dein.vim [rafi/awesome-colorschemes]: https://github.com/rafi/awesome-vim-colorschemes [thinca/vim-localrc]: https://github.com/thinca/vim-localrc [romainl/vim-cool]: https://github.com/romainl/vim-cool [sgur/vim-editorconfig]: https://github.com/sgur/vim-editorconfig [christoomey/tmux-navigator]: https://github.com/christoomey/vim-tmux-navigator [tpope/vim-sleuth]: https://github.com/tpope/vim-sleuth [antoinemadec/FixCursorHold.nvim]: https://github.com/antoinemadec/FixCursorHold.nvim [roxma/nvim-yarp]: https://github.com/roxma/nvim-yarp [roxma/vim-hug-neovim-rpc]: https://github.com/roxma/vim-hug-neovim-rpc [hail2u/vim-css3-syntax]: https://github.com/hail2u/vim-css3-syntax [othree/csscomplete.vim]: https://github.com/othree/csscomplete.vim [cakebaker/scss-syntax.vim]: https://github.com/cakebaker/scss-syntax.vim [groenewege/vim-less]: https://github.com/groenewege/vim-less [iloginow/vim-stylus]: https://github.com/iloginow/vim-stylus [mustache/vim-mustache-handlebars]: https://github.com/mustache/vim-mustache-handlebars [digitaltoad/vim-pug]: https://github.com/digitaltoad/vim-pug [othree/html5.vim]: https://github.com/othree/html5.vim [plasticboy/vim-markdown]: https://github.com/plasticboy/vim-markdown [pangloss/vim-javascript]: https://github.com/pangloss/vim-javascript [HerringtonDarkholme/yats.vim]: https://github.com/HerringtonDarkholme/yats.vim [MaxMEllon/vim-jsx-pretty]: https://github.com/MaxMEllon/vim-jsx-pretty [leafOfTree/vim-svelte-plugin]: https://github.com/leafOfTree/vim-svelte-plugin [heavenshell/vim-jsdoc]: https://github.com/heavenshell/vim-jsdoc [jparise/vim-graphql]: https://github.com/jparise/vim-graphql [moll/vim-node]: https://github.com/moll/vim-node [kchmck/vim-coffee-script]: https://github.com/kchmck/vim-coffee-script [elzr/vim-json]: https://github.com/elzr/vim-json [posva/vim-vue]: https://github.com/posva/vim-vue [vim-python/python-syntax]: https://github.com/vim-python/python-syntax [Vimjas/vim-python-pep8-indent]: https://github.com/Vimjas/vim-python-pep8-indent [vim-scripts/python_match.vim]: https://github.com/vim-scripts/python_match.vim [raimon49/requirements.txt.vim]: https://github.com/raimon49/requirements.txt.vim [StanAngeloff/php.vim]: https://github.com/StanAngeloff/php.vim [tbastos/vim-lua]: https://github.com/tbastos/vim-lua [vim-ruby/vim-ruby]: https://github.com/vim-ruby/vim-ruby [keith/swift.vim]: https://github.com/keith/swift.vim [rust-lang/rust.vim]: https://github.com/rust-lang/rust.vim [vim-jp/syntax-vim-ex]: https://github.com/vim-jp/syntax-vim-ex [chrisbra/csv.vim]: https://github.com/chrisbra/csv.vim [tpope/vim-git]: https://github.com/tpope/vim-git [ekalinin/Dockerfile.vim]: https://github.com/ekalinin/Dockerfile.vim [tmux-plugins/vim-tmux]: https://github.com/tmux-plugins/vim-tmux [MTDL9/vim-log-highlighting]: https://github.com/MTDL9/vim-log-highlighting [cespare/vim-toml]: https://github.com/cespare/vim-toml [mboughaba/i3config.vim]: https://github.com/mboughaba/i3config.vim [dag/vim-fish]: https://github.com/dag/vim-fish [jstrater/mpvim]: https://github.com/jstrater/mpvim [robbles/logstash.vim]: https://github.com/robbles/logstash.vim [lifepillar/pgsql.vim]: https://github.com/lifepillar/pgsql.vim [chr4/nginx.vim]: https://github.com/chr4/nginx.vim [towolf/vim-helm]: https://github.com/towolf/vim-helm [udalov/kotlin-vim]: https://github.com/udalov/kotlin-vim [reasonml-editor/vim-reason-plus]: https://github.com/reasonml-editor/vim-reason-plus [pearofducks/ansible-vim]: https://github.com/pearofducks/ansible-vim [hashivim/vim-terraform]: https://github.com/hashivim/vim-terraform [Shougo/defx.nvim]: https://github.com/Shougo/defx.nvim [kristijanhusak/defx-git]: https://github.com/kristijanhusak/defx-git [kristijanhusak/defx-icons]: https://github.com/kristijanhusak/defx-icons [tyru/caw.vim]: https://github.com/tyru/caw.vim [Shougo/context_filetype.vim]: https://github.com/Shougo/context_filetype.vim [lambdalisue/fin.vim]: https://github.com/lambdalisue/fin.vim [mbbill/undotree]: https://github.com/mbbill/undotree [jreybert/vimagit]: https://github.com/jreybert/vimagit [tweekmonster/helpful.vim]: https://github.com/tweekmonster/helpful.vim [lambdalisue/gina.vim]: https://github.com/lambdalisue/gina.vim [mhinz/vim-grepper]: https://github.com/mhinz/vim-grepper [kana/vim-altr]: https://github.com/kana/vim-altr [Shougo/vinarise.vim]: https://github.com/Shougo/vinarise.vim [guns/xterm-color-table.vim]: https://github.com/guns/xterm-color-table.vim [cocopon/colorswatch.vim]: https://github.com/cocopon/colorswatch.vim [dstein64/vim-startuptime]: https://github.com/dstein64/vim-startuptime [lambdalisue/suda.vim]: https://github.com/lambdalisue/suda.vim [liuchengxu/vim-which-key]: https://github.com/liuchengxu/vim-which-key [brooth/far.vim]: https://github.com/brooth/far.vim [pechorin/any-jump.vim]: https://github.com/pechorin/any-jump.vim [jaawerth/nrun.vim]: https://github.com/jaawerth/nrun.vim [Vigemus/iron.nvim]: https://github.com/Vigemus/iron.nvim [kana/vim-niceblock]: https://github.com/kana/vim-niceblock [t9md/vim-choosewin]: https://github.com/t9md/vim-choosewin [wfxr/minimap.vim]: https://github.com/wfxr/minimap.vim [mzlogin/vim-markdown-toc]: https://github.com/mzlogin/vim-markdown-toc [reedes/vim-wordy]: https://github.com/reedes/vim-wordy [liuchengxu/vista.vim]: https://github.com/liuchengxu/vista.vim [junegunn/fzf]: https://github.com/junegunn/fzf [junegunn/fzf.vim]: https://github.com/junegunn/fzf.vim [Ron89/thesaurus_query.vim]: https://github.com/Ron89/thesaurus_query.vim [itchyny/vim-gitbranch]: https://github.com/itchyny/vim-gitbranch [itchyny/vim-parenmatch]: https://github.com/itchyny/vim-parenmatch [haya14busa/vim-asterisk]: https://github.com/haya14busa/vim-asterisk [rhysd/accelerated-jk]: https://github.com/rhysd/accelerated-jk [haya14busa/vim-edgemotion]: https://github.com/haya14busa/vim-edgemotion [t9md/vim-quickhl]: https://github.com/t9md/vim-quickhl [rafi/vim-sidemenu]: https://github.com/rafi/vim-sidemenu [machakann/vim-highlightedyank]: https://github.com/machakann/vim-highlightedyank [itchyny/cursorword]: https://github.com/itchyny/vim-cursorword [airblade/vim-gitgutter]: https://github.com/airblade/vim-gitgutter [kshenoy/vim-signature]: https://github.com/kshenoy/vim-signature [nathanaelkane/vim-indent-guides]: https://github.com/nathanaelkane/vim-indent-guides [rhysd/committia.vim]: https://github.com/rhysd/committia.vim [junegunn/goyo]: https://github.com/junegunn/goyo.vim [junegunn/limelight]: https://github.com/junegunn/limelight.vim [itchyny/calendar.vim]: https://github.com/itchyny/calendar.vim [deris/vim-shot-f]: https://github.com/deris/vim-shot-f [vimwiki/vimwiki]: https://github.com/vimwiki/vimwiki [norcalli/nvim-colorizer.lua]: https://github.com/norcalli/nvim-colorizer.lua [prabirshrestha/async.vim]: https://github.com/prabirshrestha/async.vim [prabirshrestha/asyncomplete.vim]: https://github.com/prabirshrestha/asyncomplete.vim [prabirshrestha/asyncomplete-lsp.vim]: https://github.com/prabirshrestha/asyncomplete-lsp.vim [prabirshrestha/vim-lsp]: https://github.com/prabirshrestha/vim-lsp [mattn/vim-lsp-settings]: https://github.com/mattn/vim-lsp-settings [Shougo/neco-vim]: https://github.com/Shougo/neco-vim [prabirshrestha/asyncomplete-necovim.vim]: https://github.com/prabirshrestha/asyncomplete-necovim.vim [prabirshrestha/asyncomplete-buffer.vim]: https://github.com/prabirshrestha/asyncomplete-buffer.vim [prabirshrestha/asyncomplete-tags.vim]: https://github.com/prabirshrestha/asyncomplete-tags.vim [prabirshrestha/asyncomplete-file.vim]: https://github.com/prabirshrestha/asyncomplete-file.vim [wellle/tmux-complete.vim]: https://github.com/wellle/tmux-complete.vim [prabirshrestha/asyncomplete-ultisnips.vim]: https://github.com/prabirshrestha/asyncomplete-ultisnips.vim [SirVer/ultisnips]: https://github.com/SirVer/ultisnips [honza/vim-snippets]: https://github.com/honza/vim-snippets [mattn/emmet-vim]: https://github.com/mattn/emmet-vim [ludovicchabant/vim-gutentags]: https://github.com/ludovicchabant/vim-gutentags [Raimondi/delimitMate]: https://github.com/Raimondi/delimitMate [Shougo/denite.nvim]: https://github.com/Shougo/denite.nvim [Shougo/neomru.vim]: https://github.com/Shougo/neomru.vim [Shougo/neoyank.vim]: https://github.com/Shougo/neoyank.vim [Shougo/junkfile.vim]: https://github.com/Shougo/junkfile.vim [chemzqm/unite-location]: https://github.com/chemzqm/unite-location [rafi/vim-denite-session]: https://github.com/rafi/vim-denite-session [rafi/vim-denite-z]: https://github.com/rafi/vim-denite-z [liuchengxu/vim-clap]: https://github.com/liuchengxu/vim-clap [kana/vim-operator-user]: https://github.com/kana/vim-operator-user [kana/vim-operator-replace]: https://github.com/kana/vim-operator-replace [machakann/vim-sandwich]: https://github.com/machakann/vim-sandwich [kana/vim-textobj-user]: https://github.com/kana/vim-textobj-user [terryma/vim-expand-region]: https://github.com/terryma/vim-expand-region [AndrewRadev/sideways.vim]: https://github.com/AndrewRadev/sideways.vim [AndrewRadev/splitjoin.vim]: https://github.com/AndrewRadev/splitjoin.vim [AndrewRadev/linediff.vim]: https://github.com/AndrewRadev/linediff.vim [AndrewRadev/dsf.vim]: https://github.com/AndrewRadev/dsf.vim [kana/vim-textobj-function]: https://github.com/kana/vim-textobj-function

Custom Key-mappings

Note that,

Key-mappings (๐Ÿ”Ž Click to expand/collapse)
Modes: ๐=normal ๐•=visual ๐’=select ๐ˆ=insert ๐‚=command
### Navigation | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | j / k | ๐ ๐• | Cursor moves through display-lines | `g` `j/k` | g+j / k | ๐ ๐• ๐’ | Jump to edge upward/downward | [haya14busa/vim-edgemotion] | gh / gl | ๐ ๐• | Easier line-wise movement | `g` `^/$` | Space+Space | ๐ ๐• | Toggle visual-line mode | `V` / Escape | v / V | ๐• | Expand/reduce selection | [terryma/vim-expand-region] | zl / zh | ๐ | Scroll horizontally and vertically wider | `z4` `l/h` | Ctrl+j | ๐ | Move to split below | [christoomey/tmux-navigator] | Ctrl+k | ๐ | Move to upper split | [christoomey/tmux-navigator] | Ctrl+h | ๐ | Move to left split | [christoomey/tmux-navigator] | Ctrl+l | ๐ | Move to right split | [christoomey/tmux-navigator] | Return | ๐ | Toggle fold | `za` | Shift+Return | ๐ | Focus the current fold by closing all others | `zMzvzt` | ]q or ]q | ๐ | Next/previous on quickfix list | `:cnext` / `:cprev` | ]l or ]l | ๐ | Next/previous on location-list | `:lnext` / `:lprev` | ]w or ]w | ๐ | Next/previous whitespace error | [plugin/whitespace.vim] | ]g or ]g | ๐ | Next/previous Git hunk | [airblade/vim-gitgutter] | ]d or ]d | ๐ | Next/previous LSP diagnostic | [mattn/vim-lsp-settings] | Ctrl+f | ๐‚ | Move cursor forwards in command | Right | Ctrl+b | ๐‚ | Move cursor backwards in command | Left | Ctrl+h | ๐‚ | Move cursor to the beginning in command | Home | Ctrl+l | ๐‚ | Move cursor to the end in command | End ### File Operations | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | Space+cd | ๐ | Switch to the directory of opened buffer | `:lcd %:p:h` | gf | ๐ ๐• | Open file under the cursor in a vsplit | `:rightbelow wincmd f` | Space+w | ๐ ๐• ๐’ | Write buffer to file | `:write` | Ctrl+s | ๐ ๐• ๐’ ๐‚ | Write buffer to file | `:write` ### Edit | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | Ctrl+Return | ๐ˆ | Expand emmet abbreviation | [mattn/emmet-vim] | Q | ๐ | Start/stop macro recording | `q` | gQ | ๐ | Play macro 'q' | `@q` | Shift+Return | ๐ˆ | Start new line from any cursor position | `o` | < | ๐• ๐’ | Indent to left and re-select | `> | ๐• ๐’ | Indent to right and re-select | `>gv|` | Tab | ๐• ๐’ | Indent to right and re-select | `>gv|` | Shift+Tab | ๐• ๐’ | Indent to left and re-select | `gc | ๐ ๐• ๐’ | Caw (comments plugin) prefix | [tyru/caw.vim] | gcc | ๐ ๐• ๐’ | Toggle comments | [tyru/caw.vim] | Space+v | ๐ ๐• ๐’ | Toggle single-line comments | [tyru/caw.vim] | Space+V | ๐ ๐• ๐’ | Toggle comment block | [tyru/caw.vim] | Space+j or k | ๐ ๐• | Move lines down/up | `:m` โ€ฆ | Space+d | ๐ ๐• | Duplicate line or selection | | Space+cn / cN | ๐ ๐• | Change current word in a repeatable manner | | Space+cp | ๐ | Duplicate paragraph | `yapp` | Space+cw | ๐ | Remove all spaces at EOL | `:%s/\s\+$//e` | Ctrl+g g | ๐ˆ | Jump outside of pair | [Raimondi/delimitMate] | sj / sk | ๐ | Join/split arguments | [AndrewRadev/splitjoin.vim] | dsf / csf | ๐ | Delete/change surrounding function call | [AndrewRadev/dsf.vim] ### Search & Replace | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | Space+f | ๐ | Filter lines in-place | [lambdalisue/fin.vim] | \* / # | ๐ ๐• | Search selection forward/backward | [haya14busa/vim-asterisk] | g\* / g# | ๐ ๐• | Search whole-word forward/backward | [haya14busa/vim-asterisk] | Backspace | ๐ | Match bracket | `%` | gp | ๐ | Select last paste | | sg | ๐• | Replace within selected area | `:s/โŒด/gc` | Ctrl+r | ๐• | Replace selection with step-by-step confirmation | `:%s/\V/โŒด/gc` ### Clipboard | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | p | ๐• ๐’ | Paste without yank | [kana/vim-operator-replace] | Y | ๐ | Yank to the end of line | `y$` | Space+y | ๐ | Copy relative file-path to clipboard | | Space+Y | ๐ | Copy absolute file-path to clipboard | ### Command & History | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | ! | ๐ | Shortcut for shell command | `:!` | g! | ๐ | Read vim command into buffer | `:put=execute('โŒด')` | Ctrl+n / p | ๐‚ | Switch history search pairs | โ†“ / โ†‘ | โ†“ / โ†‘ | ๐‚ | Switch history search pairs | `Ctrl` `n`/`p` ### Editor UI | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | Space+ts | ๐ | Toggle spell-checker | `:setlocal spell!` | Space+tn | ๐ | Toggle line numbers | `:setlocal nonumber!` | Space+tl | ๐ | Toggle hidden characters | `:setlocal nolist!` | Space+th | ๐ | Toggle highlighted search | `:set hlsearch!` | Space+tw | ๐ | Toggle wrap | `:setlocal wrap!` โ€ฆ | Space+ti | ๐ | Toggle indentation lines | [nathanaelkane/vim-indent-guides] | g1 | ๐ | Go to first tab | `:tabfirst` | g9 | ๐ | Go to last tab | `:tablast` | g5 | ๐ | Go to previous tab | `:tabprevious` | Ctrl+Tab | ๐ | Go to next tab | `:tabnext` | Ctrl+ShiftTab | ๐ | Go to previous tab | `:tabprevious` | Alt+j | ๐ | Go to next tab | `:tabnext` | Alt+k | ๐ | Go to previous tab | `:tabprevious` | Alt+{ | ๐ | Move tab backward | `:-tabmove` | Alt+} | ๐ | Move tab forward | `:+tabmove` | Space+h | ๐ | Show highlight groups for word | ### Custom Tools & Plugins | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | - | ๐ | Choose a window to edit | [t9md/vim-choosewin] | ;+c | ๐ | Open context-menu | [plugin/actionmenu.vim] | gK | ๐ | Open Zeal or Dash on some file-types | [plugin/devhelp.vim] | gCtrl+o | ๐ | Navigate to previous file on jumplist | [plugin/jumpfile.vim] | gCtrl+i | ๐ | Navigate to next file on jumplist | [plugin/jumpfile.vim] | Space+l | ๐ | Open side-menu helper | [rafi/vim-sidemenu] | Space+b | ๐ | Open structure window | [liuchengxu/vista.vim] | Space+a | ๐ | Show nearby tag in structure window | [liuchengxu/vista.vim] | Space+se | ๐ | Save current workspace session | [plugin/sessions.vim] | Space+sl | ๐ | Load workspace session | [plugin/sessions.vim] | Space+n/N | ๐ | Open alternative file | [kana/vim-altr] | Space+tc | ๐ | Enable scroll-context window | [wellle/context.vim] | Space+tp | ๐ | Peek scroll-context window | [wellle/context.vim] | Space+S | ๐ ๐• | Source selection | `y:execute @@` | Space+? | ๐ | Open the macOS dictionary on current word | `:!open dict://` | Space+P | ๐ | Use Marked 2 for real-time Markdown preview | [Marked 2] | Space+ml | ๐ | Append modeline to end of buffer | [config/mappings.vim] | Space+mda | ๐• | Sequentially mark region for diff | [AndrewRadev/linediff.vim] | Space+mdf | ๐• | Mark region for diff and compare if more than one | [AndrewRadev/linediff.vim] | Space+mds | ๐ | Shows the comparison for all marked regions | [AndrewRadev/linediff.vim] | Space+mdr | ๐ | Removes the signs denoting the diff regions | [AndrewRadev/linediff.vim] | Space+mg | ๐ | Open Magit | [jreybert/vimagit] | Space+mt | ๐ ๐• | Toggle highlighted word | [t9md/vim-quickhl] | Space+- | ๐ | Switch editing window with selected | [t9md/vim-choosewin] | Space+G | ๐ | Toggle distraction-free writing | [junegunn/goyo] | Space+gu | ๐ | Open undo-tree | [mbbill/undotree] | Space+K | ๐ | Thesaurus | [Ron89/thesaurus_query.vim] | Space+W | ๐ | VimWiki | [vimwiki/vimwiki] ### Window Management | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | q | ๐ | Quit window (and Vim, if last window) | `:quit` | Ctrl+q | ๐ | Remap to C-w | Ctrl+w | Ctrl+x | ๐ | Rotate window placement | `C-w` `x` | sv | ๐ | Horizontal split | `:split` | sg | ๐ | Vertical split | `:vsplit` | st | ๐ | Open new tab | `:tabnew` | so | ๐ | Close other windows | `:only` | sb | ๐ | Previous buffer | `:b#` | sc | ๐ | Close current buffer | `:close` | sx | ๐ | Delete buffer, leave blank window | `:enew โ”‚ bdelete` | sz | ๐ | Toggle window zoom | `:vertical resize โ”‚ resize` | ssv | ๐ | Split with previous buffer | `:split โ”‚ wincmd p โ”‚ e#` | ssg | ๐ | Vertical split with previous buffer | `:vsplit โ”‚ wincmd p โ”‚ e#` | sh | ๐ | Toggle colorscheme background=dark/light | `:set background` โ€ฆ | s- | ๐ | Lower solarized8 colorscheme contrast | `:colorscheme ` โ€ฆ | s= | ๐ | Raise solarized8 colorscheme contrast | `:colorscheme ` โ€ฆ ### Git Version Control | Key | Mode | Action | Plugin or Mapping | ----- |:----:| ------------------ | ------ | gs | ๐ | Preview hunk | [airblade/vim-gitgutter] | gS | ๐ ๐• ๐’ | Stage hunk | [airblade/vim-gitgutter] | Space+gr | ๐ | Revert hunk | [airblade/vim-gitgutter] | Space+ga | ๐ | Git add current file | [lambdalisue/gina.vim] | Space+gd | ๐ | Git diff | [lambdalisue/gina.vim] | Space+gc | ๐ | Git branches | [lambdalisue/gina.vim] | Space+gc | ๐ | Git commit | [lambdalisue/gina.vim] | Space+gb | ๐ | Git blame | [lambdalisue/gina.vim] | Space+gs | ๐ | Git status -s | [lambdalisue/gina.vim] | Space+gl | ๐ | Git log --all | [lambdalisue/gina.vim] | Space+gF | ๐ | Git fetch | [lambdalisue/gina.vim] | Space+gp | ๐ | Git push | [lambdalisue/gina.vim] | Space+go | ๐ ๐• | Open SCM detailed URL in browser | [lambdalisue/gina.vim] ### Plugin: Denite | Key | Mode | Action | ----- |:----:| ------------------ | ;r | ๐ | Resumes last Denite window | ;f | ๐ | File search | ;g | ๐ | Grep search | ;b | ๐ | Buffers | ;i | ๐ | Old files | ;x | ๐ | Most recently used files (MRU) | ;d | ๐ | Directories and MRU | ;v | ๐ ๐• | Yank history | ;l | ๐ | Location list | ;q | ๐ | Quick fix | ;m | ๐ | Marks | ;n | ๐ | Dein plugin list | ;j | ๐ | Jump points and change stack | ;u | ๐ | Junk files | ;o | ๐ | Outline tags | ;s | ๐ | Sessions | ;t | ๐ | Tag list | ;p | ๐ | Jumps | ;h | ๐ | Help | ;w | ๐ | Memo list | ;z | ๐ | Z (jump around) | ;; | ๐ | Command history | ;/ | ๐ | Buffer lines | ;\* | ๐ | Search word under cursor with lines | Space+gt | ๐ | Find tags matching word under cursor | Space+gf | ๐ | Find files matching word under cursor | Space+gg | ๐ ๐• | Grep word under cursor | **Within _Denite_ window** || | jj or Escape | ๐ˆ | Leave Insert mode | i or / | ๐ | Enter Insert mode (filter input) | q or Escape | ๐ | Exit denite window | Tab or Shift+Tab | ๐ˆ | Next/previous candidate | Space | ๐ | Select candidate entry | dd | ๐ | Delete entry | p | ๐ | Preview entry | st | ๐ | Open in a new tab | sg | ๐ | Open in a vertical split | sv | ๐ | Open in a split | ' | ๐ | Quick-move | r | ๐ | Redraw | yy | ๐ | Yank | Tab | ๐ | List and choose action ### Plugin: Defx | Key | Mode | Action | ----- |:----:| ------------------ | ;e | ๐ | Open file-explorer (toggle) | ;a | ๐ | Focus current file in file-explorer | **Within _Defx_ window** || | j or k | ๐ | Move up and down the tree | l or Return | ๐ | Toggle collapse/expand directory or open file | h | ๐ | Collapse directory tree | t | ๐ | Expand directory tree recursively | . | ๐ | Toggle hidden files | Space | ๐ | Select entry | \* | ๐ | Invert selection (select all) | & or \ | ๐ | Change into current working directory | ~ | ๐ | Change to user home directory | u or Backspace | ๐ | Change into parent directory | u 2/3/4 | ๐ | Change into parent directory count | st | ๐ | Open file in new tab | sv | ๐ | Open file in a horizontal split | sg | ๐ | Open file in a vertical split | N | ๐ | Create new directories and/or files | K | ๐ | Create new directory | c / m / p | ๐ | Copy, move, and paste | r | ๐ | Rename file or directory | dd | ๐ | Trash selected files and directories | y | ๐ | Yank path to clipboard | w | ๐ | Toggle window size | ]g | ๐ | Next dirty git item | [g | ๐ | Previous dirty git item | x or gx | ๐ | Execute associated system application | gd | ๐ | Open git diff on selected file | gl | ๐ | Open terminal file explorer with tmux | gr | ๐ | Grep in current position | gf | ๐ | Find files in current position ### Plugin: Clap | Key | Mode | Action | ----- |:----:| ------------------ | **Within _Clap_ window** || | jj or Escape | ๐ˆ | Leave Insert mode | i | ๐ | Enter Insert mode (filter input) | q or Escape | ๐ | Exit clap window | Tab or Shift+Tab | ๐ˆ | Next/previous candidate | Space or \' | ๐ | Select candidate entry | st | ๐ | Open in a new tab | sg | ๐ | Open in a vertical split | sv | ๐ | Open in a split ### Plugin: Asyncomplete and Emmet | Key | Mode | Action | ----- |:----:| ------------------ | Tab / Shift-Tab | ๐ˆ | Navigate completion-menu | Enter | ๐ˆ | Select completion or expand snippet | Ctrl+j/k/d/u | ๐ˆ | Movement in completion pop-up | Ctrl+Return | ๐ˆ | Expand Emmet sequence | Ctrl+Space | ๐ˆ | Refresh and show candidates | Ctrl+y | ๐ˆ | Close pop-up | Ctrl+e | ๐ˆ | Cancel selection and close pop-up | Ctrl+l | ๐ˆ | Expand snippet at cursor | Tab / Shift-Tab | ๐ˆ ๐’ | Navigate snippet placeholders ### Plugin: Any-Jump | Key | Mode | Action | ----- |:----:| ------------------ | Space+ii | ๐ | Jump to definition under cursor | Space+ii | ๐• | Jump to selected text in visual mode | Space+ib | ๐ | Open previous opened file (after jump) | Space+il | ๐ | Open last closed search window again ### Plugin: Signature | Key | Mode | Action | ----- |:----:| ------------------ | m/ or m? | ๐ | Show list of buffer marks/markers | mm | ๐ | Toggle mark on current line | m, | ๐ | Place next mark | m a-z | ๐ | Place specific mark (Won't work for: mm, mn, mp) | dm a-z | ๐ | Remove specific mark (Won't work for: mm, mn, mp) | mn | ๐ | Jump to next mark | mp | ๐ | Jump to previous mark | ]= | ๐ | Jump to next marker | [= | ๐ | Jump to previous marker | m- | ๐ | Purge all on current line | m Space | ๐ | Purge marks | m Backspace | ๐ | Purge markers

Credits & Contribution

Big thanks to the dark knight Shougo.

่งฃๅ†ณ mac tmux ไธ‹ neovim ๆ— ๆณ•ๅคๅˆถๅˆฐๅ‰ช่ดดๆฟ็š„้—ฎ้ข˜

# https://github.com/tmux/tmux/issues/543
brew install reattach-to-user-namespace
# then edit your .tmux.conf
set -g default-shell $SHELL
set -g default-command "reattach-to-user-namespace -l ${SHELL}"
# In .vimrc or ~/.config/nvim/init.vim (I use Neovim):
set clipboard=unnamed
# reload tmux config
tmux source-file ~/.tmux.conf

่งฃๅ†ณ vim gutter ไฝฟ็”จ emoji ๆ–‡ๆœฌๆธฒๆŸ“้—ฎ้ข˜

See this Vim text rendering off by one issue

ๅฆ‚ๆžœไฝ ไฝฟ็”จไบ† Iterm2 + neovim๏ผŒๅนถไธ”ๅœจ gutter ๆ ไฝฟ็”จไบ† emoji ่กจๆƒ…๏ผŒๆฏ”ๅฆ‚ vim-gitgutter, vim-ale ็ญ‰ๆ’ไปถ็š„ๆ็คบๆ˜ฏ emojiใ€‚ ่ฏทๅ‹พ้€‰ Iterm2->Profiles->Text->Use Unicode versoin 9 widths

See this issue https://stackoverflow.com/questions/43107435/emoji-display-issue-in-vim-with-tmux/52142277#52142277

ag (The Silver Searcher) ignore file ๆœ็ดขๅฟฝ็•ฅๆ–‡ไปถ

ๆœ€ๅฅฝๅœจไฝ ็š„ๆ น็›ฎๅฝ•ๆˆ–่€…้กน็›ฎ็›ฎๅฝ•ๅŠ ไธŠ ag ๆœ็ดข้œ€่ฆๅฟฝ็•ฅ็š„ๆ–‡ไปถ๏ผŒ้˜ฒๆญข denite ๆœ็ดขๅ ็”จๅคชๅคงๅ†…ๅญ˜๏ผŒๅนถไธ”ๅŠ ้€Ÿ็ญ›้€‰ๅ†…ๅฎน

add ~/.agignore file:

node_modules
.git
.ropeproject

gen-py/
gen-go/
eggs/
.tmp/
vendor/

*.swp
*.pyc

fzf.vim :Ag ๆœ็ดข็ป“ๆžœๅ‘้€ๅˆฐ quickfix ็ช—ๅฃ

ไฝฟ็”จ fzf.vim ๆœ‰ไธช :Ag ๅ‘ฝไปคๆœ็ดข็š„ๆ—ถๅ€™ๅฏไปฅๆŠŠ็ป“ๆžœๅ‘้€ๅˆฐ quickfix ็ช—ๅฃใ€‚้€šๅธธๆœ็ดข็ป“ๆžœๅฏไปฅไฝฟ็”จ ctrl+n/p ๆฅ้€‰ๆ‹ฉ

ไฝฟ็”จๆ–นๅผ๏ผš

ref: https://github.com/junegunn/fzf.vim/issues/586

Coc.Nvim

If you want to use coc.nvim for Golang completion, please see this article ใ€Švim as a go ideใ€‹. Now you can use coc branch for go completion(use gopls). If you use python, type CocInstall coc-python install python coc plugin.

(ๆณจๆ„็ฌ”่€…ๅŸบไบŽๅผ€ๆบ้…็ฝฎไปฃ็ ไฟฎๆ”น๏ผŒ็ฌ”่€…็š„ leader ๆ˜ฏ "," ่€Œไธๆ˜ฏๆ–‡ๆกฃไธญ็š„ Space)