Open ninokierulf opened 1 year ago
Archive of vi/vim notes -- Brezeale Uni
Changing Text
cc | change a line |
C | change from current cursor position to the end-of-line |
cw | change from current cursor position to the end of the word |
J | joins the next line to the current line (inserts a space between the two) |
gJ | joins the next line to the current line (without a space) |
:12,24j | join lines 12 thru 24, leaving a space between each line. |
~ | switch lower and upper cases |
r | replace the current character with the next character typed |
4rx | replace next four characters with “x” |
R | overwrite until <esc> |
s | substitute the current character and go into insert mode. Same as “rxi <ESC>“ |
S | substitute the current line, erase it, and go into insert mode, starting at the indentation of the line. Same as “cc” |
>> | shift current line forward |
3>> | shift three lines forward |
>% | shift all lines until a matching brace or parenthesis |
>} | shift to the end of the paragraph |
>’m | shift to the marked line |
<< | shift current line backward |
vEU | change from here to end of word to uppercase |
vEu | change from here to end of word to lowercase |
Copying and Pasting
yl | yank (copy) current character |
yn | yank n characters |
yw | yank the current word |
yy | yank the current line |
Y | yank a line, same as “yy” |
nyy | yank n lines of text |
y$ | yank to end of line |
y) | yank to the end of the sentence |
y’x | yank from current line to the mark x (use mx to mark as x) |
y/word | yank from current position to "word" |
“ay’m | yank from here to the mark. Place this into the named buffer “a”. This will also allow one to switch files using the “:e fn” or “:n fn” command and then place the buffer back. |
“ayy | yank current line into buffer a. |
“a3Y | yank three lines, place into buffer “a” |
“A3Y | append 3 lines, place into “a”. This allows one to build up a buffer. |
“ap | paste the contents of “a” back, below current line. |
"zyy @z |
"zyy places the highlighted text into buffer z; @z will run the contents of buffer z. This allows a search pattern to be written in the document and then reused. |
p | paste to the right of the cursor |
P | paste to the left of the cursor |
Deleting
x | delete the character under the cursor |
dd | delete the current line |
d^ | delete from current cursor position to the beginning of the line |
d$ | delete from current cursor position to the end of the line |
dw | delete from current cursor position to the end of the word |
d3w | delete three words |
3dd | delete three lines |
d/word | delete until you find word |
dfx | delete from here until the character “x” |
D | delete everything to the end of the current line (same as d$) |
3dd | delete everything to the end of the current line and the following 2 lines |
u | undo deletion |
U | undo the line you just changed |
Inserting
i | insert at the current character |
I | insert at the beginning of the current line |
20I <ESC> | insert 20 dashes (-) at the beginning of the line |
a | append to the right of the current character |
A | append at the end of the current line |
o | insert a new line immediately following the current line |
O | insert a new line immediately before the current line |
Moving
h | move the cursor one character to the left |
j | move the cursor one character down |
k | move the cursor one character up |
l | move the cursor one character to the right |
0 | move cursor to the beginning of the current line |
$ | move cursor to the end of the current line |
w | move cursor forward a word |
3w | move cursor forward three words |
W | move cursor forward, ignoring punctuation |
b | move cursor back a word |
B | move cursor back a word, ignoring punctuation |
e | move cursor to the end of the word |
E | move cursor to the end of the word, ignoring punctuation |
G | move cursor to the last line of the file |
nG | move cursor to the beginning of line n |
1G | move to the first line of a file |
n| | moves the cursor to the beginning of column n |
f | find a character in the line, forward |
fa | find the character “a” in the line, forward |
2fa | find the second occurrence of “a” in the line, forward |
F | find a character in the line, backward |
Fz | find the character “z” in the line, backward |
t | find up to a character in the line, forward |
) | jump to the next sentence |
} | jump to the next paragraph |
] | jump to the next section |
% | find matching brace or parenthesis |
^b | scroll backwards one page. A count scrolls that many pages |
^f | scroll forwards one page. A count scrolls that many pages |
^u | scroll up half a screen |
^d | scroll down half a screen |
z <enter> | put current line at top of screen |
z. | put current line at middle of screen |
z- | put current line at bottom of screen |
m | start a mark, the next character is the name, any character from a-z |
ma | mark this spot with the character “a” |
‘a | return to the line marked “a” |
`a | return to the character marked “a” |
” | return to previous line (auto-mark) |
“ | return to previous character (auto-mark) |
Search and Replace
/word | search forward for word |
?word | search backward for word |
?word?z. | search forward for word, put line at the middle of screen |
n | jump forward to next occurance of word |
N | jump backward to next occurance of word |
* | search forward for word under cursor (vim) |
# | search backward for word under cursor (vim) |
g* | search forward for word under cursor (partial match) (vim) |
g# | search backward for word under cursor (partial match) (vim) |
:noh | stop highlighting the word that was searched for |
:s/old/new/ | replaces first occurence of old with new on current line |
:s/old/new/g | globally replaces old with new on current line |
:%s/old/new/g | globally replaces old with new on all lines |
:s/old/new/gc | confirms replacements |
:%s/^V^M//g | globally remove DOS carriage returns |
:%s/,/^V^M/g | globally replace commas with newlines (yes, I know this looks like it would insert DOS carriage returns, but it only inserts the newlines on Unix) |
:%s/\s*$// | strip blanks from end of lines |
:%s/^.\{30}// | remove the first 30 characters from each line |
:%s/[ ^I]*$/!d | remove trailing whitespace (where ^I is produced by pressing the tab key) |
:%s/.*/\L&/ | convert the entire file to lowercase. |
:s/.*/\u&/ | convert the first character of line to uppercase. |
:%s/\<./\u&/g |
convert the first character of each word to uppercase
|
:s/book{./\L&/ | convert the first character after the { to lowercase. |
:’x,.s/\([a-z]\)=/\1 =/ | replace any lowercase character in the alphabet followed by an equal sign with the same character followed by a space and an equal sign, e.g., book= >> book = |
::%s/\(That\) or \(this\)/\2 or \1/ | change "that or this" to "this or that" |
::%s/\(^\\foilhead{\(.*\)}\)/ %\1^M\\section{\2}/ |
comment out each line beginning with ‘\foilhead’ and replace with a line beginning with ‘\section’; note the nested backreferences for keeping the rest of the line the same |
::%s/\(.*\)/<a href="\1">\1<\/a>/ | add HTML tags for references to files |
:s/ \(\d\{1,2}\)\.\(\d\{1,2}\)\(.*\)/<a href="\1-\2.sh">\1.\2\3<\/a> |
change a line of the form |
:’x,.s:^\([^ ]\+\) \(.*\): |
change a line of the form Colons are used here instead of the usual slashes for separating the ‘find’ and ‘replace’ parts. The part ^\([^ ]\+\) finds all of the characters up to the first space and saves them for use in the ‘replace’ part as \1. |
:’x,.s/^/#/ | insert a pound sign (#) at the beginning of the line from the line marked with mx to the current line |
:%s/word1\nword2// | remove word1 from the end of a line and word2 from the beginning of the next line; \n represents the newline between the two |
:& | repeat previous substitution |
:<up arrow> | recall : history |
:g/string/d | deletes every line that contains string |
:g/\.c/+|s/^/\.cc/ | look for all “.c” commands, jump to next line, substitute the beginning of line with “.cc”. |
:g/^\..*/|s//\U&/ | convert all characters at beginning of line that start with a “.” to upper case. |
:v/string/d | deletes every line that does not contain string |
:g/.*/m0 |
This will reverse the order of the lines in the current file. m0 is the ex command to move the line to line 0. |
:v/./d or :g/^$/d |
Remove all blank lines. |
:g/^\s*$/d | Removes all lines that only have whitespace. |
:v/./.,/./-1join | Replaces multiple blank lines with just one blank line. |
Options
:se ai | autoindent (unset with :se noai) |
:se ff=unix | set fileformat to unix |
:se ic | ignore case when searching. |
:se list | display tabs and carriage returns |
:se nu | display line numbers in the file. They are not actually in the file. (unset with :se nonu) |
:se sm | show matching brace or parenthesis while inserting |
:se smd | display the mode |
:se sw=2 | set shifting to 2 spaces |
:se tabstop=4 | set tabs to 4 spaces |
^^D | turn off autoindent for current line, resume same place for the next line (up carrot and control-D) |
0^D | reset the autoindent, start at the left margin |
Using External Programs
!cmd | execute an external program called cmd |
!!cmd | execute an external program, replacing the output with the results |
!$ | send from here to the end-of-line |
!L | send from here to the last line of screen |
!23G | send from here to line 23 |
!/word | send from here until you find “word” |
!) | send from here until the next sentence |
!} | send from here until the next paragraph |
!!date | adds the date |
!!cut -c41- | cut the first 40 characters from a file |
3!!sort | send three lines to sort, and return the output |
!Grev | send from here to the end of file to the “rev” command; the results will reverse the characters in each line |
!}sort | sends from the current line until the first blank line to sort |
:’x,.!sort | will sort from the line marked with mx to the current line |
:r !ll | read the output of an “ll” command, and put it after the current line. |
:’t,’b !spell | check spelling from mark t to mark b |
:’t,. !awk ‘{print $3 ” ” $2 ” ” $1}’ | reverse the order of three columns |
:%! sed G | double space the entire file. |
:1,5! sed G | double space the lines from 1-5 |
:’x,.!sed ‘/^$/d’ | remove the blank lines from mark x to the current line |
Miscellaneous
^g | give file name, status, current line number and relative position |
^l | refresh the screen (sometimes `^P‘ or `^R‘) |
^v | visual mode. in Windows, Ctrl-v is mapped to paste text. Use Ctrl-q instead (vim) |
. | repeat latest command |
& | repeat latest `ex’ substitute command, e.g. :s/wrong/good/ |
:ab lg longer | create an abbreviation. Whenever lg is typed, it will be replaced with longer. |
vi +/string filename | start vi, jumping to the first occurrence of string |
vi -r filename | recovers an open file after a crash |
vi `cat somefile` | open a list of files that are in the file somefile |
:r filename | insert file filename, placing its contents after current line |
:1,4w filename | write lines 1 through 4 to filename |
:e filename | edit filename |
:f filename | change current file name to filename |
:n | edit next file |
:sh | call up the shell, run commands until a ^d (CONTROL-d), then return to editing |
:vi | VI MODE. Used if “Q” is pressed, or called up ex, and now wish to use the visual mode |
In Insert mode, press the Ctrl-p or Ctrl-n key to complete part of a word that has been typed. This is useful for entering function names. | |
:<up arrow> | recall : history |
Movement/editing/writing Hotkeys:
h
move left
j
move down
k
move up
l
move right
w
jump by start of words (punctuation considered words)
W
jump by words (spaces separate words)
e
jump to end of words (punctuation considered words)
E
jump to end of words (no punctuation)
b
jump backward by words (punctuation considered words)
B
jump backward by words (no punctuation)
0
(zero) start of line
^
first non-blank character of line
$
end of line
G
Go To command (prefix with number
i
start insert mode at cursor
I
insert at the beginning of the line
a
append after the cursor
A
append at the end of the line
o
open (append) blank line below current line
O
open blank line above current line
ea
append at end of word
r
replace a single character (does not use insert mode)
J
join line below to the current one
cc
change (replace) an entire line
cw
change (replace) to the end of word
c$
change (replace) to the end of line
s
delete character at cursor and subsitute text
S
delete line at cursor and substitute text (same as cc)
yy
yank (copy) a line
2yy
yank 2 lines
yw
yank word
y$
yank to end of line
p
put (paste) the clipboard after cursor
P
put (paste) before cursor
dd
delete (cut) a line
dw
delete (cut) the current word
x
delete (cut) current character
:w
write (save) the file, but don't exit
:wq
write (save) and quit
:q
quit (fails if anything has changed)
:q!
quit and throw away changes
File/window hotkeys:
/pattern
search for pattern
?pattern
search backward for pattern
n
repeat search in same direction
N
repeat search in opposite direction
:e filename
Edit a file in a new buffer
:bnext (or :bn)
go to next buffer
:bprev (of :bp)
go to previous buffer
:bd
delete a buffer (close a file)
:sp filename
Open a file in a new buffer and split window
ctrl+ws
Split windows
ctrl+ww
switch between windows
ctrl+wq
Quit a window
ctrl+wv
Split windows vertically
15 minutes, easy! 0 to FULL-VIM
last modified: 2022-11-07
Navigation (vertical)
C-u
- scroll up half pageC-d
- scroll down half pageC-o
- go back in jump listC-i
- go forward in jump listNavigation (horizontal)
C-h
- focus left paneC-l
- focus right paneS-h
- prev bufferS-l
- next bufferw
- 1 word forwardb
- 1 word backward0
- [zero] first char of the line (blank or otherwise, explicit)|
- [pipe] first char of the line (blank or otherwise, implicit)^
- first non-blank char of the line (explicit)_
- first non-blank char of the line (implicit)$
- last char of the lineSplits
C-w
s
- split horizontallyC-w
n
- split horizontallyC-w
v
- split verticallyC-w
x
- swap splitC-w`` h
- focus split leftC-w
j
- focus split downC-w
k
- focus split upC-w
l
- focus split rightC-w
q
- close splitTabs
g
t
- next tab<leader>
n
- new tab (or:tabnew
)Commands
:q!
- quit without saving:wq
- save and quit:qa
- quit all (assuming no changes or all files saved)