- 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 document5ggor5G- 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 markAy`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:wqor:xorZZ- 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
:tabnewor:tabnew {page.words.file}- open a file in a new tabCtrl + wT- move the current split window into its own tabgtor:tabn[ext]- move to the next tabgTor: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 "<>"):lsor: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 changedoor:diffg[et]- obtain (get) difference (from other buffer)dpor: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.