Vim - KeynesYouDigIt/Knowledge GitHub Wiki
-
i,a,A- Insert mode -
s- Substitutes and inserts -
R- Replace (overwrite) mode (rfor one-shot) -
<esc>,<ctrl> + [- Normal mode -
Q- Go to ex mode -
visual- To vim from ex mode` - Operator-pending mode - After you enter a command, it waits for an operator to execute it
-
Ctrl+o- Insert-Normal mode, one-shot normal command then back to insert -
Ctrl+gin Visual mode - Switches to select mode, which works the same as GUI text editors - Visual mode
-
vfor character-wise -
Vfor line-wise -
Ctrl+vfor block-wise -
gvto highlight the previous visual area -
o- Toggle which end of a visual selection is fixed -
IandAallow you to insert-i/aare for text objects -
:to enterexmode with that range selected
-
-
q:- In normal mode, open a buffer with your command history- searchable, editable
-
vim <filename> <filename>- Open multiple files -
vim + <filename>- Open file at last line -
vim +<num> <filename>- Open file at a specific line -
vim +/<pattern> <filename>- Open file at the first occurrence of pattern -
vim -R <filename>- Read-only -
vim -r- Show recovered files -
vim -r <filename>- Recover file
-
:w <new filename>- Save (write) -
:w! <new filename>- Save with overwrite -
:w %- Save current file -
:q- Quit -
:q!- Force quit, no save -
:wq- Write and quit -
:x- Write and quit (doesn’t update modified time if not changed) -
:e!- Reset this file -
:r- Import contents of file -
:pre- Preserve buffer (if the file turns out to be read only, for example) -
ZZ- Save and quit
-
:n- Next open file -
:e <filename>- Edit a file while keeping the current one open-
Ctrl + ^- Switch between open files -
:e #- Switch between open files
-
-
w- forward one word -
W- Forward one word, skip punctuation -
b- Backward one word -
B- Backward one word, skip punctuation -
0- Beginning of line -
$- End of line -
gg- Beginning of file -
G- End of file -
G<number>- Go to line -
``- Go to your last edit -
''- Go to the beginning of the line your last edit was on -
+- First character of next line -
-- First character of previous line -
^- First non-blank character in a line -
<num> |- Move to a specific line’s column -
(- Beginning of sentence -
)- End of sentence (looks for . ? or ! followed by two spaces) -
{- Beginning of paragraph -
}- End of paragraph (looks for sentence followed by paragraph marker) -
{{- Beginning of section -
}}- End of section (looks for sentence followed by section marker)
-
m <marker name>- Set a named marker -
' <marker name>- Jump to beginning of marker’s name -
`<marker name>- Jump to marker
"<character><command>
-
"ayy- Yank line into registera -
"ap- Paste registera -
"1p- Paste the last yanked thing -
"9p- Paste the thing that was yanked 9 things ago -
""yy- Yank into the unnamed register (what yank uses) -
"+yG- Yank until the end of the file into the system register- Vim must be compiled with clipboard support
-
"+p- Paste the system register and keep formatting intact - Macros use the same registers, and can be edited and yanked into
-
Ctrl+r a- Paste registerain insert mode
-
ctrl + f- Page forward -
ctrl + b- Page backward -
ctrl + d- Half page forward -
ctrl + u- Half page backward -
ctrl + y- One line forward -
ctrl + e- One line backward -
z <enter>- Cursor to top and recenter -
z .,zz- Recenter screen -
z -- Cursor to bottom and recenter -
<num>z- Center on a specific line -
H- "home", top line of screen- numeric prefix is lines away from top
-
M- "middle", middle line on screen -
L- "last", last line on screen- numeric prefix is lines away from bottom
-
Ctrl + L- Redraw the screen`
These can all be used with the other vim commands (eg, change, delete)
-
/<search>- Regex search (n for next, N for previous) -
?<search>- Regex search backward (n for next, N for previous) -
/<enter>- Repeat search -
?<enter>- Repeat search backward -
/~-~is a glob for your last regex
These can all be used with the other vim commands (eg, change, delete)
-
f <character>- Find next character in the current line -
F <character>- Find previous character in the current line -
t <character>- Find the character before the next in the current line -
T <character>- Find the character before the previous in the current line -
;- Next, same direction -
,- Next, opposite direction
-
%s/<search>/<replace>/<options>- Regex search and replace-
g- Global -
i- Case insensitive -
c- Confirm
-
-
:g/<pattern>/s/<old>/<new>/g- Find lines that match, then run :s -
ctrl + v- Escape next character
<num><insert command><character><normal mode> - Insert repeating characters.
-
a- Add text after cursor -
A- Add text at end of line -
i- Add text before cursor -
I- Add text at beginning of line -
o- Insert blank line after -
O- Insert blank line before
-
c<num><type>- Change some text.w/W,e/E,b/B,0,$,G,gg,- Shortcuts:
cc(whole line),C(to end of line)
- Shortcuts:
-
r- replace character- Can take a numeric prefix to change multiple characters
-
R- Replace text, insert style -
s- (substitute) delete character, enter insert mode- Can take a numeric prefix to change the middle part of a word
-
S- Delete line, enter insert mode
-
d<num><type>- Delete some text.w/W,e/E,b/B,0,$,G,gg,- Shortcuts:
dd(whole line),D(to end of line)
- Shortcuts:
-
"<buffer name><command>- delete into named buffer -
x- Delete character under cursor -
X- Delete character behind cursor - Insert mode deletes:
-
Ctrl + h- Character -
Ctrl + w- Word -
Ctrl + u- Changes in line` - These also work in bash and ex
-
-
y<num><type>- Copy some text.w/W,e/E,b,0,$,G,gg- Shortcuts: yy/Y (copy current line)
-
"<buffer name><command>- Yank into named buffer -
p- Paste -
"<num>p- Paste buffers 1-9-
.increments the number
-
-
"<buffer name>p- Paste named buffer - Yank and delete share number buffers. Yank can also use named buffers.
-
Ctrl-r0- From insert mode- Paste the last buffer -
Ctrl-r={expression}- Insert an expression, such as basic math -
Ctrl-k{character}{character}- Add a digraph to the page, like ½ and ⅔. Look up the list of digraphs with:h digraph-table -
Ctrl-v{character-code}- Insert a character code
:Grep <pattern> <files> / make generate a list that can be navigated
-
:copen- Open quickfix list -
:cn/:cp- Next/previous line on the quickfix list -
:ccl- Close quickfix list
-
J- Join current and next line- Accepts numeric argument
-
~- Change case of letter -
>/<- Change indentation -
gu/gU- Chase case -
=- Autoindent - Repeating a character makes it operate on the whole line (
dd,yy,cc,>>,<<,==,gUU,guu
-
u- Undo last change (a change is normal -> insert -> normal) -
U- Undo all changes on this line -
.- Repeat last change -
@:- Repeat Ex command, macro -
&- Repeat last substitute command
-
a- Around -
i- Inside
-
{count}Ctrl+a/{count}Ctrl+x- Increment/Decrement next number on line
-
:!<command>- Execute a unix command-
%references the current file name
-
-
:sh- Temporarily switch to a console-
Ctrl+Dorexitto switch back -
Ctrl+z/fgis usually quicker
-
- Ex takes a line address, a command, and a return.
-
|- Execute multiple ex commands -
:<address>r !<some unix command>- Insert result of a unix command -
:w !ls- Write to STDIN -
:r !ls- Read from STDOUT -
:{range}!ls- Filter (write/read) through command -
:t- Copy (eg. :5,6t 9) -
:m- Move -
:normal- Execute a normal command across a range (better than a simple macro, good for repeating) -
Ctrl+dlist options -
Ctrl+r Ctrl+w- Paste in currently highlighted word to ex
- A number (
10) - A range (
1,100) - A relative range (
1;+8) -
$(last line) -
%(all lines) -
.(current line) - Expression (eg
$-20) -
+,++,-,-- /pattern/
-
:<lines>co<destination>- Copy (also could use “t”) -
:<lines>m<destination>- Move -
:<lines>d- Delete -
:<lines>w <new filename>- Save out part of a file -
:<lines>w >><new filename>- Append to a file -
:<address>r- Read a file in
-
:set optionto set,:set nooptionto unset -
:set all- Show all current settings -
:set- Show all settings that have been explicitly set -
:set option?- Show a specific setting
wrapmargin=15ignorecase-
wrapscan(during global searches) -
magic(recognize wildcard characters) autoindentshowmatchtabstopshiftwidthnumberlistautowrite
- Save ex commands in a file with a
.vimextension - Run it with
:source - Open multiple files, and then use
:argdo source batch.vim
-
<number><command><text>is the same as<command><number><text> -
Ctrl + G- Show page stats at the bottom of the screen` - The leader key is a prefix for custom hotkeys
-
gatells you information about the character under your cursor
- Lean heavily on
.- prefer it to counts. It undos/redos better.