Files
vim-tricks/vim_tricks.md
2025-09-15 21:53:36 +02:00

178 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Vim
I just noted down some vim commands/ motions /concepts etc. that were previously unknown to me.
I will probably make this more readable and consistent sometime. It's not complete as i am not finished learning vim.
Basics like navigating with hjkl were omitted. If you're reading this to learn, start with the `:vimtutor`.
#### Basic Commands
- u undo
- ctrl + r redo
#### Makros
- q to start recording
- w assign w to recording
- ... input key sequence
- q to end recording
- 85@w play recoding/makro 85 times
#### Searching and Replacing
- /test jump to test in current line
- :\[range\]s/{pattern}/{string}/\[flags\] \[count\]
- ????????????:%s/test/penis/g
- replace test with penis in whole file
- /g is for "global" - whole line
- % is the range -> entire file
- % == filename
- If you changed the default case setting and you want to perform case sensitive search, use the `I` flag:
- :%s/test/penis/gi
- You can match regex here too, just keep in mind to escape things like + -> \\+
- more here: <https://linuxize.com/post/vim-find-replace/>
##### view search results
- It is n for next and N for previous.
##### jump to the next/previous instance of the current word
- Put the cursor on a word and hit the \* key and you will jump to the next instance of that word.
The # key does the same, but it jumps to the previous instance of the word.
#### Deleting until
- dtc delete upto but **not** including *c*
- dfc delete upto **and** including *c*
- d$ delete until end of line
- dG delete until end of file
- dgg delete until start of file
- di( delete in ()
- printf("test"); - "test" would be deleted
- da( delete around (
- printf("test"); - ("test") would be deleted
#### Comment/ Uncomment multiple lines
Put your cursor on the first `#` character, press Ctrl V (or Ctrl Q for gVim), and go down until the last commented line and press x, that will delete all the `#` characters vertically.
For commenting a block of text is almost the same:
1. First, go to the first line you want to comment, press Ctrl V. This will put the editor in the `VISUAL BLOCK` mode.
2. Then using the arrow key and select until the last line
3. Now press Shift I, which will put the editor in `INSERT` mode and then press #. This will add a hash to the first line.
4. Then press Esc (give it a second), and it will insert a `#` character on all other selected lines.
#### .vimrc customization
add these two lines to be able to customize your vimrc while still retaining the defaults
- unlet! skip_defaults_vim
- source $VIMRUNTIME/defaults.vim
- Comment lines out with "
#### Setting line numbers
- :set number and :set nonumber respectively for normal line numbers
- toggling is possible with :set number!
- :set relativenumber (:set rnu) and :set norelativenumber (:set nornu) respectively for relative line numbers
- toggling is possible with :set relativenumber! (:set rnu!)
- When both are active at the same time (:set number relativenumber (:set number rnu)) Hybrid line numbering is active
- Hybrid line numbering is the same as the relative line numbering with the only difference being that the current line instead of showing `0` shows its absolute line number.
- You can add those in your .vimrc to set those as default and not have to change that every time you open vim
#### A Command for Saving, Compiling and Running the Current C Code
Add this to your .vimrc:
- command M w | !gcc % -o %<.o && ./%<.o
to run it just type :M in vim
or make a Custom key Combination with the leader key (, + m):
- noremap <Leader>m :w | !gcc % -o %<.o && ./%<.o<CR>
#### A key Combination for viewing the currently open file in Okular
- this is useful for writing markdown files and viewing them with the images, just press , + o
- noremap <Leader>o :w | :silent !okular % &<CR>
#### Leader Key
Is by default / but can be changed with:
- let mapleader=","
here i have set it to ,
Vim waits for 1000 milliseconds after the `<Leader>`
key has been pressed, so if you take too long to press the next key in
the sequence it won't be matched. This timeout can be changed by using `:set timeoutlen` to set specific value.
#### Change Tab width
in your .vimrc
- `set tabstop=4`
will set the tab width equal to 4 spaces
#### indent/ unindent lines
**Normal mode**
- \>> indent the current line
- 3>> indent the current line and two lines below (same as 2>j)
- \>k indent the current line and the line above (same as 1>k or >1k)
- << unindent the current line
- 5<< unindent the current line and four lines below (same as 4<j or <4j)
- 2<k unindent the current line and two lines above (same as <2k)
- = auto indent code, use motion commands to indicate the portion to be indented
- =4j auto indents the current line and four lines below
- =ip auto indents the current paragraph
You can use any motion command with > and <. For example, >} indents till the end of the paragraph.
**Visual mode**
- \> indent the visually selected lines once
- 3> indent the visually selected lines three times
- < unindent the visually selected lines once
- = auto indent code
#### be able to use bash aliases in vims ! mode
Bash doesnt load your .bashrc unless its interactive. To make the setting permanent, add `set shellcmdflag=-ic` to the end of your `.vimrc` file
#### resize vim correctly with the kitty terminal emulator
- `set term=kitty`
#### Vim motions
- Use `w` (**w**ord) command to jump to the beginning of the next **w**ord
- Use `b` (**b**ack) to jump to the beginning of a word backwards
- Use `e` (**e**nd) to jump to the end of a word
- Use `ge` to jump to the end of a word backwards
- `0`: Moves to the **first character of a line**
- `^`: Moves to the **first non-blank character of a line**
- `$`: Moves to the **end of a line**
- `g_`: Moves to the **non-blank character at the end of a line**
- `}` jumps entire paragraphs **downwards**
- `{` similarly but **upwards**
#### Vim tabs
open more than one file at startup using the `-p` option. If you want to open three files in separate tabs, youd use this syntax:
`vim -p file1 file2 file3`
- Or in Normal mode run `:tabnew filename`
- You can switch between tabs using `:tabn` and `:tabp`, or you can use `gt`
while youre in normal mode.
- If you have a lot of tabs open, you can use `:tabfirst`, or just `:tabfir`, to jump to the first tab, and `:tablast` to jump to the last tab thats open.
- Close all tabs: `:qa`
- To save work in all tabs and quit: `:wqa`