Rafael Bodill's Neo/vim Config
Lean mean Neo/vim machine, 30-45ms startup time.
Best with Neovim or Vim8 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
- Fast startup time
- Robust, yet light-weight
- Lazy-load 95% of plugins with Shougo/dein.vim
- Custom side-menu (try it out! Space+l)
- Custom context-menu (try it! ;+c)
- Modular configuration (see structure)
- Auto-complete prabirshrestha/asyncomplete.vim extensive setup
- Shougo/denite.nvim centric work-flow (lists)
- Structure view with liuchengxu/vista.vim
- Open SCM detailed URL in OS browser
- Light-weight but informative status/tabline
- Easy customizable theme
- Premium color-schemes
- Central location for tags and sessions
Screenshot
Prerequisites
- Python 3 (
brew install python
) - Neovim or Vim (
brew install neovim
and/orbrew install vim
)
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
- Note: If you set a custom
$XDG_CONFIG_HOME
, use that instead of~/.config
in the commands above. Neovim follows the XDG base-directories convention, Vim doesn't.
2. Install the Python 3 pynvim
library. This is also needed for Vim 8
if you want to use Denite and Defx.
Neovim:
./venvs.sh
orpip3 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!
Language-Server Protocol (LSP)
To leverage LSP auto-completions and other functionalities, once you open a
file in Neo/vim, run :LspInstallServer
to use mattn/vim-lsp-settings
installation feature.
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
- Pragmata Pro (โฌ19 โ โฌ1,990): My preferred font
- Any of the Nerd 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
- macOS with Homebrew:
brew install shellcheck jsonlint yamllint tflint ansible-lint
brew install tidy-html5 proselint write-good
- Node.js based linters:
yarn global add eslint jshint jsxhint stylelint sass-lint
yarn global add markdownlint-cli raml-cop
- Python based linters:
pip3 install --user vim-vint pycodestyle pyflakes flake8
Recommended Tools
- ag ggreer/the_silver_searcher
(macOS:
brew install the_silver_searcher
)- and/or ripgrep: BurntSushi/ripgrep
(macOS:
brew install rg
)
- and/or ripgrep: BurntSushi/ripgrep
(macOS:
- Jump around with z: rupa/z
(macOS:
brew install z
)- or z.lua: acme/zlua
- Universal ctags for syntax tokenization
(macOS:
brew install universal-ctags/universal-ctags/universal-ctags
) - Fuzzy file finders:
fzf,
fzy, or
peco
(macOS:
brew install fzf
)
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: dense-analysis/ale, if: 0 }
Structure
- config/ - Configuration
- plugins/ - Plugin configurations
- filetype.vim - Language behavior
- general.vim - General configuration
- local.plugins.yaml - Custom user plugins
- local.vim - Custom user settings
- mappings.vim - Key-mappings
- plugins.yaml - My favorite Plugins!
- terminal.vim - Terminal configuration
- vimrc - Initialization
- ftplugin/ - Language specific custom settings
- plugin/ - Customized small plugins
- snippets/ - Personal code snippets
- themes/ - Colorscheme overrides
- filetype.vim - Custom filetype detection
Plugin Highlights
- Plugin management with cache and lazy loading for speed
- Auto-completion with Language-Server Protocol (LSP)
- Project-aware tabs and labels
- Defx as file-manager + Git status icons
- Extensive language extensions library
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 |
itchyny/vim-gitbranch | Lightweight git branch detection |
itchyny/vim-parenmatch | Efficient alternative to the standard matchparen plugin |
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 |
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 |
rhysd/vim-gfm-syntax | GitHub Flavored Markdown syntax highlight extension |
pangloss/vim-javascript | Enhanced Javascript syntax |
HerringtonDarkholme/yats.vim | Advanced TypeScript Syntax Highlighting |
MaxMEllon/vim-jsx-pretty | React JSX syntax pretty highlighting |
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 |
fatih/vim-go | Go development |
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 |
IN3D/vim-raml | Syntax and language settings for RAML |
towolf/vim-helm | Syntax for Helm templates (yaml + gotmpl + sprig) |
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 |
liuchengxu/vim-which-key | Shows key-bindings in pop-up |
mbbill/undotree | Ultimate undo history visualizer |
reedes/vim-wordy | Uncover usage problems in your writing |
brooth/far.vim | Fast find and replace plugin |
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 |
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 |
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' |
lambdalisue/suda.vim | An alternative sudo.vim for Vim and Neovim |
mzlogin/vim-markdown-toc | Generate table of contents for Markdown files |
chemzqm/vim-easygit | Git wrapper focus on simplity and usability |
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 |
---|---|
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 |
hotwatermorning/auto-git-diff | Display Git diff for interactive rebase |
rafi/vim-sidemenu | Small side-menu useful for terminal users |
machakann/vim-highlightedyank | Make the yanked region apparent |
wellle/context.vim | Show context of current visible code hierarchy |
itchyny/cursorword | Underlines word under cursor |
norcalli/nvim-colorizer.lua | The fastest Neovim colorizer |
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 |
vimwiki/vimwiki | Personal Wiki for Vim |
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-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 |
dense-analysis/ale | Check syntax asynchronously and fix files with LSP support |
mattn/emmet-vim | Provides support for expanding abbreviations alรก emmet |
ncm2/float-preview.nvim | Less annoying completion preview window |
ludovicchabant/vim-gutentags | Manages your tag files |
Raimondi/delimitMate | Auto-completion for quotes, parens, brackets |
Denite
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 |
chemzqm/denite-git | gitlog, gitstatus and gitchanged sources |
rafi/vim-denite-session | Browse and open sessions |
rafi/vim-denite-z | Filter and browse Z (jump around) data file |
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 |
osyo-manga/vim-textobj-multiblock | Handle bracket objects |
kana/vim-textobj-function | Text objects for functions |
Custom Key-mappings
Note that,
- Leader key set as ,
- Local-Leader key set as ; and used for navigation and search (Denite and Defx)
- Disable โ โ โ โ in normal mode by enabling
g:elite_mode
in.vault.vim
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 |
]c or ]c | ๐ | Next/previous Ale diagnostic | dense-analysis/ale |
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 | <C-o>o |
< | ๐ ๐ | Indent to left and re-select | <gv |
> | ๐ ๐ | Indent to right and re-select | `>gv |
Tab | ๐ ๐ | Indent to right and re-select | `>gv |
Shift+Tab | ๐ ๐ | Indent to left and re-select | <gv |
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 | yap<S-}>p |
Space+cw | ๐ | Remove all spaces at EOL | :%s/\s\+$//e |
Ctrl+Tab | ๐ | 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 |
---|---|---|---|
* / # | ๐ ๐ | 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 |
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+o | ๐ ๐ | Open SCM detailed URL in browser | plugin/browser.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 |
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 | chemzqm/vim-easygit |
Space+gd | ๐ | Git diff | chemzqm/vim-easygit |
Space+gc | ๐ | Git commit | chemzqm/vim-easygit |
Space+gb | ๐ | Git blame | chemzqm/vim-easygit |
Space+gF | ๐ | Git fetch | chemzqm/vim-easygit |
Space+gp | ๐ | Git push | chemzqm/vim-easygit |
Plugin: Denite
Key | Mode | Action |
---|---|---|
;r | ๐ | Resumes last Denite window |
;f | ๐ | File search |
;g | ๐ | Grep search |
;b | ๐ | Buffers and MRU |
;d | ๐ | Directories and MRU |
;v | ๐ ๐ | Yank history |
;l | ๐ | Location list |
;q | ๐ | Quick fix |
;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 |
;m | ๐ | Memo list |
;z | ๐ | Z (jump around) |
;; | ๐ | Command history |
;/ | ๐ | Buffer lines |
;* | ๐ | Search word under cursor with lines |
Space+gl | ๐ | Git log (all) |
Space+gs | ๐ | Git status |
Space+gc | ๐ | Git branches |
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 </kbd> | ๐ | 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: 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 |
Ctrl+f | ๐ ๐ | Jump to next snippet placeholder |
Ctrl+b | ๐ ๐ | Jump to previous snippet placeholder |
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 ๆฅ้ๆฉ
ไฝฟ็จๆนๅผ๏ผ
- :Ag ๆ็ดข้่ฆ็ๅ่ฏใ
:Ag word
- alt-a ๅ จ้ (ๆณจๆ MacOS iterm2: Settings -> Profiles -> Keys Left Option choose Esc+)
- alt-d ๅฏไปฅๅๆถ้ๆฉ
- Enter ๅณๅฏ๏ผ่ฟๆถๅๅฐฑๅฏไปฅๆๆ็ดข็ปๆๅ้ๅฐ quickfix ็ชๅฃ
ref: junegunn/fzf.vim#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.