# Vim Note
:::success
Quick guide for `Vim` 🦾
:::
## Quit 🏃
* `:w` save file,but don't quit
* `:wq` write quit
* `:x` same as `:wq`
* `q!` quit without save
* `ZZ` save file and quit
## Cursor movement 🛫
* `H` move to top of screen
* `M` move to middle of screen
* `L` move to bottom of screen
* `w` jump forwards to the start of a word
* `e` jump forwards to the end of a word
* `0` go to start of line
* `$` go to end of line
* `b` go to previous word
* `gg` first line of file
* `GG` last line of file
* `{` jump to next paragraph
* `}` jump tp previous paragraph
* `zz` center cursor on screen
* `ctrl-d` move foward 1/2 screen
* `ctrl-u` move back 1/2 screen
## Insert mode 🔌
* `i` insert before the cursor
* `I` insert at the beginning of the line
* `a` insert (append) after the cursor
* `A` insert (append) at the end of the line
* `o` append (open) a new line below the current line
* `O` append (open) a new line above the current line
* `Ctrl-o`
In insert mode, `Ctrl-o` escapes user to do one normal-mode command, and then return to the insert mode. The same effect can be achieved by `<ESC>`ing to normal mode, doing the single command and then entering back to insert mode.
Eg : `Ctrl-o a` go to outside of the bracket
## Short cut 🔪
* `ctrl-p` auto compelete previous words (`ctrl-p` for previous , `ctrl-n` for next)
## Search & Replace 👀
* `/Word` search for 'Word'
* `n` move to next 'Word'
* `N` move to previous 'Word'
* `noh[lsearch]` remove highlighting of search matches
* replace all abcd to 1234 in current line
```
:s/abcd/1234/g
```
* relace all abce to 1234 in this file
```
:%s/abcd/1234/g
```
* replace all abcd to 1234 in [5,12] line
```
:5,12s/abcd/1234/g
```
## Visual mode 🗳
* `v` Visual
* `V` Visual Line
* `aw` mark a word
* `a(` mark a block with ()
* `a{` mark a block with {}
* `a[` mark a block with []
* `a<` mark a block with <>
* `i(` mark a inner block with ()
> same as `{}` , `[]` ,`<>`, etc..
## Cut & Paste 🔪
* `yy` yank (copy) a line
* `p` paste
## Editing ✍️
* `u` undo
* `ctrl-r` redo
* `r` replace a single character.
* `R` replace more than one character, until `ESC` is pressed.
* `J` join line below to the current one with one space in between
* `c` stand for change (delete and move to insert mode )
* `C` change to end
## Window 🖥
* `sp file_name` open a file in a new buffer and split window
* `:term` open terminal in split window
* `vert` edit all buffers as vertical windows
Eg: `vert sp a.cpp`
* `below` opem windows below
Eg: `below term`
* `ctrl-ww` switch windows
* `ctrl-wh` switch to left windows (vertical split)
* `ctrl-wl` switch to right windows (vertical split)
* `ctrl-wj` switch to windows below(horizontal split)
* `ctrl-wk` switch to windows above(horizontal split)
* `ctrl-wx` exchange current window with next one
* `resize 20` resize height of window ,change the height to 20 rows.
* `res 20` short cut of resize
* `res +5` ,`res -5` increase/decrease height
* `vert res 30` resize the width of window
:Eg `:term ctrl-wx res 35`,open terminal and switch window ,resize window of Vim in to height of 35 rows.
* `bd` buffer delete(close file)
* `ctrl \ n ` go to normal mode in terminal ( `i` for go back to terminal )
## Tab 🫙
* `tab sp file_name` open file in new tab
* `:tabs` list all tabs including their displayed windows
* `tabn` , `gt` go to next tab
* `tabp` , `gT` go to previous tab
* `ctrl-PgDn` , `Ctrl-PgUp` switch tabs
###### tags: `Vim` `Note`