Files
awesome-cheatsheets/tools/vim.txt
2022-04-22 18:54:49 +03:00

619 lines
24 KiB
Plaintext

##############################################################################
# VIM CHEATSHEET
# WEBSITE: http://www.vim.org/
# DOCUMENTATION: https://vim.sourceforge.io/docs.php
# CTRL-A = <C-a>
##############################################################################
##############################################################################
# CURSOR MOVEMENTS
##############################################################################
h move a character left
j move a line down
k move a line up
l move a character right
gj move a visual line down
gk move a visual line up
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)
ge jump backward to end of words
0 (zero) start of line
^ first non-whitespace character of line
$ end of line
n$ move to the end of line n lines down
- move line upwards, on the first non-whitespace character
+ move line downwards, on the first non-whitespace character
<enter> move line downwards, on the first non-whitespace character
gg go to first line
G go to last line
ngg go to line n
nG go to line n
:n go to line n
:-n go n lines up, like nk
:+n go n lines down, like nj
) move the cursor forward to the next sentence
( move the cursor backward by a sentence
{ move the cursor a paragraph backwards
} move the cursor a paragraph forwards
]] move the cursor a section forwards or to the next {
[[ move the cursor a section backwards or the previous {
<C-f> move the cursor forward by a screen of text
<C-b> move the cursor backward by a screen of text
<C-u> move the cursor up by half a screen
<C-d> move the cursor down by half a screen
H move the cursor to the top of the screen
M move the cursor to the middle of the screen
L move the cursor to the bottom of the screen
fx find and move on next occurance of x on current line
Fx find and move on previous occurance of x on current line
tx find and move to next occurance of x on current line
Tx find and move to previous occurance of x on current line
; rerun last f/F/t/T movement
, rerun last f/F/t/T movement but in the opposite way
##############################################################################
# BOOKMARKS
##############################################################################
:marks list all the current marks
ma make a bookmark named a at the current cursor position
`a go to position of bookmark a
'a go to the line with bookmark a
`. go to the line that you last edited
##############################################################################
# INSERT MODE
##############################################################################
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
<Esc> exit insert mode
##############################################################################
# EDITING
##############################################################################
r replace a single character (does not use insert mode)
R enter Insert mode, replacing characters rather than inserting
J join line below to the current one and add space
gJ join line below to the current one without adding space
cc change an entire line
cw change to the end of word
ciw change whole word regardless of where you are in it
cip change in paragaph (between new lines)
cap change around paragaph and the paragraph itself
ci( change in pair of (, works with { [ " ' too
ca( change in and around pair of (, works with { [ " ' too
C change to the end of line
ct' change until the ' character (can change ' for any character)
ci" change everything in the next " on the line
s delete character at cursor and substitute text
S delete line at cursor and substitute text (same as cc)
xp transpose two letters (delete and paste, technically)
u undo
<C-r> redo
<C-a> increment number under cursor
<C-x> decrement number under cursor
. repeat last command
~ switch case
g~iw switch case of current word
gUiw make current word uppercase
guiw make current word lowercase
gU$ make uppercase until end of line
gu$ make lowercase until end of line
>> indent line one column to right
<< indent line one column to left
<ip indent in paragraph to the left
>ip outdent in paragraph to the left
<ap indent around paragraph to the left and the paragraph itself
>ap outdent around paragraph to the left and the paragraph itself
== auto-indent current line
ddp swap current line with next
ddkp swap current line with previous
g?? rot13 encode current line, useful for spoilering text
<C-r>=3+3 in insert mode, will evaluate 3+3 and paste it, works with simple expressions
##############################################################################
# DELETING TEXT
##############################################################################
x delete current character
X delete previous character
dw delete the current word
dd delete (cut) a line
diw delete whole word regardless of where you are in it
dip delte in paragraph
dap delte around paragraph and the paragraph itself
dt' delete until the next ' character on the line (replace ' by any character)
D delete from cursor to end of line
:[range]d delete [range] lines
di( delete in pair of (, works with { [ " ' too
da( delete in and around pair of (, works with { [ " ' too
##############################################################################
# COPYING AND MOVING TEXT
##############################################################################
yw yank word
yy yank (copy) a line
nyy yank n lines
y$ yank to end of line
yiw yank whole word regardless of where you are in it
yip yank in paragaph (between new lines)
yap yank around paragaph and the paragraph itself
yi( yank in pair of (, works with { [ " ' too
ya( yank in and around pair of (, works with { [ " ' too
p put (paste) the clipboard after cursor/current line
P put (paste) before cursor/current line
:set paste avoid unexpected effects in pasting
:registers display the contents of all registers
"xyw yank word into register x
"xyy yank line into register x
:[range]y x yank [range] lines into register x
"xp put the text from register x after the cursor
"xP put the text from register x before the cursor
"xgp just like "p", but leave the cursor just after the new text
"xgP just like "P", but leave the cursor just after the new text
:[line]put x put the text from register x after [line]
##############################################################################
# MACROS
##############################################################################
qa start recording macro to register a
q end recording macro
@a replay macro 'a'
@@ replay last macro
@: replay last command
"ap paste the conents of the a register/macro
"ayy yank the current line into the a register/macro
##############################################################################
# VISUAL MODE
##############################################################################
v start visual mode, mark lines, then do command (such as y-yank)
V start linewise visual mode
o move to other end of marked area
U upper case of marked area
<C-v> start visual block mode
O move to other corner of block
aw mark a word
ab a () block (with braces)
ab a {} block (with brackets)
ib inner () block
ib inner {} block
vap visually select paragraph and around it
vip visually select in paragraph
v% matching parenthesis
vi{ selects matching curly brace
vi" selects text between double quotes
vi' selects text between single quotes
va" selects text around double quotes
va' selects text around single quotes
g<C-a> increment selected text but increment with one more each time
g<C-x> decrement selected text but decrement with one more each time
##############################################################################
# SPELLING
##############################################################################
]s next misspelled word
[s previous misspelled word
zg add word to wordlist
zug undo last add word
z= suggest word
##############################################################################
# EXITING
##############################################################################
:q quit Vim, fails when changes have been made
:q! quit without writing
:cq quit always, without writing
:w save without exiting
:wq write the current file and exit
:wq! write the current file and exit always
:wq {file} write to {file} Exit if not editing the last
:wq! {file} write to {file} and exit always
:[range]wq[!] same as above, but only write the lines in [range]
ZZ write current file, if modified, and exit
ZQ quit current file and exit (same as ":q!")
##############################################################################
# SEARCH/REPLACE
##############################################################################
/pattern search for pattern
?pattern search backward for pattern
n repeat search in same direction
N repeat search in opposite direction
* search forward, word under cursor
# search backward, word under cursor
set ignorecase ignore case: turn on
set noignorecase ignore case: turn off
:%s/old/new/g replace all old with new throughout file
:%s/old/new/gc replace all old with new throughout file with confirmation
:argdo %s/old/new/gc | wq open multiple files and run this command to replace old
with new in every file with confirmation, save and quit
##############################################################################
# MULTIPLE FILES AND BUFFERS
##############################################################################
:e filename edit a file in a new buffer
:tabe filename edit a file in a new tab (Vim7, gVim)
:ls list all buffers
:bn go to next buffer
:bp go to previous buffer
:bd delete a buffer (close a file)
:b1 show buffer 1
:b vimrc show buffer whose filename begins with "vimrc"
:bufdo <command> run 'command(s)' in all buffers
:[range]bufdo <command> run 'command(s)' for buffers in 'range'
##############################################################################
# WINDOWS
##############################################################################
:sp file horizontal split open file, if you don't specify it opens the current one
:vsp file vertical split open file, if you don't specify it opens the current one
<C-ws> split windows
<C-ww> switch between windows
<C-wq> quit a window
<C-wv> split windows vertically
<C-wx> swap windows
<C-wh> left window
<C-wj> down window
<C-wk> up window
<C-wl> right window
<C-w+> increase window height
<C-w-> decrease window height
<C-w<> increase window width
<C-w>> decrease window width
<C-w=> equal window
<C-wo> close other windows
zz visually puts current line at the center of the screen
##############################################################################
# QUICKFIX WINDOW
##############################################################################
copen open quickfix window
cclose close quickfix window
cc [nr] display error [nr]
cfirst display the first error
clast display the last error
[count]cn display [count] next error
[count]cp display [count] previous error
##############################################################################
# PROGRAMMING
##############################################################################
% show matching brace, bracket, or parenthese
gf edit the file whose name is under or after the cursor
gd if cursor is on a local variable or function, jump to its declaration
'' return to the line where the cursor was before the latest jump
gi return to insert mode where you inserted text the last time
<C-o> move to previous position you were at
<C-i> move to more recent position you were at
##############################################################################
# COMMANDS
##############################################################################
q: list command history
:set optionName set the optionName option
:h[elp] command open offline help menu for command
:put paste
:put = 3+3 calculate 3+3 and put it on a new line, works with basic expressions
:%retab fix spaces / tabs issues in whole file
:r [name] insert the file [name] below the cursor
:r !{cmd} execute {cmd} and insert its standard output below the cursor
:%le remove all leading whitespace
:%y yank whole file
:[range]norm Ihi run a sequence of commands on a range of lines
##############################################################################
# PLUGINS > ACK
##############################################################################
:Ack Search recursively in directory
o to open (same as enter)
go to preview file (open but maintain focus on ack.vim results)
t to open in new tab
T to open in new tab silently
q to close the quickfix window
##############################################################################
# PLUGINS > CHEAT
##############################################################################
:Cheat open cheat sheet (with autocomplete)
<leader>ch open cheat sheet for word under the cursor
##############################################################################
# PLUGINS > GIST
##############################################################################
:Gist post whole text to gist
:Gist XXXXX get gist XXXXX
:Gist -l list my gists
##############################################################################
# PLUGINS > GUNDO
##############################################################################
:GundoToggle show undo tree
##############################################################################
# PLUGINS > LUSTYJUGGLER
##############################################################################
<Leader>lj show open buffers
##############################################################################
# PLUGINS > NERDCOMMENTER
##############################################################################
<leader>cc comment out line(s)
<leader>c<space> toggle the comment state of the selected line(s)
##############################################################################
# PLUGINS > NERDTREE
##############################################################################
:NERDTreeToggle show / hide file browser
:NERDTreeFind show current file in file browser
:Bookmark name bookmark the current node as "name"
FILE
----
o open in prev window
go preview
t open in new tab
T open in new tab silently
i open split
gi preview split
s open vsplit
gs preview vsplit
DIRECTORY
---------
o open & close node
O recursively open node
x close parent of node
X close all child nodes of current node recursively
e explore selected dir
BOOKMARK
--------
o open bookmark
t open in new tab
T open in new tab silently
D delete bookmark
TREE NAVIGATION
---------------
P go to root
p go to parent
K go to first child
J go to last child
<C-j> go to next sibling
<C-k> go to prev sibling
FILESYSTEM
----------
C change tree root to the selected dir
u move tree root up a dir
U move tree root up a dir but leave old root open
r refresh cursor dir
R refresh current root
m show menu
cd change the CWD to the selected dir
TREE FILTERING
--------------
I hidden files
f file filters
F files
B bookmarks
OTHER
-----
q close the NERDTree window
A zoom (maximize-minimize) the NERDTree window
? toggle help
##############################################################################
# PLUGINS > PDV
##############################################################################
<C-P> generate PHP DOC
##############################################################################
# PLUGINS > PICKACOLOR
##############################################################################
:PickHEX choose color in system color picker
##############################################################################
# PLUGINS > SNIPMATE
##############################################################################
<tab> expand snippet
##############################################################################
# PLUGINS > SPARKUP
##############################################################################
<C-e> execute sparkup (zen coding expansion)
<C-n> jump to the next empty tag / attribute
##############################################################################
# PLUGINS > SURROUND
##############################################################################
cs'" change surrounding quotes to double-quotes
cs(} change surrounding parens to braces
cs({ change surrounding parens to braces with space
ds' delete surrounding quotes
dst delete surrounding tags
ysiw[ surround inner word with brackets
vees' surround 2 words (ee) with quotes '
##############################################################################
# PLUGINS > TABULAR
##############################################################################
:Tabularize /, line the selected lines up on the commas
##############################################################################
# PLUGINS > TAGLIST
##############################################################################
:TlistToggle open / close taglist window
<enter> jump to tag or file
<space> display the tag prototype
##############################################################################
# PLUGINS > UNIMPAIRED
##############################################################################
[space new line above
]space new line below
[e exchange line above
]e exchange line below
[x XML encode
]x XML decode (with htmlentities)
[q jump to previous quickfix item
]q jump to next quickfix item
[Q jump to first quickfix item
]Q jump to last quickfix item
##############################################################################
# PLUGINS > VIM-FUGITIVE
##############################################################################
:Git run a git command
:Gstatus git status : - to (un)stage , p to patch, C to commit
:Gcommit git commit
:Gread empty the buffer and revert to the last commit
:Gwrite write the current file and stage the results
:Gmove git mv
:Gremove git rm
:Glog git log
:Gdiff perform a vimdiff against the current file of a certain revision
:Gblame open blame information in a scroll bound vertical splitt
:Gbrowse open github
##############################################################################
# PLUGINS > VIM-MARKDOWN-PREVIEW
##############################################################################
:Mm preview markdown document in webbrowser
##############################################################################
# PLUGINS > VIM-PEEPOPEN
##############################################################################
<Leader>p open the current directory with the peepopen application (fuzzy search)
##############################################################################
# PLUGINS > VIM-SYMFONY
##############################################################################
:Sview open template file
:Saction open action file
:Smodel open model file
:Sfilter open filter file
:Sform open form file
:Spartial open partial file / write selected content in partial + include
:Scomponent open component file / write selected content in component + include
:Salternate open alternate model file (class - table class)
:Symfony execute task