DEV Community

Wakeup Flower
Wakeup Flower

Posted on

Ultimate Vim mannual

A curated collection of essential and advanced Vim tips, commands, and techniques to boost your productivity and mastery of Vim.

0. Editing Techniques


🧭 1. Cursor Movement (Navigation)

Jumping Around the File

  • gg β€” Go to top of file
  • G β€” Go to bottom of file
  • nG β€” Go to line n
  • H / M / L β€” Top / Middle / Bottom of screen

Word-wise Navigation

  • w β€” Start of next word
  • e β€” End of current/next word
  • b β€” Beginning of current/previous word
  • ge β€” End of previous word

Paragraph & Sentence

  • { / } β€” Previous / next paragraph
  • ( / ) β€” Previous / next sentence

Matching Pairs

  • % β€” Jump between matching (), {}, [], etc.

Search-Based Movement

  • /pattern β€” Search forward
  • ?pattern β€” Search backward
  • n / N β€” Repeat last search forward / backward

πŸ“‹ 2. Copy (Yank) and Paste

Basic Copy

  • yy β€” Yank (copy) entire line
  • yw β€” Yank word
  • y$ β€” Yank to end of line
  • y0 β€” Yank to start of line
  • yG β€” Yank to end of file
  • v + movement + y β€” Yank visually selected text

Paste

  • p β€” Paste after cursor
  • P β€” Paste before cursor

System Clipboard (if enabled)

  • "+y β€” Yank to system clipboard
  • "+p β€” Paste from system clipboard

❌ 3. Deletion (Cutting)

  • dd β€” Delete current line
  • dw β€” Delete word
  • d$ β€” Delete to end of line
  • d0 β€” Delete to start of line
  • dG β€” Delete to end of file
  • v + movement + d β€” Delete visually selected text

Use "_d to delete without affecting yank register (black hole).


πŸ” 4. Search and Replace

Basic Search

  • /pattern β€” Search forward
  • ?pattern β€” Search backward
  • n / N β€” Repeat search

Replace Examples

:%s/foo/bar/g        " Replace all 'foo' with 'bar'
:%s/foo/bar/gc       " Confirm each replacement
:'<,'>s/foo/bar/g     " Replace in visual selection
Enter fullscreen mode Exit fullscreen mode

Regex Tips

  • \v β€” Very magic mode (simpler regex syntax)
:%s/\v\d+/NUMBER/g   " Replace all numbers with "NUMBER"
Enter fullscreen mode Exit fullscreen mode

🎨 5. Highlighting

  • Search highlights automatically (:set hlsearch)
  • Remove highlights manually:
:noh
Enter fullscreen mode Exit fullscreen mode
  • Use :match to manually highlight patterns:
:match ErrorMsg /TODO/
Enter fullscreen mode Exit fullscreen mode

🧹 6. Formatting and Indentation

Auto-indent Whole File

gg=G
Enter fullscreen mode Exit fullscreen mode
  • gg β€” Go to top
  • =G β€” Indent everything to the bottom

Indent Selections

  • > β€” Indent one level
  • < β€” Un-indent one level
  • = β€” Reindent (smart based on syntax)

Use in visual mode:

  • V + select lines + = β€” Format selected lines

⌨️ Bonus: Repeat and Dot Command

  • . β€” Repeat the last change (powerful for repeating deletions, replacements, etc.)
  • Use . after actions like ciw, dw, etc., to repeat efficiently.

1. Basic Editing and Navigation

Search and Replace


:%s/foo/bar/gc " Find 'foo', replace with 'bar', confirm each

Save and Quit

:w                  " Save
:w filename         " Save as
:q                  " Quit
:q!                 " Force quit (discard changes)
:wq or :x           " Save and quit
Enter fullscreen mode Exit fullscreen mode

Undo and Redo

u                   " Undo
Ctrl-r              " Redo
Enter fullscreen mode Exit fullscreen mode

2. Window Management

Splits and Windows

Command Abbreviation Description
:split :sp Horizontal split
:vsplit :vsp Vertical split
:new :new New empty buffer (horizontal)
:vnew :vne New empty buffer (vertical)
:close :clo Close current split
:only :on Close all other splits

Navigation between splits:

Ctrl-w + h/j/k/l    " Move left/down/up/right between splits
Enter fullscreen mode Exit fullscreen mode

Tabs (optional to explore)

:tabnew filename    " Open file in new tab
:tabn               " Next tab
:tabp               " Previous tab
Enter fullscreen mode Exit fullscreen mode

3. Buffers and Files

Buffers

:e filename         " Open file (edit buffer)
:bn / :bp           " Next / Previous buffer
:bd                 " Delete (close) buffer
:ls or :buffers     " List open buffers
Enter fullscreen mode Exit fullscreen mode

File Explorer (NetRW)

:e .                " Open file explorer
Enter fullscreen mode Exit fullscreen mode

4. Visual Mode

Enter Visual Mode

  • v β€” character-wise selection
  • V β€” line-wise selection
  • Ctrl-v β€” block-wise (column) selection

Visual Mode Operations

Command Effect
d Delete selection
y Yank (copy) selection
c Change selection (delete + insert)
> / < Indent / un-indent selection
~ Toggle case
u / U Make lowercase / uppercase
:s/foo/bar/g Search & replace in selection

Visual Block Mode Special

  • Insert text in multiple lines: select block, press I, type text, then Esc
  • Useful for column edits

Other Visual Tips

  • gv β€” reselect previous visual selection
  • o β€” move cursor to other end of selection
  • Ctrl-g β€” show selection info

5. Registers and Clipboard

  • "ayy β€” Yank current line into register a
  • "ap β€” Paste from register a
  • "_d β€” Delete without affecting default register (black hole)
  • :reg β€” View contents of all registers

