Post: vim-notes

VIM

by nathias

movement mode

cursor movement

basic line/char

h - move cursor left  
j - move cursor down  
k - move cursor up  
l - move cursor right  

words

w - start of next word  
W - start of next big word  
b - back a word  
B - back a big word  
e - end of the word  
E - end of the big word  

other

^ - first non blank symbol  
g_ - last non blank symbol  
% - to enclosing brackets  
} - to end of paragraph  
{ - to beginning of paragraph  
% - to matched parenthes - ([{}])  
'' - to previous jump starting location  

fx - find next occurrence of character x  
tx - jump to next occurrence of character x  
Fx - find previous occurence of character x  
Tx - jump after previous occurence of character x  
; - repeat previous f, t, F or T movement  
, - repeat previous f, t, F or T movement, backwards  
\# - find word under cursor  
\* - find word under cursor  

line movement

0 - beginning of the line  
$ - end of the line  
gg - jump to start line  
G -jump to end line  
20G - jump to line 20  
20gg - jump to line 20  
25% - jump to 25% of the document  
C-g - shows where you are  
'' - go back where you were before line movement  

screen movement

H - jump to beginning of the screen  
M - jump to the middle of the screen  
L - jump to end of the screen  


C-d - jump down 1/4 of a screen  
C-u - jump up 1/4 of a screen  
C-F - jump up a screen  
C-B - jump down a screen  


zz - current line to the middle of the screen  
zt - current line to the top of the screen  
zb - current line to the bottom of the screen  

insert mode

i - insert before the cursor  
I - insert at the beginning of the line  
a - insert (append) after the cursor  
A - insert (append) at the end of the line  
o - append (open) a new line below the current line  
O - append (open) a new line above the current line  
ea - insert (append) at the end of the word  
Esc - exit insert mode  
20i-<Esc> - insert 20 -  
8i<Enter><Esc> - insert 8 new lines  

edit

r - replace a charachter  
R - replace line with insert  
J - join line below with the line  
cw - change word  
cc - change line  
s - delete and go to insert mode  
C - change to the end of the line  
. - repeat  
xp - transpose two letters  
C-a - will increment the number right of the cursor on the same line 

undo

u - undo  
U - undo whole line  
C-r - redo  
:earlier - earlier + time (10m, 2h)  
:ea 10m  
:later - later  
:lat  
g+ - forward on undo branch  
g- - backward on undo branch  

copy paste

y -yank  
yy -yank (copy) a line  
d -delete (cut)  
dd - delete a line  
D - delete to the end of the line  
p - paste after cursor  
P - paste before cursor  
x - delete a charachter  

objects

It's better to use objects than motions, because its easier to repeat with . command.

i - inside  
a - around  
[command]iw -> inner word  
[command]it -> inner tag  
[command]i" -> inner quotes  
[command]ip -> inner paragraph  
[command]is -> inner sentence  

visual mode

v - start visual mode  
V - start line visual mode  
C-v - start block visual mode  
O - move to other corner of a block  
:normal A; - appends ; to all selected lines  
a - mark  
aw - mark a word  
ab - a block with ()  
aB - a block with {}  
ib - inner block with ()  
ivB - inner block with {}  


\> - shift text right  
< - shift text left  
~ - switch case  

substitution

:s/replace/replacement/g 
- changes all replace to replacement in the current line  
:6,11s/replace/replacement/g
- change all replace to replacement in lines 6 to including 11  
:%s/replace/replacement/g
- changes all replace to replacement in the current file  

substitution flags

c - confirm each  
g - replace all  
i - ignore case  
I - don't ignore case  

marks

local

ma - mark location as a  
\`a - jump to mark location  
'a - jump to mark location row  
'' - jump to prvious location  

global

mA - mark location as A  
\`A - jump to mark location    
'A - jump to mark location row   

registers

The unnamed register "" (default)

types

  • The unnamed register "" (default)
  • Ten numbered registers "0 to "9
  • The small delete register "-
  • Twenty-six named registers "a to "z or "A to "Z a and A point to the same register, uppercase letter appends, lowercase overwrites
  • Four read-only registers ":, "., "% and "#
  • The expression register "=
  • The selection and drop registers "*, "+ and "~
  • The black hole register "_
  • Last search pattern register "/

use

:registers - list rgisters in use  
"add - delete and copy to the named register a  
"ayy - yank and copy to the named register a  
"ax - cut to the named register a  
"ac - change to the named register a  
"as - substitute to the named register a  
"0p - paste the last yanked text  
"+p - paste system clipboard (ctrl-c)  
"*p - paste system primary (selected text)  
"+3yy - yank lines 1 to 3 to the system register  

buffers

buffer is the in-memory text of a file

:ls - list of buffers  
:5b - switch to buffer 5  
:bn - next buffer  
:bp - previous buffer  
:bd - delete buffer  

windows

window is a viewport on a buffer

vim -O file1 file2 file3 - open three windows split vertically  
vim -o file1 file2 file3 - open three windows split horizontally  
:sp - split window horizontally  
:vs - split window vertically  
:20sp - horizontal split of 20 lines  
C-w v - horizontal split  
C-w s - vertical split  
C-w h - switch to window on the left  
C-w j - switch to window on the bottom  
C-w k - switch to window on the top  
C-w l - switch to window on the right  
C-w r - rotate  

tabs

tab is a collection of windows

macros

qa - start recording macro a  
q - stop recording macro  
@a - play macro a  
@@ - repeat last macro  
qaq - empty register a  

read file from shell  
:r!  

output file to shell  
:!  

ctags

exit

:w write  
:q quit  
:wq or ZZ write & quit  
:q! or ZQ quit & discard  
:x save & quit  

map

:map  
:noremap  
:unmap  

folding

zf5j - fold line with five following lines

files

history

C-o go back  
C-i go forward  
C-^ go to previous  

custom commands

surround  
action s <thingtosubsittute> <thingtosusbsitutewith>  
cs"' - change " to '  
cs'<q> - change ' to <q> tags  
cst' - change tag to '  
ysiw' - add surrounding ''  

resources:

https://sanctum.geek.nz/arabesque/series/unix-as-ide/
https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118
https://wikimatze.de/vimtex-the-perfect-tool-for-working-with-tex-and-vim/
https://jdhao.github.io/2019/03/28/nifty_nvim_techniques_s1/
https://jdhao.github.io/2019/04/17/nifty_nvim_techniques_s2/
https://jdhao.github.io/2019/05/14/nifty_nvim_techniques_s3/
https://vimways.org
https://www.vimfromscratch.com/articles/spell-and-grammar-vim/
www.vimfromscratch.com

plugins

https://github.com/rhysd/devdocs.vim

2019-03-12
Login to comment