srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorsrdusr <[email protected]>2022-11-30 23:39:09 +0200
committersrdusr <[email protected]>2022-11-30 23:39:09 +0200
commitee614d3e28ee9fef75adb9790fa527a74426aff4 (patch)
tree92b40e6c9e89b930b75f3617fc4b614f8b5e933c /tools
parentd4fb6d0446df0432e7a77371bca3308db674dc75 (diff)
downloadnotes-ee614d3e28ee9fef75adb9790fa527a74426aff4.tar.gz
notes-ee614d3e28ee9fef75adb9790fa527a74426aff4.zip
Add information about keys/commands #TODO: fix formatting of the text
Diffstat (limited to 'tools')
-rw-r--r--tools/vim.md380
1 files changed, 380 insertions, 0 deletions
diff --git a/tools/vim.md b/tools/vim.md
index bc4ff5a..6470add 100644
--- a/tools/vim.md
+++ b/tools/vim.md
@@ -11,3 +11,383 @@ or
:%w !pbcopy # copy the whole file
:r !pbpaste # paste from the clipboard
```
+# To open the current window in a new tab (maximize) with the cursor in the same place, enter
+ :tab sp or <Ctrl-w>T
+ # which splits the current window into a new tab.
+
+# To close the current window, press
+ <Ctrl-w>c
+ # That will close the newly opened tab.
+
+# To make a file executable
+ :! chmod +x %
+
+# Shortcut command to backup current file
+ :!cp % %.backup
+
+# Use hjkl... at vim's command history mode by using <C-f> or even go straight into it with <q:>
+ :<C-f>
+ # can exit by pressing <enter>
+
+# Split existing buffer into a horizontal/vertical window
+ :sb#
+ :vert sb#
+
+# Search and Replace, The :substitute command searches for a text pattern, and replaces it with a text string. There are many options, but these are what you probably want:
+ :s/foo/bar/g
+ # Find each occurrence of 'foo' (in the current line only), and replace it with 'bar'.
+ :%s/foo/bar/g
+ # Find each occurrence of 'foo' (in all lines), and replace it with 'bar'.
+ :%s/foo/bar/gc
+ # Change each 'foo' to 'bar', but ask for confirmation first.
+ :%s/\<foo\>/bar/gc
+ # Change only whole words exactly matching 'foo' to 'bar'; ask for confirmation.
+ :%s/foo/bar/gci
+ # Change each 'foo' (case insensitive due to the i flag) to 'bar'; ask for confirmation.
+ :%s/foo\c/bar/gc is the same because \c makes the search case insensitive.
+ # This may be wanted after using :set noignorecase to make searches case sensitive (the default).
+ :%s/foo/bar/gcI
+ # Change each 'foo' (case sensitive due to the I flag) to 'bar'; ask for confirmation.
+
+# Create a new file named filename in the same directory as the currently open file, and write it.
+ :e %:h/filename
+
+
+# VIM KEYBOARD SHORTCUTS
+
+### MOVEMENT
+```
+h - Move left
+j - Move down
+k - Move up
+l - Move right
+$ - Move to end of line
+0 - Move to beginning of line (including whitespace)
+^ - Move to first character on line
+gg - Move to first line of file
+G - Move to last line of file
+
+w - Move forward to next word, with cursor on first character (use W to jump by whitespace only)
+b - Move backward to next word, with cursor on first character (use B to jump by whitespace only)
+e - Move forward to next word, with cursor on last character (use E to jump by whitespace only)
+ge - Move backwards to next word, with cursor on last character (use gE to 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
+
+CTRL+u - Move up by half a page
+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
+
+fc - Move cursor to next occurrence of character c on the current line. Use Fc to move backwards
+tc - Move cursor till next character c on the current line. Use Tc to move backwards
+% - Move cursor to next brace, bracket or comment paired to the current cursor location
+
+* - Search forward for word under cursor
+# - 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
+```
+
+### NORMAL MODE -> INSERT MODE
+```
+i - Enter insert mode to the left of the cursor
+a - Enter insert mode to the right of the cursor
+I - Enter insert mode at first character of current line
+A - Enter insert mode at last character of current line
+
+o - Insert line below current line and enter insert mode
+O - Insert line above current line and enter insert mode
+
+cm - Delete (change) the character or word (w) in motion m, then enter 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
+```
+
+### 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
+s - Delete character under cursor, then switch to insert mode
+
+dm - Delete in direction of movement m. For m, you can also use w, b, or any other variation
+dd - Delete entire current line
+D - Delete until end of line
+```
+
+### YANK & PUT
+```
+y - Yank (copy) highlighted text
+yy - Yank current linepPut (paste) yanked text below current line
+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 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
+
+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.
+
+:set foldmethod=manual - default method v{select block}zf to fold
+:set foldmethod=marker - use marker fold method {{{
+:set foldemethod=marker/*,*/ - user custom marker fold method
+:set foldmethod=indent - automatically fold programms per its indentation
+```
+
+### 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 > %" - " "
+
+```
+