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)
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
Python 3 (brew install python)
Neovim or Vim (brew install neovim and/or brew install vim)
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/rafi/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 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! π
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.
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()).
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
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
ag ggreer/the_silver_searcher
(macOS: brew install the_silver_searcher)
Jump around with z : rupa/z
(macOS: brew install z)
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)
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 }
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 .
List (π Click to expand/collapse)
Completion & Code-Analysis
Note that,
Leader key set as Space
Local-leader set as ; and used for navigation and search
(Denite and Defx)
Key-mappings
(π Click to expand/collapse)
Key
Mode
Action
Space
All
Leader key
;
All
Local Leader key
β β β β
Normal
Resize splits (* Enable g:elite_mode in .vault.vim)
; +c
Normal
Open context-menu
Space +l
Normal
Open side-menu helper
Backspace
Normal
Match bracket (%)
gK
Normal
Open Zeal or Dash on some file-types
Y
Normal
Yank to the end of line (y$)
Return
Normal
Toggle fold (za)
Shift +Return
Normal
Focus the current fold by closing all others (zMzvzt)
Shift +Return
Insert
Start new line from any cursor position (<C-o>o)
j / k
Normal/Visual
Cursor moves through display-lines (g/jk)
Ctrl +f
Normal
Smart page forward (C-f/C-d)
Ctrl +b
Normal
Smart page backwards (C-b/C-u)
Ctrl +e
Normal
Smart scroll down (3C-e/j)
Ctrl +y
Normal
Smart scroll up (3C-y/k)
Ctrl +q
Normal
Remap to Ctrl +w
Ctrl +x
Normal
Rotate window placement
!
Normal
Shortcut for :!
<<
Visual
Indent to left and re-select
>>
Visual
Indent to right and re-select
Tab
Visual
Indent to right and re-select
Shift +Tab
Visual
Indent to left and re-select
gh
Normal
Show highlight groups for word
gp
Normal
Select last paste
Q
Normal
Start/stop macro recording
gQ
Normal
Play macro 'q'
Space +j or k
Normal/Visual
Move lines down/up
Space +cp
Normal
Duplicate paragraph
Space +cn / cN
Normal/Visual
Change current word in a repeatable manner
s g
Visual
Replace within selected area
Ctrl +a
Command
Navigation in command line
Ctrl +b
Command
Move cursor backward in command line
Ctrl +f
Command
Move cursor forward in command line
Ctrl +r
Visual
Replace selection with step-by-step confirmation
Ctrl +Shift +q
Normal
Exit Vim, confirm unsaved changes
Space +cw
Normal
Remove all spaces at EOL
Space +Space
Normal
Enter visual line-mode
Space +sl
Normal
Load workspace session
Space +se
Normal
Save current workspace session
Space +d
Normal/Visual
Duplicate line or selection
Space +S
Normal/Visual
Source selection
Space +ml
Normal
Append modeline
Key
Mode
Action
Space +cd
Normal
Switch to the directory of opened buffer (:lcd %:p:h)
Space +w
Normal/Visual
Write (:w)
Space +y
Normal
Copy relative file-path to clipboard
Space +Y
Normal
Copy absolute file-path to clipboard
Ctrl +s
All
Write (:w)
Key
Mode
Action
Space +ti
Normal
Toggle indentation lines
Space +ts
Normal
Toggle spell-checker (:setlocal spell!)
Space +tn
Normal
Toggle line numbers (:setlocal nonumber!)
Space +tl
Normal
Toggle hidden characters (:setlocal nolist!)
Space +th
Normal
Toggle highlighted search (:set hlsearch!)
Space +tw
Normal
Toggle wrap (:setlocal wrap! breakindent!)
g1
Normal
Go to first tab (:tabfirst)
g9
Normal
Go to last tab (:tablast)
g5
Normal
Go to previous tab (:tabprevious)
Ctrl +j
Normal
Move to split below
Ctrl +k
Normal
Move to upper split
Ctrl +h
Normal
Move to left split
Ctrl +l
Normal
Move to right split
*
Visual
Search selection forwards
#
Visual
Search selection backwards
] +c or q
Normal
Next on location/quickfix list
] +c or q
Normal
Previous on location/quickfix list
s +h
Normal
Toggle colorscheme background dark/light
s +-
Normal
Lower colorscheme contrast (Support solarized8)
s +=
Normal
Raise colorscheme contrast (Support solarized8)
Key
Mode
Action
q
Normal
Quit window (and Vim, if last window)
Ctrl +Tab
Normal
Next tab
Ctrl +Shift +Tab
Normal
Previous tab
s +v
Normal
Horizontal split (:split)
s +g
Normal
Vertical split (:vsplit)
s +t
Normal
Open new tab (:tabnew)
s +o
Normal
Close other windows (:only)
s +b
Normal
Previous buffer (:b#)
s +c
Normal
Closes current buffer (:close)
s +x
Normal
Remove buffer, leave blank window
Space +sv
Normal
Split with previous buffer
Space +sg
Normal
Vertical split with previous buffer
Key
Mode
Action
; +r
Normal
Resumes last Denite window
; +f
Normal
File search
; +b
Normal
Buffers and MRU
; +d
Normal
Directories
; +v
Normal/Visual
Yank history
; +l
Normal
Location list
; +q
Normal
Quick fix
; +n
Normal
Dein plugin list
; +g
Normal
Grep search
; +j
Normal
Jump points
; +u
Normal
Junk files
; +o
Normal
Outline tags
; +s
Normal
Sessions
; +t
Normal
Tag list
; +p
Normal
Jump to previous position
; +h
Normal
Help
; +m
Normal
Memo list
; +z
Normal
Z (jump around)
; +/
Normal
Buffer lines
; +*
Normal
Match word under cursor with lines
; +;
Normal
Command history
Space +gl
Normal
Git log (all)
Space +gs
Normal
Git status
Space +gc
Normal
Git branches
Space +gt
Normal
Find tags matching word under cursor
Space +gf
Normal
Find file matching word under cursor
Space +gg
Normal/Visual
Grep word under cursor
Within Denite window
jj or kk
Insert
Leave Insert mode
q or Escape
Normal
Exit denite window
Space
Normal
Select entry
Tab
Normal
List and choose action
i
Normal
Open filter input
dd
Normal
Delete entry
p
Normal
Preview entry
st
Normal
Open in a new tab
sg
Normal
Open in a vertical split
sv
Normal
Open in a split
r
Normal
Redraw
yy
Normal
Yank
'
Normal
Quick move
Key
Mode
Action
; +e
Normal
Open file explorer (toggle)
; +a
Normal
Open file explorer and select current file
Within Defx window
h
Normal
Collapse directory tree
j or k
Normal
Move up and down the tree
Return or l
Normal
Toggle collapse/expand directory or open file
Space
Normal
Select current file or directory
*
Normal
Invert selection (select all)
Backspace
Normal
Move into the parent directory
& or </kbd>
Normal
Move to project root
~
Normal
Move to user home directory
st
Normal
Open file in new tab
sv
Normal
Open file in a horizontal split
sg
Normal
Open file in a vertical split
N
Normal
Create new directories and/or files
K
Normal
Create new directory
c / m / p
Normal
Copy, move, and paste
r
Normal
Rename file or directory
dd
Normal
Delete selected files and directories
y
Normal
Yank selected item to clipboard
w
Normal
Toggle window size
] +g
Normal
Next dirty git item
[ +g
Normal
Previous dirty git item
x / gx
Normal
Execute associated system application
gd
Normal
Open git diff on selected file
gl
Normal
Open terminal file explorer
gr
Normal
Grep in selected directory
gf
Normal
Find files in selected directory
Plugin: Asyncomplete and Emmet
Key
Mode
Action
Tab / Shift-Tab
Insert
Navigate completion-menu
Enter
Insert
Select completion or expand snippet
Ctrl +j k d u
Insert
Movement in completion pop-up
Ctrl +Return
Insert
Expand Emmet sequence
Ctrl +Space
Insert
Refresh and show candidates
Ctrl +y
Insert
Close pop-up
Ctrl +e
Insert
Cancel selection and close pop-up
Ctrl +l
Insert
Expand snippet at cursor
Ctrl +f
Insert/select
Jump to next snippet placeholder
Ctrl +b
Insert/select
Jump to previous snippet placeholder
Plugin: Caw (comments)
Key
Mode
Action
gc
Normal/visual
Prefix
gcc
Normal/visual
Toggle comments
Space +v
Normal/visual
Toggle single-line comments
Space +V
Normal/visual
Toggle comment block
Key
Mode
Action
g +j
Normal/Visual
Jump to edge downwards
g +k
Normal/Visual
Jump to edge upwards
Key
Mode
Action
m + / or ?
Normal
Show list of buffer marks/markers
m + m
Normal
Toggle mark on current line
m + ,
Normal
Place next mark
m + a-z
Normal
Place specific mark (Won't work for: m , n , p )
d + m + a-z
Normal
Remove specific mark (Won't work for: m , n , p )
m + n
Normal
Jump to next mark
m + p
Normal
Jump to previous mark
] + =
Normal
Jump to next marker
[ + =
Normal
Jump to previous marker
m + -
Normal
Purge all on current line
m + Space
Normal
Purge marks
m + Backspace
Normal
Purge markers
Key
Mode
Action
Space +ga
Normal
Git add current file
Space +gS
Normal
Git status
Space +gd
Normal
Git diff
Space +gD
Normal
Close diff
Space +gc
Normal
Git commit
Space +gb
Normal
Git blame
Space +gB
Normal
Open in browser
Space +gp
Normal
Git push
Key
Mode
Action
[ +g
Normal
Jump to next hunk
] +g
Normal
Jump to previous hunk
g +S
Normal
Stage hunk
Space +gr
Normal
Revert hunk
g +s
Normal
Preview hunk
Key
Mode
Action
Space +mda
Visual
Sequentially mark region for diff
Space +mdf
Visual
Mark region for diff and compare if more than one
Space +mds
Normal
Shows the comparison for all marked regions
Space +mdr
Normal
Removes the signs denoting the diff regions
Key
Mode
Action
v / V
Visual/select
Expand/reduce selection (expand-region)
-
Normal
Choose a window to edit (choosewin)
Space +mg
Normal
Open Magit
Space +mt
Normal/Visual
Toggle highlighted word (quickhl)
Space +-
Normal
Switch editing window with selected (choosewin)
Space +o
Normal/Visual
Open SCM detailed URL in browser (:OpenSCM)
Space +t
Normal
Open structure window (:Vista)
Space +a
Normal
Show nearby tag in structure window (:Vista show)
Space +G
Normal
Toggle distraction-free writing (goyo)
Space +gu
Normal
Open undo-tree
Space +W
Normal
VimWiki
Space +K
Normal
Thesaurus
Big thanks to the dark knight Shougo .