A highly configurable text editor with performance optimizations
⚡ Recently Optimized - 5-10x faster startup, 30-40% less memory usage!
Automatic install/update:
bash -c "$(curl -LSs https://github.com/dfmgr/vim/raw/main/install.sh)"Manual install:
mv -fv "$HOME/.config/vim" "$HOME/.config/vim.bak"
git clone "https://github.com/dfmgr/vim" "$HOME/.config/vim"
cd "$HOME/.config/vim" && ./install.shNote: The installer uses vim-plug for faster plugin management with lazy loading. Plugins install automatically on first run.
- ⚡ Fast startup with lazy-loaded plugins (200-500ms)
- 🎨 Beautiful Dracula theme with vim-airline statusline
- 📝 Smart completion with deoplete (Python 3 required)
- 🔍 Fuzzy file search with FZF
- 🌳 File explorer with NERDTree
- 📦 60+ plugins optimized for performance
- 🔧 Organized configuration with modular autocmds
- 📚 Full Git integration with fugitive and gitgutter
- ✨ Syntax highlighting for 100+ languages
apt install vim-nox python3-neovim ctags vim-scriptsyum install vim python3-neovim ctagspacman -S vim python-neovim ctagsbrew install vim ctags python
pip3 install neovim pynvim# Install and update all plugins
vim +PlugInstall +PlugUpdate +qall
# Clean unused plugins
vim +PlugClean +qall
# Check plugin status
vim +PlugStatuscd ~/.config/vim
rm -rf ~/.local/share/vim/plugged
./install.sh- 5-10x faster startup time
- Plugins load on-demand based on file type or command
- Auto-installs vim-plug on first run
Lazy Loading Strategy:
- NERDTree: Loads only when toggled (
:NERDTreeToggle) - Language plugins: Load by filetype (Python, PHP, TypeScript, etc.)
- Utilities: Load on command (Autoformat, Prettier, Magit)
- 30-40MB less memory usage
- Removed: neocomplete, supertab, ddc.vim, vim-multiple-cursors
- Kept: deoplete (async completion), ultisnips (snippets), vim-airline
- ~200ms faster startup
- Organized 76 scattered autocmds into 9 focused groups
- Eliminated duplicate event handlers
- Added
abortflags to functions
- ~70 lines removed
- Using vim-airline exclusively
- Disabled expensive whitespace checking
- Enabled section skipping for empty sections
| Metric | Before | After | Improvement |
|---|---|---|---|
| Startup time | 2-3s | 200-500ms | 5-10x faster |
| Initial memory | 80-100MB | 40-60MB | 40% less |
| Lines of code | 861 | 793 | 68 lines removed |
| Autocmd groups | Scattered | 9 groups | Organized |
| Plugin conflicts | Yes (3) | None | Resolved |
- vim-airline, vim-fugitive, vim-gitgutter
- vim-sneak, rainbow, auto-pairs
- dracula theme, vim-startify
- editorconfig, tmux-navigator
By Command:
- NERDTree →
:NERDTreeToggleor<C-z> - Autoformat →
:Autoformat - Magit →
:Magit - TaskList →
:TaskList
By Filetype:
- Python: python-mode, jedi-vim, python-syntax
- JavaScript/TypeScript: yats, prettier, emmet
- PHP: phpcomplete
- Markdown: vim-markdown, vimwiki
- HTML/CSS: emmet, vim-css-color
- Docker: Dockerfile syntax
- Shell: bash-support
Quick Help: Press ,? in vim to show an interactive keybind reference!
The leader key is , (comma). All commands shown as <Leader> use comma.
| Keybind | Description |
|---|---|
<C-h/j/k/l> |
Navigate between splits (left/down/up/right) |
<S-Tab> |
Cycle through windows |
<C-z> |
Toggle NERDTree file explorer |
| Keybind | Description |
|---|---|
<C-p> |
FZF fuzzy file finder |
<Leader><Enter> or ,<Enter> |
Show open buffers |
<Leader>l or ,l |
Search lines in all open buffers |
,r |
Find and replace (enters :%s///g mode) |
,rc |
Find and replace with confirmation |
s* |
Search word under cursor (use cgn to change matches) |
| Keybind | Description |
|---|---|
<F2> |
Toggle paste mode (auto-paste usually handles this) |
,c |
Copy selection to system clipboard |
,v |
Paste from system clipboard |
<C-c> |
Copy selection (visual mode) |
<C-x> |
Cut selection (visual mode) |
<Space>/ |
Toggle comment (visual mode) |
| Keybind | Description |
|---|---|
<F7> |
Toggle spell check on/off |
,sp |
Fix spelling for nearest word |
z= |
Show spelling suggestions (vim built-in) |
]s |
Jump to next misspelled word |
[s |
Jump to previous misspelled word |
| Keybind | Description |
|---|---|
,tl |
Show task list (TODO, FIXME, HACK, XXX, WIP) |
,rs |
Reload all snippets |
When editing .md or .rmd files:
| Keybind | Description | Example |
|---|---|---|
,w |
Wrap word in markdown link | [word](url) |
,n |
Insert horizontal rule | --- |
,b |
Bold text | **text** |
,s |
Strikethrough | ~~text~~ |
,e |
Italic text | *text* |
,i |
Insert image |  |
,a |
Insert link | [text](url) |
,1 |
Insert H1 heading | # |
,2 |
Insert H2 heading | ## |
,3 |
Insert H3 heading | ### |
,l |
Insert horizontal line | -------- |
,r |
Insert R code block | ```{r} |
,p |
Insert Python code block | ```{python} |
,c |
Insert generic code block | ``` |
Vim-Sneak - Jump to any location with 2 characters:
| Keybind | Description |
|---|---|
s{char}{char} |
Jump forward to 2 characters |
S{char}{char} |
Jump backward to 2 characters |
gs |
Repeat last sneak forward |
gS |
Repeat last sneak backward |
Quick-Scope - Highlights f-key jump targets:
| Keybind | Description |
|---|---|
f{char} |
Jump forward to character (targets highlighted) |
F{char} |
Jump backward to character |
t{char} |
Jump forward before character |
T{char} |
Jump backward before character |
| Keybind | Description |
|---|---|
<Tab> |
Trigger UltiSnips snippet or Deoplete completion |
<S-Tab> |
Jump backward in snippet |
<Up>/<Down> |
Navigate completion menu |
<CR> (Enter) |
Accept completion |
<Right> |
Accept and continue |
<Left> |
Cancel completion |
| Keybind | Description |
|---|---|
,c |
Copy to system clipboard (normal/visual) |
,v |
Paste from system clipboard |
<C-c> |
Copy selection (visual mode) |
<C-x> |
Cut selection (visual mode) |
<C-v> |
Paste (visual mode or insert mode) |
| Keybind | Description |
|---|---|
,? |
Show interactive keybind reference |
:h <topic> |
Vim help on any topic |
:h vimrc |
Help for vimrc configuration |
Automatic paste detection is enabled! When you paste text from your clipboard:
- Modern vim (8.0.0238+) and neovim automatically detect paste operations
- Paste mode enables automatically, then disables when done
- No more mangled indentation or auto-completion interference
- Manual toggle available with
<F2>if needed
~/.config/vim/
├── etc/
│ ├── vimrc # Main config (optimized)
│ ├── vimrc.bak # Backup of original
│ ├── plugins.vimrc # Plugin definitions (vim-plug)
│ ├── minimal.vimrc # Lightweight config
│ └── simple.vimrc # Mid-weight config
├── install.sh # Installation script
└── README.md # This file
~/.local/share/vim/
├── plugged/ # vim-plug plugins
├── .undo/ # Undo history
├── .backup/ # Backup files
└── .swp/ # Swap files
Check if it needs to be triggered:
:PlugStatus " See which plugins are loadedThe plugin might be lazy-loaded. Use it once to load:
:NERDTreeToggle " Loads NERDTree and related pluginsProfile your startup:
vim --startuptime /tmp/vim-startup.log +qall
cat /tmp/vim-startup.log | tail -20Make sure Python 3 and neovim packages are installed:
python3 -m pip install --user neovim pynvim msgpackcd ~/.config/vim/etc
mv vimrc.bak vimrc # Restore originalCreate ~/.config/local/vimrc.local for your personal settings:
" Example local configuration
let g:author = 'Your Name'
let g:email = 'your@email.com'
let g:github = 'yourusername'
" Custom key mappings
nnoremap <leader>x :CustomCommand<CR>
" Plugin settings
let g:airline_theme = 'molokai'This file is sourced at the end of the main vimrc and won't be overwritten.
vim wiki | vim site | vim-plug
WTFPL - Do What The F*ck You Want To Public License
Last Updated: 2025-12-09
Vim Version: 8.0+ / Neovim 0.5+
Performance: 5-10x faster startup, 30-40% less memory