Vim
Vim is like the most powerful tool on the market for fast text editing. There are also some not mentioned below, I will add over time. I started using Vim because of George Hotz’s livestreams.
Shift + J to move the line up
Command + Shift + { / }to switch between tabs really quickly.
New thing: Use vim marks! https://vim.fandom.com/wiki/Using_marks
Resources
- Vim as your Editor by the Primeagen
- Vim Tutorial by Ben Awad
- http://danielmiessler.com/study/vim/
- https://www.cs.oberlin.edu/~kuperman/help/vim/markers.html
Cheatsheets
- https://www.fprintf.net/vimCheatSheet.html
- https://gist.github.com/nerdalert/5f80853b4e195204bc6d
- https://gist.github.com/tuxfight3r/0dca25825d9f2608714b
- https://vimsheet.com/
To learn:
- Insertion in multiple lines https://vim.fandom.com/wiki/Inserting_text_in_multiple_lines Use
ctrl + V
, and thenI
orA
to insert at the beginning or after - How to search for selected text in Vim?
Multiline number increment:
- Visual block mode (select all the ones), then
g
+ctrl + A
Search and replace
I learned to pipe through the command line, i.e.
See more about pipes in bash.
Mouse mode with vim??
set mouse=a
Combos (i is inner and a is outer)
vi{
ci{
di{
same with va{
Key ideas:
- when you capitalize, it is to go backwards
I need to master Regex, it is super useful.
Use of | (“or”) to delete all lines except those that contain “error” or “warn” or “fail” (:help pattern): :v/error|warn|fail/d
Visual Block Mode:
- There are multiple things
g + ctrl A for multline increase
Movement
Basics that I have mastered
h
- Move left
j
- Move down
k
- Move up
l
- Move right
w
- Move forward to next word, with cursor on first character
W
- Move forward to next word, by whitespace only
b
- Move backward to next word, with cursor on first character
B
- Move background to next word to by whitespace only
$
- Move to end of line
0
- Move to beginning of line (including whitespace)
^
- Move to first character on line#to-use
gg
- Move to first line of file
G
- Move to last line of file
e
- Move forward to next word, with cursor on last character (use
E
- Jump by whitespace only
ge
- Move backwards to next word, with cursor on last character
gE
- jump by whitespace only
(
- Move to beginning of previous sentence. Use )
to go to next sentence
{
- Move to beginning of previous paragraph. Use }
to go to next paragraph
+
- Move forward to the first character on the next line
-
- Move backwards to the first character on the previous line
TO MASTER THESE
CTRL+O
- Go back to last cursor position, after you have made a jump
CTRL+u
- Move up by half a page#to-use
CTRL+d
- Move down by half a page
CTRL+b
- Move up by a page
CTRL+f
- Move down by a page
H
- Move cursor to header (top) line of current visible window
M
- Move cursor to middle line of current visible window
L
- Move cursor to last line of current visible window
Horizontal Speed Search (AMAZING)
fc
- Move cursor on top of the next character c
on the current line. Use Fc
to move backwards
tc
- Move cursor right before the next character c
on the current line. Use Tc
to move backwards (Idk why this would be useful.. um YES)
;
- walk to the next character, basically reapply fc
,
- walk backgrounds, opposite of ;
Screen Movement
%
- Move cursor to next brace, bracket or comment paired to the current cursor location
z.
- Center the the screen on the cursor
zt
- Scroll the screen so the cursor is at the top
zb
- Scroll the screen so the cursor is at the bottom
Search#to-use
*
- Search forward for word under cursor(SUPER USEFUL)
#
- Search backwards for word under cursor
/word
- Search forward for word. Accepts regular expressions to search
?word
- Search backwards for word. Accepts regular expressions to search
n
- Repeat the last / or ? command
N
- Repeat the last / or ? command in the opposite direction
If you word to search for a visually selected word, you can yank it using y
.
Then
/
Ctrl + r
"
Which will paste what you have yanked after the /
.
Normal Mode → Insert Mode
I mastered this already
i
- Enter insert mode to the left of the cursor
a
- Enter insert mode to the right of the cursor
o
- Insert line below current line and enter insert mode
O
- Insert line above current line and enter insert mode
TO USE MORE
I
- Enter insert mode at first character of current line
A
- Enter insert mode at last character of current line
cm
- Delete (change) the character or word (w) in motion m, then enter insert mode
ci[
- Change inner of the brackets and go into insert mode
cc
- Delete current line and enter insert mode (unlike dd
which leaves you in normal mode)
C
- Delete (change) from cursor to end of line, and enter insert mode
s
- Delete character under cursor, then switch to insert mode
Deletion
x
- Delete character forward (under cursor). use x do delete backwards (before cursor)
r
- Replace single character under cursor, and remain in normal mode
dm
- Delete in direction of movement m. For m, you can also use w, b, or any other variation (TO MASTER, YOU CAN COMBO)
dd
- Delete entire current line
D
- Delete until end of line
YANK & PUT
y
- Copy highlighted text
yy
- Copy current line#to-use
yw
- Yank a word from the cursor
ynw
- Yank n words from the cursor
y$
- Yank till the end of the line
p
- Put yanked text below current line
P
- Put yanked text above current line
J
- Join current line with the next line. Use gJ to exclude join-position space
xp
- Transpose two letters (delete and paste, technically)
VISUAL MODE
v
- Enter visual mode and highlight characters
V
- Enter visual mode and highlight lines
CTRL+v
- Enter visual block mode and highlight exactly where the cursor moves
o
- Switch cursor from first & last character of highlighted block while in visual mode
~
- Swap case under selection
<<
- Shift lines to left
>>
- Shift lines to right
Instead of va(
, you can do vab
va{
awesome combo, outer stuff
vi{
awesome combo, inner stuff
vai
vat - Highlight all text up to and including the parent element
vit - Highlight all text up to the parent element, excluding the element
vac - Highlight all text including the pair marked with c (like va<, va’ or va”)
vic - Highlight all text inside the pair marked with c
MARKING
ma - Set a marker a at cursor position to come back to later. a can be any character you choose
mb - Set a marker b at current position
`a - Move cursor to exact position of the marker you set with ma
'a - Move cursor to the first character of the line marked with ma
d'a - Delete from current line to line of mark a
d`a - Delete from current cursor position to position of mark a
c'a - Change text from current line to line of mark a
y`a - Yank text to unnamed buffer from cursor to position of mark a
:marks - List all the current marks
:marks ab - List marks a, b
'a,'bs/test/foo/g - Search and replace test with foo between markers a and b
VIM FOLDING
zf#j - creates a fold from the cursor down # lines.
zf/string - creates a fold from the cursor to string .
v{move}zf - creates a visual select fold
zf'a - creates a fold from cursor to mark a
zo - opens a fold at the cursor.
zO - opens all folds at the cursor.
za - Toggles a fold at the cursor.
zc - closes a fold at the cursor.
zM - closes all open folds.
zd - deletes the fold at the cursor.
zE - deletes all folds.
zj - moves the cursor to the next fold.
zk - moves the cursor to the previous fold.
zm - increases the foldlevel by one.
zr - decreases the foldlevel by one.
zR - decreases the foldlevel to zero -- all folds will be open.
[z - move to start of open fold.
]z - move to end of open fold.
MISCELLANEOUS
u - Undo
U - Undo all changes on current line
CTRL+R - Redo
. - Redo
g~ - switch case under cursor
g~$ - Toggle case of all characters to end of line.
g~~ - Toggle case of the current line (same as V~).
gUU - switch the current line to upper case
guu - switch the current line to lower case
CTRL+A - Increment the number at cursor
CTRL+X - Decrement the number at cursor
. - Repeat last change or delete
; - Repeat last f, t, F, or T command
, - Repeat last f, t, F, or T command in opposite direction
vim +10 <file_name> - opens the file at line 10
vim +/bash cronjob-lab.yml - opens the file cronjob-lab.yml on the first occurence of bash
vim scp://balasundaramm@mgmt-bst:22/~/automation/test-file.txt - Edit a remote file via scp
HISTORY/COMMAND BUFFER
q: - list history in command buffer
q/ - search history in command buffer
CTRL+c CTRL+c - close the command buffer
:set list - show hidden characters
gg=G - Format HTML. Make sure FileType is set to html with :setf html
CTRL+n - Press after typing part of a word. It scrolls down the list of all previously used words
CTRL+p - Press after typing part of a word. It scrolls up the list of all previously used words
BUFFERS
:ls (or :buffers) - list / show available buffers
:e filename - Edit a file in a new buffer
:bnext (or :bn) - go to next buffer
:bprev (of :bp) - go to previous buffer
:bdelete (or :bd) - unload a buffer (close a file)
:bwipeout (or :bw) - unload a buffer and deletes it
:b [N] - The number of the buffer you are interested to open
:ball - opens up all available buffers in horizontal split window
:vertical ball - opens up all available buffero in vertical split window
:q - close the buffer window
:help buffers - help for buffers
:r <file_path> - reads a file from the path to the buffer
:r !<command> - reads the output of the command into buffer
:.! cat <file_path> - reads the output of the command (eg: cat) into buffer or !! in ex-mode
TAB VIEWS
:tabe filename - opens the file in newtab
:tabe new - open an empty tab
:tabs - list opened tabs
:tabc - close the active tab
:tabn and tabp - Go to next tab or previous tab
:tabfirst - Go to the first available tab
:tablast - Go to the last available tab
:help tabpage - help for tabs
vim -p *.txt - open all txt files in tabs
TAB NAVIGATION
gt - go to next tab
gT - go to previous tab
{i}gt - go to tab in position i
TAB SHORTCUTS
CTRL+W T - Break out current window into a new tabview
CTRL+W o - Close every window in the current tabview but the current one
CTRL+W n - create a new window in the current tabview
CTRL+W c - Close current window in the current tabview
WINDOW MANAGEMENT
#split screen horizontal
:split filename
vim -o file1 file2
#split screen vertical
:vs filename
or
:vsplit filename
vim -O file1 file2
#close current window
:hide
#Horizontal resize in active window
:resize 20
#vertical resize
:vertical resize 20
#diff
:windo diffthis - diff between 2 vsplit windows
:diffs, diffsplit {filename} - diffs the current window with the file given
:diffoff - turns off diff selection
CTRL+w s - Split current window horizontally
CTRL+w v - Split current window vertically
CTRL+w c - Close current window
CTRL+w m - Move to window according to motion m
CTRL+w o - Maxmize current window (note: this overwrites your current window configuration)
# EX Mode
:Vex - Open Vertical Split in ex mode with file browser
:Sex - Open Vertical Split in ex mode with file browser
MOVING WINDOWS
CTRL+W r - Swap bottom/top if split horizontally
CTRL+W R - Swap top/bottom if split horizontally
CTRL+w r - Rotates the windows from left to right - only if the windows are split vertically
CTRL+w R - Rotates the windows from right to left - only if the windows are split vertically
CTRL+w H - Move current window the far left and use the full height of the screen
CTRL+w J - Move current window the far bottom and use the full width of the screen
CTRL+w K - Move current window the far top and full width of the screen
CTRL+w L - Move current window the far right and full height of the screen
NAVIGATE BETWEEN WINDOWS
CTRL+w CTRL+w - switch between windows
CTRL+w UP - Move to the top window from current window
CTRL+w DOWN - Move to the bottom window from current window
CTRL+w LEFT - Move to the left window from current window
CTRL+w RIGHT - Move to the right window from current window
RESIZING WINDOWS
#Sometimes windows open up funny or are rendered incorrectly after separating from an external monitor. Or maybe you want to make more room for an important file.
CTRL+w _ - Max out the height of the current split
CTRL+w | - Max out the width of the current split
CTRL+w = - Normalize all split sizes, which is very handy when resizing terminal
CTRL+w > - Incrementally increase the window to the right. Takes a parameter, e.g. CTRL-w 20 >
CTRL+w < - Incrementally increase the window to the left. Takes a parameter, e.g. CTRL-w 20 <
CTRL+w - - Incrementally decrease the window's height. Takes a parameter, e.g. CTRL-w 10 -
CTRL+w + - Incrementally increase the window's height. Takes a parameter, e.g. CTRL-w 10 +
COMMENT LINES (TCOMMENT PLUGIN)
CTRL+_ CTRL+_ - Comment a line using tcomment
CTRL+V - #{Select the block before commenting a block,
CTRL+_ CTRL+_ - Comment a block of line using tcomment}
MODELINE MAGIC
:set modeline - Enable modeline magic or add this option to your .vimrc
\ml - write the modeline based on your settings to the file
NERDTree Plugin
CTRL-n - Toggle
m - opens the menu
? - help
i - horizontal split
s - vertical split
CTRL-w + <-|-> - (left or right) to navigate
PERMISSION OVERRIDE
:w !sudo tee % - Allows to override the permission of the written file
:w !sudo sh -c "cat > %" - " "
VimBeGood Docker command