# Why vi Rocks A collection of commands, command sequences in [vi(1)](https://man.openbsd.org/vi.1)/[ex(1)](https://man.openbsd.org/ex.1) or with 3rd party unitilities.
These all work with at least [nvi](https://en.wikipedia.org/wiki/Nvi) 1.79 and 2.1.3 (unicode). Helpful documents:
- [Roman Zolotarev: Edit text with vi(1)](https://rgz.ee/vi.html)
- [Jeff W: vi help](http://www.jeffw.com/vi/vi_help.txt)
- [Maarten Litmaath: vi reference](http://www.ungerhu.com/jxh/vi.html)
- [alphanrrrd: extremely concise cheatsheet](http://www.alphanrrrd.org/vi.html)
- [ViEmu: Graphical vi cheatsheet](http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html) #### Yank / delete an arbitrary number of lines 1) mark the first line: mk 2) move to last line 3a) yank: y'k 3b) delete: d'k 4) move to new line 5) paste with P or p #### Apply regex to an arbitrary number of lines 1) mark the first line: mk 2) mark the last line: ml :'k,'ls/regex/power/g #### Add # to block of text :'k,'ls/.*/#&/ #### Remove trailing whitespace of block of text :'k,'ls/\ *$// #### Write file as root :w !doas tee % #### Diff the file on disk with the file in the buffer :w !diff -u % - #### Make a backup of the file on disk :!cp % %.bak #### Sort all lines :%!sort #### Sort paragraph !}sort #### Uniq all lines :%!uniq #### Uniq paragraph !}uniq #### Join all lines :%j #### Select a column (3rd) from formated text seperated by ':' :%!awk -F':' '{print $3}'