- delete file and quit =>
:execute '!rm ' . expand('%:p') | q!
- exit terminal mode =>
ctrl + \ ctrl + n
- open split from fzf =>
ctrl + v
- add quote arround word =>
csw"
- remove quote arround =>
ds"
- reload lsp =>
lgg
- code action =>
lgf
- code action menu =>
lga
- incoming calls =>
lgc
- go type def =>
lgt
- go def =>
lgd
- go implem =>
lgi
- go ref =>
lgr
- rename =>
lgn
- signature =>
lgk
CTRL + h
: Move to the left split windowCTRL + j
: Move to the below split windowCTRL + k
: Move to the above split windowCTRL + l
: Move to the right split window
<Shift-Right>
: Move to the next window on the right<Shift-Left>
: Move to the next window on the left<Shift-Up>
: Move to the next window above<Shift-Down>
: Move to the next window below
<C-g>
: Toggle NERDTree<Leader>=
: Toggle Zoom<Leader>[number]
: Switch to tab [number]<Leader>t
: Open a new tab<Leader>\
: Create a vertical split<Leader>n
: Create a horizontal split<Leader>o
: Open available buffers<Leader>g
: Open available Git files<Leader>h
: Open recent files<Leader><Leader>
: Open recent commands<Leader>f
: Preview project files<Leader>F
: Open FZF<Leader>v
: Search in all project files<Leader>]
: Switch to the next buffer<Leader>[
: Switch to the previous buffer<Leader>d
: Close current buffer without closing the window<Leader>c
: Close buffer<Leader>x
: Force close current windowgb
: Git blame
lgd
: Go to definitionlgk
: Show signature helpK
: Show hover informationlgi
: Go to implementationlgc
: Show incoming callslgt
: Go to type definitionlgr
: Show referenceslgn
: Renamelgs
: Show document symbolslgw
: Show workspace symbols
ldb
: Toggle breakpointldi
: Step intoldu
: Step outldo
: Step overldc
: Continue debuggingldk
: Terminate debugging
[x
: Go to the previous diagnostic]x
: Go to the next diagnostic]s
: Show diagnostics<Space>q
: Open the Trouble plugin
dv.header(2, 'Links');
for (let group of dv.pages().groupBy(b => b.file.name)) {
let pg = dv.current();
if (group.key === pg.file.name) {
group.rows.map((r) => {
let localinlinks = r.file.inlinks.map(k => [k]);
let localoutlinks = r.file.outlinks.map(k => [k]);
if (localinlinks.length) {
dv.table(["in"], localinlinks)
}
if (localoutlinks.length) {
dv.table(["out"], localoutlinks)
}
})
}
}
- Misc Commands
- Editor Actions
- Ctrl Actions
- Editing Mode
- Marking text via visual mode
- Visual commands
- Registers
- Marks and positions
- Macros
- Cut and paste
- Indent text
- Exiting and Saving files
- Searching
- Tabs
- Working with multiple files
- Diff Operations
:h[elp] <keyword>
- open help for<keyword>
(don't use "<>"):sav[eas] <file>
- save<file>
as:clo[se]
- close current pane:ter[minal]
- open a terminal window
K
- open man page for word under the cursor- Tip: - Run vimtutor in a terminal to learn the first Vim commands.
h
- move cursor leftj
- move cursor downk
- move cursor upl
- move cursor rightH
- move to top of screenM
- move to middle of screenL
- move to bottom of screenw
- jump forwards to the start of a wordW
- jump forwards to the start of a word (words can contain punctuation)e
- jump forwards to the end of a wordE
- jump forwards to the end of a word (words can contain punctuation)b
- jump backwards to the start of a wordB
- jump backwards to the start of a word (words can contain punctuation)%
- move to matching character (default supported pairs: '()', '{}', '[]' - use :h matchpairs in vim for more info)0
- jump to the start of the line^
- jump to the first non-blank character of the line$
- jump to the end of the line;
- repeat previous f, t, F or T movement,
- repeat previous f, t, F or T movement, backwards}
- jump to next paragraph (or function/block, when editing code){
- jump to previous paragraph (or function/block, when editing code)
g_
- jump to the last non-blank character of the linegg
- go to the first line of the documentG
- go to the last line of the document5gg
or5G
- go to line 5gd
- move to local declarationgD
- move to global declarationfx
- jump to next occurrence of character xtx
- jump to before next occurrence of character xFx
- jump to previous occurence of character xTx
- jump to after previous occurence of character xzz
- center cursor on screen
gh
- move cursor up to the pevious editor linegj
- move cursor down to the next editor lineg0
- jump to the beginning of the editor lineg^
- jump to the first non-blank character in the editor lineg$
- jump to the end of the editor line
Ctrl + e
- move screen down one line (without moving cursor)Ctrl + y
- move screen up one line (without moving cursor)Ctrl + b
- move back one full screenCtrl + f
- move forward one full screenCtrl + d
- move forward 1/2 a screenCtrl + u
- move back 1/2 a screen- Tip: - Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.
Ctrl + h
- delete the character before the cursor during insert modeCtrl + w
- delete word before the cursor during insert modeCtrl + j
- begin new line during insert modeCtrl + t
- indent (move right) line one shiftwidth during insert modeCtrl + d
- de-indent (move left) line one shiftwidth during insert modeCtrl + n
- insert (auto-complete) next match before the cursor during insert modeCtrl + p
- insert (auto-complete) previous match before the cursor during insert modeCtrl + rx
- insert the contents of register x
Ctrl + ws
- split windowCtrl + wv
- split window verticallyCtrl + ww
- switch windowsCtrl + wq
- quit a windowCtrl + wx
- exchange current window with next oneCtrl + w=
- make all windows equal height & widthCtrl + wh
- move cursor to the left window (vertical split)Ctrl + wl
- move cursor to the right window (vertical split)Ctrl + wj
- move cursor to the window below (horizontal split)Ctrl + wk
- move cursor to the window above (horizontal split)
i
- insert before the cursorI
- insert at the beginning of the linea
- insert (append) after the cursorA
- insert (append) at the end of the lineo
- append (open) a new line below the current lineO
- append (open) a new line above the current lineea
- insert (append) at the end of the wordEsc
- exit insert mode
r
- replace a single characterJ
- join line below to the current one with one space in betweengJ
- join line below to the current one without space in betweengwip
- reflow paragraphg~
- switch case up to motiongu
- change to lowercase up to motiongU
- change to uppercase up to motioncc
- change (replace) entire lineC
- change (replace) to the end of the linec$
- change (replace) to the end of the lineciw
- change (replace) entire wordcw
- change (replace) to the end of the words
- delete character and substitute textS
- delete line and substitute text (same as cc)xp
- transpose two letters (delete and paste)u
- undoU
- restore (undo) last changed lineCtrl + r
- redo.
- repeat last command
v
- start visual mode, mark lines, then do a command (like y-yank)V
- start linewise visual modegv
- start visual mode, recalling the previous selectiono
- move to other end of marked areaCtrl + v
- start visual block modeO
- move to other corner of blockaw
- mark a wordab
- a block with ()aB
- a block with {}at
- a block with <> tagsib
- inner block with ()iB
- inner block with {}it
- inner block with <> tagsEsc
- exit visual mode- Tip: - Instead of b or B one can also use ( or { respectively.
>
- shift text right<
- shift text lefty
- yank (copy) marked textd
- delete marked text~
- switch caseu
- change marked text to lowercaseU
- change marked text to uppercase
:reg[isters]
- show registers content"xy`
- yank into register x"xp`
- paste contents of register x"+y`
- yank into the system clipboard register"+p`
- paste from the system clipboard register- Tip - Registers are being stored in ~/.viminfo, and will be loaded again on next restart of vim.
β0
- last yankβ"
- unnamed register, last delete or yankβ%
- current file nameβ#
- alternate file nameβ*
- clipboard contents (X11 primary)β+
- clipboard contents (X11 clipboard)β/
- last search patternβ:
- last command-lineβ.
- last inserted textβ-
- last small (less than a line) deleteβ=
- expression registerβ_
- black hole register
:marks*
- list of marksma
- set current position for markA
`a
- jump to position of markA
y`a
- yank text to position of markA
`0
- go to the position where Vim was previously exited`"
- go to the position when last editing this file`.
- go to the position of the last change in this file`` -
go to the position before the last jump:ju[mps]
- list of jumpsCtrl + i
- go to newer position in jump listCtrl + o
- go to older position in jump list:changes
- list of changesg,
- go to newer position in change listg;
- go to older position in change listCtrl + ]
- jump to the tag under cursor- Tip - To jump to a mark you can either use a backtick (
`
) or an apostrophe ('). Using an apostrophe jumps to the beginning (first non-black) of the line holding the mark.
qa
- record macro aq
- stop recording macro@a
- run macro a@@
- rerun last run macro
yy
- yank (copy) a line2yy
- yank (copy) 2 linesyw
- yank (copy) the characters of the word from the cursor position to the start of the next wordy$
- yank (copy) to end of linep
- put (paste) the clipboard after cursorP
- put (paste) before cursordd
- delete (cut) a line2dd
- delete (cut) 2 linesdw
- delete (cut) the characters of the word from the cursor position to the start of the next wordD
- delete (cut) to the end of the lined$
- delete (cut) to the end of the linex
- delete (cut) character
>>
- indent (move right) line one shiftwidth<<
- de-indent (move left) line one shiftwidth>%
- indent a block with () or {} (cursor on brace)>ib
- indent inner block with ()>at
- indent a block with <> tags3==
- re-indent 3 lines=%
- re-indent a block with () or {} (cursor on brace)=iB
- re-indent inner block with {}gg=G
- re-indent entire buffer]p
- paste and adjust indent to current line
:w
- write (save) the file, but don't exit:w!sudo tee %
- write out the current file using sudo:wq
or:x
orZZ
- write (save) and quit:q
- quit (fails if there are unsaved changes):q!
orZQ
- quit and throw away unsaved changes:wqa
- write (save) and quit on all tabs
/pattern
- search for pattern?pattern
- search backward for pattern\vpattern
- 'very magic' pattern: non-alphanumeric characters are interpreted as special regex symbols (no escaping needed)n
- repeat search in same directionN
- repeat search in opposite direction:%s/old/new/g
- replace all old with new throughout file:%s/old/new/gc
- replace all old with new throughout file with confirmations:noh[lsearch]
- remove highlighting of search matches
:vim[grep] /pattern/ {`{file}`}****
- search for pattern in multiple files **e.g. :vim[grep] /foo/ **/*
:cn[ext]
- jump to the next match:cp[revious]
- jump to the previous match:cope[n]
- open a window containing the list of matches:ccl[ose]
- close the quickfix window
:tabnew
or:tabnew {page.words.file}
- open a file in a new tabCtrl + wT
- move the current split window into its own tabgt
or:tabn[ext]
- move to the next tabgT
or:tabp[revious]
- move to the previous tab#gt
- move to tab number #:tabm[ove] #
- move current tab to the#
th position (indexed from 0):tabc[lose]
- close the current tab and all its windows:tabo[nly]
- close all tabs except for the current one:tabdo command
- run the command on all tabs (e.g.:tabdo q
- closes all opened tabs)
:e[dit]
file - edit a file in a new buffer:bn[ext]
- go to the next buffer:bp[revious]
- go to the previous buffer:bd[elete]
- delete a buffer (close a file):b[uffer]#
- go to a buffer by index #:b[uffer] <file>
- go to a buffer by<file>
(_remove the "<>"):ls
or:buffers
- list all open buffers:sp[lit] <file>
- open a<file>
in a new buffer and split window:vs[plit] <file>
- open a<file>
in a new buffer and vertically split window:vert[ical] ba[ll]
- edit all buffers as vertical windows:tab ba[ll]
- edit all buffers as tabs
zf
- manually define a fold up to motionzd
- delete fold under the cursorza
- toggle fold under the cursorzo
- open fold under the cursorzc
- close fold under the cursorzr
- reduce (open) all folds by one levelzm
- fold more (close) all folds by one levelzi
- toggle folding functionality]c
- jump to start of next change[c
- jump to start of previous changedo
or:diffg[et]
- obtain (get) difference (from other buffer)dp
or:diffpu[t]
- put difference (to other buffer):diffthis
- make current window part of diff:dif[fupdate]
- update differences:diffo[ff]
- switch off diff mode for current window- Tip - The commands for folding (e.g. za) operate on one level. To operate on all levels, use uppercase letters (e.g. zA).
- Tip - To view the differences of files, one can directly start Vim in diff mode by running vimdiff in a terminal. One can even set this as git difftool.