发布时间:2022-08-09 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印

VIM QUICK REFERENCE CARD


Basic movement
h l k j character left, right; line up, down
b w word/token left, right
ge e end of word/token left, right
{ } beginning of previous, next paragraph
( ) beginning of previous, next sentence
0 gm beginning, middle of line
^ $ first, last character of line
nG ngg line n, default the last, first
n% percentage n of the file (n must be provided)
n| column n of current line
% match of next brace, bracket, comment, #define
nH nL line n from start, bottom of window
M middle line of window

Insertion & replace insert mode
i a insert before, after cursor
I A insert at beginning, end of line
gI insert text in first column
o O open a new line below, above the current line
rc replace character under cursor with c
grc like r, but without affecting layout
R replace characters starting at the cursor
gR like R, but without affecting layout
cm change text of movement command m
ccor S change current line
C change to the end of line
s change one character and insert
~ switch case and advance cursor
g~m switch case of movement command m
gum gUm lowercase, uppercase text of movement m
<m >m shift left, right text of movement m
n<< n>> shift n lines left, right

Deletion
x X delete character under, before cursor
dm delete text of movement command m
dd D delete current line, to the end of line
J gJ join current line with next, without space
:rd delete range r lines
:rdx delete range r lines into register x

Insert mode
^Vc ^Vn insert char c literally, decimal value n
^A insert previously inserted text
^@ same as ^A and stop insert command mode
^Rx ^R^Rx insert content of register x, literally
^N ^P text completion before, after cursor
^W delete word before cursor
^U delete all inserted character in current line
^D ^T shift left, right one shift width
^Kc1c2or c1c2 enter digraph \c1,c2\
^Oc execute c in temporary command mode
^X^E ^X^Y scroll up, down
<esc>or ^[ abandon edition command mode

Copying
"x use register x for next delete, yank, put
:reg show the content of all registers
:reg x show the content of registers x
ym yank the text of movement command m
yyor Y yank current line into register
p P put register after, before cursor position
]p [p like p, P with indent adjusted
gp gP like p, P leaving cursor after new text

Advanced insertion
g?m perform rot13 encoding on movement m
n^A n^X +n, -n to number under cursor
gqm format lines of movement m to fixed width
:rce w center lines in range r to width w
:rle i left align lines in range r with indent i
:rri w right align lines in range r to width w
!mc filter lines of movement m through command c
n!!c filter n lines through command c
:r!c filter range r lines through command c

Visual mode
v V ^V start/stop highlighting characters, lines, block
o exchange cursor position with start of highlighting
gv start highlighting on previous visual area
aw as ap select a word, a sentence, a paragraph
ab aB select a block ( ), a block { }

Undoing, repeating & registers
u U undo last command, restore last changed line
.^R repeat last changes, redo last undo
n. repeat last changes with count replaced by n
qc qC record, append typed characters in register c
q stop recording
@c execute the content of register c
@@ repeat previous @ command
:@c execute register c as an Ex command
:rg/p/c execute Ex command c on range r
where pattern p matches

Complex movement
- + line up, down on first non-blank character
B W space-separated word left, right
gE E end of space-separated word left, right
n_ down n-1 line on first non-blank character
g0 beginning of screen line
g^ g$ first, last character of screen line
gk gj screen line up, down
fc Fc next, previous occurence of character c
tc Tc before next, previous occurence of c
; , repeat last fFtT, in opposite direction
[[ ]] start of section backward, forward
[] ][ end of section backward, forward
[( ]) unclosed (, ) backward, forward
[{ ]} unclosed {, } backward, forward
[m ]m start of backward, forward Java method
[# ]# unclosed #if, #else, #endif backward, forward
[* ]* start, end of /* */ backward, forward

Search & substitution
/s ?s search forward, backward for s
/s/o ?s?o search fwd, bwd for s with offset o
nor / repeat forward last search
Nor ? repeat backward last search
# * search backward, forward for word under cursor
g# g* same, but also find partial matches
gd gD local, global definition of symbol under cursor
:rs/f/t/x substitute f by t in range r
x: g-all occurrences, c-confirm changes
:rs x repeat substitution with new r & x

Special characters in search patterns
.^ $ any single character, start, end of line
\< \> start, end of word
[c1-c2] a single character in range c1..c2
[^c1-c2] a single character not in range
\i \k \I \K an identifier, keyword; excl. digits
\f \p \F \P a file name, printable char.; excl. digits
\s \S a white space, a non-white space
\e \t \r \b <esc>, <tab>, <>, <>
\= * \+ match 0..1, 0.., 1.. of preceding atoms
\| separate two branches ( or)
\( \) group patterns into an atom
\& \n the whole matched pattern, nth () group
\u \l next character made upper, lowercase
\c \C ignore, match case on next pattern

Offsets in search commands
nor +n n line downward in column 1
-n n line upward in column 1
e+n e-n n characters right, left to end of match
s+n s-n n characters right, left to start of match
;sc execute search command sc next

Marks and motions
mc mark current position with mark c[a..Z]
`c `C go to mark c in current, C in any file
`0..9 go to last exit position
`` `" go to position before jump, at last edit
`[ `] go to start, end of previously operated text
:marks print the active marks list
:jumps print the jump list
n^O go to nth older position in jump list
n^I go to nth newer position in jump list

Key mapping & abbreviations
:map c e map c e in normal & visual mode
:map! c e map c e in insert & cmd-line mode
:unmap c :unmap! c remove mapping c
:mk f write current mappings, settings... to file f
:ab c e add abbreviation for c e
:ab c show abbreviations starting with c
:una c remove abbreviation c

Tags
:ta t jump to tag t
:nta jump to nth newer tag in list
^] ^T jump to the tag under cursor, return from tag
:ts t list matching tags and select one for jump
:tj t jump to tag or select one if multiple matches
:tags print tag list
:npo :n^T jump back from, to nth older tag
:tl jump to last matching tag
^W} :pt t preview tag under cursor, tag t
^W] split window and show tag under cursor
^Wzor :pc close tag preview window

