Rafael Bodill's Neo/vim Config
Lean mean Neo/vim machine, 30-45ms startup time.
Best with Neovim or Vim 8 with +python3 extensions enabled.
- Fast startup time
- Robust, yet light-weight
- Lazy-load 95% of plugins with Shougo/dein.vim
- Custom side-menu (try it out! Leader+l)
- Modular configuration
- Denite (Unite's successor) centric work-flow
- Extensive Deoplete setup (auto-completion)
- Lightweight simple status/tabline
- Easy customizable theme
- Premium color-schemes
- Central location for tags
![Vim screenshot](https://camo.githubusercontent.com/e8e906fcec9ecc37b6f68f0a43bafe7a65a1574d509dc8831ee67f28276008af/687474703a2f2f726166692e696f2f7374617469632f696d672f70726f6a6563742f76696d2d636f6e6669672f66656174757265732e706e67)
- Python 3 (
brew install python
)
- Python 2 (
brew install python@2
)
- Neovim (Optional,
brew install neovim
)
- virtualenv for both python3 and python2:
pip2 install virtualenv
pip3 install virtualenv
1. Let's clone this repo! Clone to ~/.config/nvim
,
we'll also symlink it for Vim:
mkdir ~/.config
git clone git://github.com/rafi/vim-config.git ~/.config/nvim
ln -s ~/.config/nvim ~/.vim
- Note: If your system sets
$XDG_CONFIG_HOME
,
use that instead of ~/.config
in the code above.
Nvim follows the XDG base-directories convention.
2. If you are a first-time Neovim user, you need the pynvim
packages. Don't worry, run the script provided:
cd ~/.config/nvim
./venv.sh
3. Run make test
to test your nvim/vim version and compatibility.
4. Run make
to install all plugins.
Enjoy!
npm -g install jshint jsxhint jsonlint stylelint sass-lint
npm -g install raml-cop markdownlint-cli write-good
pip install --user pycodestyle pyflakes flake8 vim-vint proselint yamllint
Run make update
If you want to add your own configuration, create the config/local.vim
file
and add your personal settings there. This file is ignored by .gitignore
.
If you'd like to install plugins by yourself, create a
config/local.plugins.yaml
file and manage your own plugin collection.
- Package management with caching enabled and lazy loading
- Project-aware tabs and label
- NERDTree as file-manager + Git status icons
- Go completion via vim-go and gocode
- Javascript completion via Tern
- Python Jedi completion, PEP8 convention
- Languages: PHP, Ansible, css3, csv, json, less, markdown, mustache
- Helpers: Undo tree, bookmarks, git, tmux navigation,
hex editor, sessions, and much more.
Note that 95% of the plugins are lazy-loaded.
Note that,
- Leader key is set as Space
- Local-leader is set as ; and used for Denite & NERDTree
Key |
Mode |
Action |
Space |
All |
Leader |
; |
All |
Local Leader |
Arrows |
Normal |
Resize splits (* Enable g:elite_mode in .vault.vim ) |
Backspace |
Normal |
Match bracket (%) |
K |
Normal |
Open Zeal or Dash on some file types (except Python+Vim script) |
Y |
Normal |
Yank to the end of line (y$) |
<Return> |
Normal |
Toggle fold (za) |
S +<Return> |
Normal |
Focus the current fold by closing all others (zMza) |
S +<Return> |
Insert |
Start new line from any cursor position (<C-o>o) |
hjkl |
Normal |
Smart cursor movements (g/hjkl) |
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 :! |
} |
Normal |
After paragraph motion go to first non-blank char (}^) |
< |
Visual/Normal |
Indent to left and re-select |
> |
Visual/Normal |
Indent to right and re-select |
Tab |
Visual/Normal |
Indent to right and re-select |
Shift +Tab |
Visual/Normal |
Indent to left and re-select |
gh |
Normal |
Show highlight group that matches current cursor |
gp |
Normal |
Select last paste |
Q |
Normal |
Start/stop macro recording |
gQ |
Normal |
Play macro 'q' |
mj /mk |
Normal/Visual |
Move lines down/up |
cp |
Normal |
Duplicate paragraph |
cn /cN |
Normal/Visual |
Change current word in a repeatable manner |
s |
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 |
, +Space |
Normal |
Remove all spaces at EOL |
<leader> +<leader> |
Normal |
Enter visual line-mode |
<leader> +a |
Normal |
Align paragraph |
<leader> +os |
Normal |
Load last session |
<leader> +se |
Normal |
Save current workspace as last session |
<leader> +d |
Normal/Visual |
Duplicate line or selection |
<leader> +S |
Normal/Visual |
Source selection |
<leader> +ml |
Normal |
Append modeline |
Key |
Mode |
Action |
<leader> +cd |
Normal |
Switch to the directory of opened buffer (:lcd %:p:h) |
<leader> +w |
Normal/visual |
Write (:w) |
<leader> +y / <leader> +Y |
Normal |
Copy (relative / absolute) file-path to clipboard |
Ctrl +s |
All |
Write (:w) |
W!! |
Command |
Write as root |
Key |
Mode |
Action |
<leader> +ti |
Normal |
Toggle indentation lines |
<leader> +ts |
Normal |
Toggle spell-checker (:setlocal spell!) |
<leader> +tn |
Normal |
Toggle line numbers (:setlocal nonumber!) |
<leader> +tl |
Normal |
Toggle hidden characters (:setlocal nolist!) |
<leader> +th |
Normal |
Toggle highlighted search (:set hlsearch!) |
<leader> +tw |
Normal |
Toggle wrap (:setlocal wrap! breakindent!) |
g0 |
Normal |
Go to first tab (:tabfirst) |
g$ |
Normal |
Go to last tab (:tablast) |
gr |
Normal |
Go to previous tab (:tabprevious) |
Ctrl +j |
Normal |
Move to split below (<C-w>j) |
Ctrl +k |
Normal |
Move to upper split (<C-w>k) |
Ctrl +h |
Normal |
Move to left split (<C-w>h) |
Ctrl +l |
Normal |
Move to right split (<C-w>l) |
* |
Visual |
Search selection forwards |
# |
Visual |
Search selection backwards |
<leader> +j |
Normal |
Next on location list |
<leader> +k |
Normal |
Previous on location list |
<leader> +b |
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 |
\ +\ |
Normal |
Jump to last 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 +x |
Normal |
Remove buffer, leave blank window |
s +q |
Normal |
Closes current buffer (:close) |
s +Q |
Normal |
Removes current buffer (:bdelete) |
<leader> +sv |
Normal |
Split with previous buffer |
<leader> +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 |
; +l |
Normal |
Location list |
; +q |
Normal |
Quick fix |
; +n |
Normal |
Dein plugin list |
; +g |
Normal |
Grep search |
; +j |
Normal |
Jump points |
; +o |
Normal |
Outline tags |
; +s |
Normal |
Sessions |
; +t |
Normal |
Tag under cursor |
; +p |
Normal |
Jump to previous position |
; +h |
Normal |
Help |
; +v |
Normal/Visual |
Register |
; +z |
Normal |
Z (jump around) |
; +; |
Normal |
Command history |
; +/ |
Normal |
Buffer lines |
; +* |
Normal |
Match line |
<leader> +gl |
Normal |
Git log (all) |
<leader> +gs |
Normal |
Git status |
<leader> +gc |
Normal |
Git branches |
<leader> +gf |
Normal |
Grep word under cursor |
<leader> +gg |
Normal/Visual |
Grep word under cursor |
Within Denite mode |
|
|
Escape |
Normal/Insert |
Toggle modes |
jj |
Insert |
Leave Insert mode |
Ctrl +y |
Insert |
Redraw |
r |
Normal |
Redraw |
st |
Normal |
Open in a new tab |
sg |
Normal |
Open in a vertical split |
sv |
Normal |
Open in a split |
' |
Normal |
Toggle mark current candidate |
Key |
Mode |
Action |
; +e |
Normal |
Toggle file explorer |
; +a |
Normal |
Toggle file explorer on current file |
Within NERDTree buffers |
|
|
h/j/k/l |
Normal |
Movement + collapse/expand + file open |
w |
Normal |
Toggle window size |
N |
Normal |
Create new file or directory |
yy |
Normal |
Yank selected item to clipboard |
st |
Normal |
Open file in new tab |
sv |
Normal |
Open file in a horizontal split |
sg |
Normal |
Open file in a vertical split |
& |
Normal |
Jump to project root |
gh |
Normal |
Jump to user's home directory |
gd |
Normal |
Open split diff on selected file |
gf |
Normal |
Search in selected directory for files |
gr |
Normal |
Grep in selected directory |
Key |
Mode |
Action |
Enter |
Insert |
Select completion or expand snippet |
Tab |
Insert/select |
Smart tab movement or completion |
Ctrl +j/k/f/b/d/u |
Insert |
Movement in completion pop-up |
Ctrl +<Return> |
Insert |
Expand Emmet sequence |
Ctrl +o |
Insert |
Expand snippet |
Ctrl +g |
Insert |
Refresh candidates |
Ctrl +l |
Insert |
Complete common string |
Ctrl +e |
Insert |
Cancel selection and close pop-up |
Ctrl +y |
Insert |
Close pop-up |
Plugin: Commentary
Key |
Mode |
Action |
<leader> +v |
Normal/visual |
Toggle single-line comments |
<leader> +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 |
<leader> +, |
Normal/Visual |
Toggle highlighted word |
Key |
Mode |
Action |
v |
Visual/select |
Expand selection |
V |
Visual/select |
Reduce selection |
Key |
Mode |
Action |
s +s |
Normal |
Jump to two characters from input |
s +d |
Normal |
Jump to a character from input |
s +f |
Normal |
Jump over-windows |
s +h |
Normal |
Jump backwards in-line |
s +l |
Normal |
Jump forwards in-line |
s +j |
Normal |
Jump downwards |
s +k |
Normal |
Jump upwards |
s +/ |
Normal/operator |
Jump to free-search |
s +n |
Normal |
Smart next occurrence |
s +p |
Normal |
Smart previous occurrence |
Key |
Mode |
Action |
- |
Normal |
Choose a window to edit |
<leader> +- |
Normal |
Switch editing window with selected |
Key |
Mode |
Action |
m +a |
Normal |
Show list of all bookmarks |
m +m |
Normal |
Toggle bookmark in current line |
m +n |
Normal |
Jump to next bookmark |
m +p |
Normal |
Jump to previous bookmark |
m +i |
Normal |
Annotate bookmark |
Key |
Mode |
Action |
<leader> +ga |
Normal |
Git add current file |
<leader> +gS |
Normal |
Git status |
<leader> +gd |
Normal |
Git diff |
<leader> +gD |
Normal |
Close diff |
<leader> +gc |
Normal |
Git commit |
<leader> +gb |
Normal |
Git blame |
<leader> +gB |
Normal |
Open in browser |
<leader> +gp |
Normal |
Git push |
Key |
Mode |
Action |
<leader> +hj |
Normal |
Jump to next hunk |
<leader> +hk |
Normal |
Jump to previous hunk |
<leader> +hs |
Normal |
Stage hunk |
<leader> +hr |
Normal |
Revert hunk |
<leader> +hp |
Normal |
Preview hunk |
Key |
Mode |
Action |
, +df |
Visual |
Mark lines and open diff if 2nd region |
, +da |
Visual |
Mark lines for diff |
, +ds |
Normal |
Shows the diff between all the marked areas |
, +dr |
Normal |
Removes the signs denoting the diff'ed regions |
Key |
Mode |
Action |
m +g |
Normal |
Open Magit |
<leader> +l |
Normal |
Open sidemenu |
<leader> +o |
Normal |
Open tag-bar |
<leader> +G |
Normal |
Toggle distraction-free writing |
<leader> +gu |
Normal |
Open undo tree |
<leader> +W |
Normal |
Wiki |
<leader> +K |
Normal |
Thesaurus |
<leader> +? |
Normal |
Dictionary (macOS only) |
Big thanks to the dark knight Shougo.