6. Marks and Navigation

  • ma β€” Set mark a
  • 'a β€” Jump to start of line of mark a
  • `a β€” Jump to exact position of mark a

7. Macros

  • qa β€” Start recording macro into register a
  • Perform actions
  • q β€” Stop recording
  • @a β€” Play macro a
  • @@ β€” Repeat last macro
  • 10@a β€” Play macro 10 times

8. Command-Line Mode and Shell Integration

  • Run shell command: :!ls
  • Insert shell output into file: :r !ls
  • Filter lines through shell command: :'<,'>!sort
  • Use :sh to drop to a shell temporarily and exit to return

9. Folding

  • zf{motion} β€” Create fold
  • zo / zc β€” Open / close fold
  • za β€” Toggle fold
  • :set foldmethod=syntax β€” Syntax-based folding
  • :set foldmethod=manual β€” Manual folding mode

10. Search with Regular Expressions

  • Use \v for very magic mode (simplified regex)
  • Example:
:%s/\v(foo|bar)/baz/g
Enter fullscreen mode Exit fullscreen mode
  • Search forward: /foo
  • Search backward: ?foo
  • Repeat search: n (forward), N (backward)
  • Clear highlights: :noh

11. Sessions

  • Save session:
:mksession ~/session.vim
Enter fullscreen mode Exit fullscreen mode
  • Load session:
vim -S ~/session.vim
Enter fullscreen mode Exit fullscreen mode

12. Custom Key Mappings

  • Normal mode mapping:
nnoremap <leader>r :source %<CR>   " Reload current vim config
Enter fullscreen mode Exit fullscreen mode
  • Visual mode mapping:
vnoremap <leader>c "+y             " Copy selection to system clipboard
Enter fullscreen mode Exit fullscreen mode
  • <leader> key is usually \ by default

13. Integration with External Tools

  • Use grep, ag (The Silver Searcher), rg (ripgrep), fzf for fast search/navigation
  • Example:
:grep keyword **/*.txt
:copen  " Open quickfix list to see results
Enter fullscreen mode Exit fullscreen mode

14. Text Objects

Command Description
ciw Change inside word
ci" Change inside quotes
di( Delete inside parentheses
va{ Visual select a block including braces

Combine text objects with operators for powerful editing.


15. Undo Branching and Time Travel

  • Go back in undo history:
:earlier 10m    " 10 minutes ago
Enter fullscreen mode Exit fullscreen mode
  • Go forward in undo history:
:later 5        " 5 changes forward
Enter fullscreen mode Exit fullscreen mode

Bonus Tips

Running Vim in Background

  • Suspend Vim: Ctrl-Z
  • List jobs: jobs
  • Resume Vim: fg

Drop to Shell Temporarily

  • :sh to open shell, type exit to return

Vim customization in .vimrc

" Appearance and UI
set number " Show line numbers
set relativenumber " Show relative line numbers
set cursorline " Highlight current line
set cursorcolumn " Highlight current column
set colorcolumn=80 " Show a vertical ruler at column 80
set showmatch " Highlight matching parentheses
set matchtime=2 " Delay (tenths of a second) for match highlight
set laststatus=2 " Always show the status line
set scrolloff=5 " Keep 5 lines visible above/below cursor
set signcolumn=yes " Always show the sign column (useful with git)
set termguicolors " Enable true color support

" Searching
set ignorecase " Ignore case in search
set smartcase " Override ignorecase if uppercase used
set incsearch " Show matches as you type
set hlsearch " Highlight all search results
set wrapscan " Wrap around end of file when searching

" Indentation and Tabs
set tabstop=4 " Number of spaces per tab
set shiftwidth=4 " Spaces per indent level
set softtabstop=4 " Backspace/delete over 4 spaces
set expandtab " Use spaces instead of tabs
set autoindent " Copy indent from current line
set smartindent " Smart indenting on new lines
set cindent " C-style indentation
set breakindent " Keep indentation on wrapped lines

" Editing and Behavior
set backspace=indent,eol,start " Make backspace behave normally
set whichwrap+=<,>,[,] " Allow left/right arrow to wrap to next/prev line
set hidden " Allow buffer switching without saving
set undofile " Persistent undo
set autoread " Auto-reload file if changed externally
set confirm " Ask before closing unsaved changes
set splitbelow " Open horizontal splits below
set splitright " Open vertical splits to the right

" File and Clipboard
set clipboard=unnamedplus " Use system clipboard
set fileencoding=utf-8 " Default file encoding
set noswapfile " Disable swap files
set nobackup " Disable backups
set nowritebackup " Avoid write backup

" Mouse and Navigation
set mouse=a " Enable mouse support
set scrolljump=5 " Minimal scroll when moving cursor
set sidescroll=1 " Minimal horizontal scroll
set wildmenu " Show command completion menu
set wildmode=longest:full,full " Completion behavior

" Display Commands
set ruler " Show cursor position in bottom right
set showcmd " Show partial command in status line
set showmode " Show insert/visual/replace mode

" Performance
set lazyredraw " Don't redraw while executing macros
set ttyfast " Faster terminal scrolling

" Set paste
set paste

set paste temporarily disables auto-indentation and other formatting behaviors that can mess up pasted text, especially in insert mode (e.g., when copying from another source or terminal).
:set nopaste
To disable set paste

syntax on
set number
set paste
set tabstop=4
set shiftwidth=4
set expandtab
set autoindent
set smartindent
set cindent
set ruler
set showcmd
set mouse=a
set clipboard=unnamedplus

// for 42 school
autocmd BufNewFile *.c :Stdheader 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)