Vim Wiki Old¶
Mapping¶
It's almost always better to use nnoremap instead of nmap as it ignores recursive mappings. More at chapter 5 of Learn VimScript the Hard Way.
Check if mapping exists¶
Disable a key¶
This effectively disables the escape key in insert mode by telling Vim to perform <nop> (no operation) instead. More here.
Movement¶
-
gjmove to visual line below (can be used when lines wrap around) -
Wignore special characters like ,. -
tlike f, but moves until the character -
Ilike insert but ignores whitespace -
Aappends to end of line -
sdeletes current character and puts in insert mode -
Sdeletes entire line and puts in insert mode -
%can go directly to a brace, without needing to put cursor on it first -
?searches backwards -
Ctrl ogo back where you came from -
Ctrl igo forwards to where you've been -
Ctrl ^move back to last used file -
:%ssubstitute in the entire document -
:w Ctrl dwill display all available commands that start with w -
fo ;; repeats f in forward direction -
fo ,, repeats f in forward direction -
va(highlights inner bracket, along with braces -
mJcreate mark j -
'Jgo to mark j
Lesser used motions¶
is-> inner sentenceas-> around sentence
Modifications¶
d2i{ → deletes inner bracket plus one outer bracket
dip → deletes a paragraph (contiguous block of text)
Multi line editing¶
Copy/Pasting¶
Vim keeps a history of previous yanks/deletes. :reg lists them. "0p pastes register at 0.T
Remembering previous deletes/yanks
:copy, :move¶
:copy, :move are solid ways of moving text around without moving the cursor.
Shorthands are :t, and :m respectively.
:-15,-10t.
" Copy lines between -15 and -10 and paste it below.
:-15,-10t+5
" Same, but paste it 5 lines below.
More here.
Windows¶
<c-w><o>
## make this split take full window
## can be used to closed vim diff buffers quickly
## source: https://github.com/tpope/vim-fugitive/issues/36
Diffing¶
Execute in all tabs¶
:windo diffthis
execute in all windows in current tab
---
:tabdo windo diffthis
execute in all tabs in all windows
---
Sessions¶
:mksession ~/vim-sessions/dotfiles.vim
save current session
---
:source ~/.vim-sessions/dotfiles.vim
#load saved session
vim -S ~/mysession.vim
open session from command line
---
Folds¶
from my vimrc
---
"folds on by default
set foldmethod=indent
"prevents { or } from opening up a fold
set foldopen-=block
" leader fi to toggle opening/closing all folds
let $unrol=0
function UnrolMe()
if $unrol==0
:exe "normal zR"
" :exe "normal zA"
let $unrol=1
else
:exe "normal zM"
" :exe "normal zC"
let $unrol=0
endif
endfunction
noremap <leader>fi :call UnrolMe()<CR>
"leader op opens fold
noremap <leader>op zA
"leader cl closes folds
noremap <leader>cl zC
Resizing¶
Command Line¶
Show value of command¶
Custom Commands¶
Here's how to create custom workspaces to switch between programming and writing prose in Vim
Keywords¶
:map means map recursively
:noremap means map non-recursively
:inoremap means map only in insert mode
:nnoremap means map only in normal mode
autocmd is generally used to run commands for a particular filetype
cnoreabbrev is generally used to alias/map commands in the vim command line
set is used to change value of a internal vim variable
let is usually used to change configuration variables for plugins
3 of the Most Common Beginner Problems in Vim and How To Fix Them
g¶
Files¶
Create file under cursor¶
Create and open a non existent file under the cursor
grf will create a file relative to current buffer. gcf will use the absolute <cfile> path.
Switching cases¶
~: inverts case of current letterg~w: inverts case of current word
Increment/Decrement Number¶
<C-a> increments number under cursor
<C-x> decrements number under cursor