Scrolling & multi-windowing
^E ^Y scroll line up, down
^D ^U scroll half a page up, down
^F ^B scroll page up, down
ztor z set current line at top of window
zzor z. set current line at center of window
zbor z- set current line at bottom of window
zh zl scroll one character to the right, left
zH zL scroll half a screen to the right, left
^Wsor :split split window in two
^Wnor :new create new empty window
^Woor :on make current window one on screen
^Wj ^Wk move to window below, above
^Ww ^W^W move to window below, above (wrap)

Ex commands ()
:e f edit file f, unless changes have been made
:e! f edit file f always (by default reload current)
:wn :wN write file and edit next, previous one
:n :N edit next, previous file in list
:rw write range r to current file
:rw f write range r to file f
:rw>>f append range r to file f
:q :q! quit and confirm, quit and discard changes
:wqor :xor ZZ write to current file and exit
<up> <down> recall commands starting with current
:r f insert content of file f below cursor
:r! c insert output of command c below cursor
:args display the argument list
:rco a :rm a copy, move range r below line a

Ex ranges
, ; separates two lines numbers, set to first line
n an absolute line number n
.$ the current line, the last line in file
% * entire file, visual area
't position of mark t
/p/ ?p? the next, previous line where p matches
+n -n +n, -n to the preceding line number

Folding
zfm create fold of movement m
:rfo create fold for range r
zd zE delete fold at cursor, all in window
zo zc zO zC open, close one fold; recursively
[z ]z move to start, end of current open fold
zj zk move down, up to start, end of next fold

Miscellaneous
:sh :!c start shell, execute command c in shell
K lookup keyword under cursor with man
:make start make, read errors and jump to first
:cn :cp display the next, previous error
:cl :cf list all errors, read errors from file
^L ^G redraw screen, show filename and position
g^G show cursor column, line, and character position
ga show ASCII value of character under cursor
gf open file which filename is under cursor
:redir>f redirect output to file f
:mkview [f] save view configuration [to file f]
:loadview [f] load view configuration [from file f]
^@ ^K ^_ \ Fn ^Fn unmapped keys