mirror of
https://github.com/jackyzha0/quartz.git
synced 2026-03-22 05:55:42 -05:00
232 lines
6.8 KiB
Markdown
232 lines
6.8 KiB
Markdown
---
|
||
title: Introduction to Vim
|
||
date: 2022-02-06
|
||
---
|
||
# Introduction to Vim
|
||
|
||
Vim is one of the most powerful text editors you can think of. In this article, I will introduce you some basic and useful Vim commands.
|
||
|
||
## Vim modes
|
||
There are two main modes in Vim. Normal Mode and Insert Mode.
|
||
In Insert Mode you can type on the document as in any other text editor. In Normal Mode you can execute commands to navigate though the file or modify it.
|
||
|
||
## Entering Normal Mode
|
||
Press the escape key to enter Normal Mode. (Most Vim users usually remap escape to caps lock. On a Mac you can do it using [Karabiner](https://github.com/pqrs-org/Karabiner-Elements).)
|
||
|
||
## Entering Insert Mode
|
||
To enter insert mode you just have to type `i` or `a` while on Normal Mode. If you entered Insert Mode with the `i` key, you will be able to insert text on the left side of your cursor. In contrast, with `a`, you will insert text on the right side of the cursor. `C` (Shift-c) deletes all the text from the cursor position to the end of the line and puts you in Insert Mode.
|
||
|
||
There is also `o` that allows you to insert text on the next line.
|
||
|
||
### Uppercased versions
|
||
|
||
`I` (Shift-i) will put you on insert mode on the beginning of the line.
|
||
`A` (Shift-a) will put you on insert mode on the end of the line. `O` (Shift-o) will put on insert mode on the previous line.
|
||
|
||
## Visual Mode
|
||
Visual Mode is used for selecting text.
|
||
|
||
- `v` Enter visual mode.
|
||
- `V` Enter visual line mode.
|
||
- `ctrl-v` Enter visual block mode.
|
||
|
||
## Exiting Vim
|
||
The most known way of exiting Vim is using `:wq` (write and quit) or `:q!` (quit without saving).
|
||
|
||
But, there is a more efficient ways of exiting Vim. You type `ZZ` (shift-zz) to exit Vim saving or `ZQ` (shift-zq) to exit it without saving.
|
||
|
||
- - - -
|
||
|
||
## Cursor Movement
|
||
### Basic Movement (HJKL)
|
||
- `H` Move to the left.
|
||
- `J` Move down.
|
||
- `K` Move up.
|
||
- `L` Move to the right.
|
||
|
||
### Movement word per word
|
||
- `w` Move to the next word.
|
||
- `W` Move to the next word (separated by whitespace).
|
||
|
||
|
||
- `b` Move a word backwards.
|
||
- `B` Move a word backwards (separated by whitespace).
|
||
|
||
|
||
- `e` Move to the end of the next word.
|
||
- `E` Move to the end of the next word (separated by whitespace).
|
||
|
||
You can use all of these commands with a count. e.g. `5w` to move the cursor 5 words forward.
|
||
|
||
### Moving the cursor
|
||
- `H` Put the cursor on the top.
|
||
- `M` Put the cursor on the middle.
|
||
- `L` Put the cursor on the bottom.
|
||
|
||
> Mnemonic: High, Middle, Low.
|
||
|
||
### Movement by paragraph
|
||
- `{` Move the cursor a paragraph up.
|
||
- `}` Move the cursor a paragraph down.
|
||
|
||
## Movement through the line
|
||
### Including whitespace
|
||
`0` Go to the beginning of the line.
|
||
`$` Go to the end of the line.
|
||
|
||
### Not including whitespace
|
||
`^` Go to the beginning of the line.
|
||
`g_` Go to the end of the line.
|
||
|
||
## G and gg
|
||
Use `G` Go to the bottom of the file.
|
||
Use`gg` Go to the top of the file.
|
||
|
||
## f and t
|
||
- `f` followed by a word `a` moves the cursor the the next occurrence of the word `a` on a line.
|
||
- `t` followed by a word `a` moves your cursor a word before the the next occurrence of the word `a` word on a line.
|
||
|
||
### Example
|
||
```
|
||
The quick brown fox jumps over the lazy dog.
|
||
^
|
||
```
|
||
|
||
Using `fb`
|
||
```
|
||
The quick brown fox jumps over the lazy dog.
|
||
^
|
||
```
|
||
|
||
Using `tb`
|
||
```
|
||
The quick brown fox jumps over the lazy dog.
|
||
^
|
||
```
|
||
|
||
## Moving the screen
|
||
- `zt` Put the current line on the top of the screen.
|
||
- `zz` Put the current line on the middle of the screen.
|
||
- `zb` Put the current line on the bottom of the screen.
|
||
|
||
- - - -
|
||
|
||
## Deleting text
|
||
To delete text, you can use the `d` followed by what you want to delete.
|
||
(You can use all of the following commands with `c` instead of `d` to delete and CHANGE what you just deleted. In other words, it deletes and puts you on Insert Mode.)
|
||
|
||
### Counts
|
||
In Vim you can specify the number of times to execute a command. For example, you can delete a line with `dd` and `5dd` for deleting 5 lines at once. It also works for other commands like `5dap`, `5daw`, etc.
|
||
|
||
### Some delete commands
|
||
- `diw` Delete a word.
|
||
- `daw` Delete a word w/ surrounding whitespace.
|
||
|
||
|
||
- `di(` Delete inside a ().
|
||
- `da(` Delete a () w/ surrounding whitespace.
|
||
|
||
|
||
- `di[` Delete inside a [].
|
||
- `da[` Delete a [] w/ surrounding whitespace.
|
||
|
||
|
||
- `di{` Delete inside a {}.
|
||
- `da{` Delete a {} w/ surrounding whitespace.
|
||
|
||
|
||
- `dip` Delete inside a paragraph.
|
||
- `dap` Delete a paragraph w/ surrounding whitespace.
|
||
|
||
|
||
- `dit` Delete inside an HTML tag.
|
||
- `dat` Delete an HTML tag w/ surrounding whitespace.
|
||
|
||
|
||
- `dw` Delete word, only works if the cursor is positioned on the beginning of the word.
|
||
- `D` Delete from the cursor to the end of the line.
|
||
- `dd` Delete the current line.
|
||
- `5dd` Delete the next 5 lines.
|
||
|
||
|
||
- `dG` Delete from the current line until the end of the document.
|
||
- `dgg` Delete form the current line until the beginning of the document.
|
||
|
||
## Copying and Pasting
|
||
- `y` (for YANK) copy. (e.g. to copy a word type `yw`)
|
||
- `yy` Copy a whole line.
|
||
- `p` Paste.
|
||
|
||
## Searching
|
||
- `/` Search. (Navigate with ‘n/N’)
|
||
- `?` Search backwards. (Navigate with ‘n/N’)
|
||
|
||
|
||
- `//` Search for the last pattern searched.
|
||
- `??` Search for the last pattern searched backwards.
|
||
|
||
|
||
- `*` Search the current word.
|
||
- `#` Search the current word backwards.
|
||
|
||
|
||
- `:set ic` Search case insensitively.
|
||
|
||
## Replacing Text
|
||
```
|
||
:%s/old/new/g
|
||
:%s/old/new/gi (case insensitive)
|
||
:%s/old/new/gc (prompts before each replacement)
|
||
```
|
||
|
||
## Undo and Redo
|
||
- `u` Undo the last change.
|
||
- `U` Undo the last changes on the current line.
|
||
- `ctrl-r` Redo the last change.
|
||
|
||
## Tabs
|
||
- `:tabnew` Open a new tab.
|
||
- `:tabnext` Go to the next tab. (Also `:tabn`)
|
||
- `:tabprevious` Go to the previous tab. (Also `:tabp`)
|
||
- `:tabfirst` Go to the first tab.
|
||
- `:tablast` Go to the last tab.
|
||
- `:tabmove (num)` Move the current tab to the specified `num`.
|
||
|
||
## Editing
|
||
`edit` or `e` open a file in Vim. (On a new tab for example.)
|
||
|
||
## Macros
|
||
Start / Stop recording a macro with `q` on one of Vim’s 26 registers (a-z).
|
||
Use `@` with the register key to play the recorded macro.
|
||
You can play it `n` times with `n@q` with `q` being the register.
|
||
|
||
## Marks
|
||
Record your current position in a register.
|
||
|
||
- `mb` Set a mark on register `b`. (Using an uppercased mark like `mB` makes it accessible on all the files being edited.)
|
||
- `’b` Go the the mark set on `b`.
|
||
- `:marks` List all the current marks.
|
||
- `:delmarks b` Delete a mark.
|
||
- `:delmarks a-c` Delete a range of marks.
|
||
- `:demarks!` Delete all the marks.
|
||
|
||
## . command
|
||
Rerun the last executed command on Normal Mode.
|
||
|
||
## g
|
||
- `g` + hjkl, 0, $, etc navigates an one line paragraph.
|
||
- `gq` Reformat an one line paragraph.
|
||
- `ga` Give you the ASCII value of the current character.
|
||
- `gf` Open the file under the cursor.
|
||
- `gi` Continue inserting text to where you were before.
|
||
|
||
## Indentation
|
||
Indent the current line using `<` and `>`.
|
||
|
||
## Running a Shell command
|
||
Use `:!` to run a Shell command.
|
||
e.g. `:! ls` to run `ls`.
|
||
|
||
## %
|
||
`%` Jump to the matching parenthesis, brackets, etc.
|