\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Eric Grivilers (ericg)} \pdfinfo{ /Title (vi-editor.pdf) /Creator (Cheatography) /Author (Eric Grivilers (ericg)) /Subject (VI Editor Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{617533} \definecolor{LightBackground}{HTML}{F5F6F2} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{VI Editor Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Eric Grivilers (ericg)} via \textcolor{DarkBackground}{\uline{cheatography.com/639/cs/270/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Eric Grivilers (ericg) \\ \uline{cheatography.com/ericg} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 24th February, 2012.\\ Updated 25th February, 2020.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Quitting}} \tn % Row 0 \SetRowColor{LightBackground} :x & Exit, saving changes \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} :q & Exit as long as there have been no changes \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} ZZ & Exit and save changes if any have been made \tn % Row Count 5 (+ 2) % Row 3 \SetRowColor{white} :q! & Exit and ignore any changes \tn % Row Count 6 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Inserting Text}} \tn % Row 0 \SetRowColor{LightBackground} i & Insert before cursor \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} I & Insert before line \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} a & Append after cursor \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} A & Append after line \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} o & Open a new line after current line \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} O & Open a new line before current line \tn % Row Count 6 (+ 1) % Row 6 \SetRowColor{LightBackground} r & Replace one character \tn % Row Count 7 (+ 1) % Row 7 \SetRowColor{white} R & Replace many characters \tn % Row Count 8 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{0.9954 cm} x{3.9816 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Motion}} \tn % Row 0 \SetRowColor{LightBackground} h & Move left \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} j & Move down \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} k & Move up \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} l & Move right \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} w & Move to next word \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} W & Move to next blank delimited word \tn % Row Count 7 (+ 2) % Row 6 \SetRowColor{LightBackground} b & Move to the beginning of the word \tn % Row Count 9 (+ 2) % Row 7 \SetRowColor{white} B & Move to the beginning of blank delimted word \tn % Row Count 11 (+ 2) % Row 8 \SetRowColor{LightBackground} e & Move to the end of the word \tn % Row Count 12 (+ 1) % Row 9 \SetRowColor{white} E & Move to the end of Blank delimited word \tn % Row Count 14 (+ 2) % Row 10 \SetRowColor{LightBackground} ( & Move a sentence back \tn % Row Count 15 (+ 1) % Row 11 \SetRowColor{white} ) & Move a sentence forward \tn % Row Count 16 (+ 1) % Row 12 \SetRowColor{LightBackground} \{ & Move a paragraph back \tn % Row Count 17 (+ 1) % Row 13 \SetRowColor{white} \} & Move a paragraph forward \tn % Row Count 18 (+ 1) % Row 14 \SetRowColor{LightBackground} 0 & Move to the begining of the line \tn % Row Count 19 (+ 1) % Row 15 \SetRowColor{white} \$ & Move to the end of the line \tn % Row Count 20 (+ 1) % Row 16 \SetRowColor{LightBackground} 1G & Move to the first line of the file \tn % Row Count 22 (+ 2) % Row 17 \SetRowColor{white} G & Move to the last line of the file \tn % Row Count 24 (+ 2) % Row 18 \SetRowColor{LightBackground} {\emph{n}}G & Move to {\emph{n}}th line of the file \tn % Row Count 25 (+ 1) % Row 19 \SetRowColor{white} :{\emph{n}} & Move to {\emph{n}}th line of the file \tn % Row Count 26 (+ 1) % Row 20 \SetRowColor{LightBackground} f{\emph{c}} & Move forward to {\emph{c}} \tn % Row Count 27 (+ 1) % Row 21 \SetRowColor{white} F{\emph{c}} & Move back to {\emph{c}} \tn % Row Count 28 (+ 1) % Row 22 \SetRowColor{LightBackground} H & Move to top of screen \tn % Row Count 29 (+ 1) % Row 23 \SetRowColor{white} M & Move to middle of screen \tn % Row Count 30 (+ 1) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{x{0.9954 cm} x{3.9816 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Motion (cont)}} \tn % Row 24 \SetRowColor{LightBackground} L & Move to botton of screen \tn % Row Count 1 (+ 1) % Row 25 \SetRowColor{white} \% & Move to associated ( ), \{ \}, {[} {]} \tn % Row Count 2 (+ 1) % Row 26 \SetRowColor{LightBackground} :0 & Move to the beginning of the file \tn % Row Count 4 (+ 2) % Row 27 \SetRowColor{white} :\$ & Move to the end of the file \tn % Row Count 5 (+ 1) % Row 28 \SetRowColor{LightBackground} {[}ctrl{]} + d & go down half a screen \tn % Row Count 7 (+ 2) % Row 29 \SetRowColor{white} {[}ctrl{]} + u & go up half a screen \tn % Row Count 9 (+ 2) % Row 30 \SetRowColor{LightBackground} {[}ctrl{]} + f & go forward a screen \tn % Row Count 11 (+ 2) % Row 31 \SetRowColor{white} {[}ctrl{]} + b & go back a screen \tn % Row Count 13 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Modes}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Vi has two modes insertion mode and command mode. The editor begins in command mode, where the cursor movement and text deletion and pasting occur. Insertion mode begins upon entering an insertion or change command. {[}ESC{]} returns the editor to command mode (where you can quit, for example by typing :q!). Most commands execute as soon as you type them except for "colon" commands which execute when you press the ruturn key.} \tn % Row Count 9 (+ 9) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Deleting Text}} \tn % Row 0 \SetRowColor{LightBackground} x & Delete character to the right of cursor \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} X & Delete character to the left of cursor \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} D & Delete to the end of the line \tn % Row Count 5 (+ 1) % Row 3 \SetRowColor{white} dd & Delete current line \tn % Row Count 6 (+ 1) % Row 4 \SetRowColor{LightBackground} :d & Delete current line \tn % Row Count 7 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Yanking Text}} \tn % Row 0 \SetRowColor{LightBackground} yy & Yank the current line \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} :y & Yank the current line \tn % Row Count 2 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Changing text}} \tn % Row 0 \SetRowColor{LightBackground} C & Change to the end of the line \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} cc & Change the whole line \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} guu & lowercase line \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} gUU & uppercase line \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} \textasciitilde{} & Toggle upp and lower case \tn % Row Count 5 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Putting text}} \tn % Row 0 \SetRowColor{LightBackground} p & Put after the position or after the line \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} P & Put before the poition or before the line \tn % Row Count 4 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Markers}} \tn % Row 0 \SetRowColor{LightBackground} m{\emph{c}} & Set marker {\emph{c}} on this line \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} `{\emph{c}} & Go to beginning of marker {\emph{c}} line. \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} '{\emph{c}} & Go to first non-blank character of marker {\emph{c}} line. \tn % Row Count 4 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.79632 cm} x{4.18068 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Search for strings}} \tn % Row 0 \SetRowColor{LightBackground} \seqsplit{/string} & Search forward for string \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \seqsplit{?string} & Search back for string \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} n & Search for next instance of string \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} N & Search for previous instance of string \tn % Row Count 8 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.84149 cm} x{3.13551 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Replace}} \tn % Row 0 \SetRowColor{LightBackground} \seqsplit{:s/pattern/string/flags} & Replace pattern with string according to flags. \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} g & Flag - Replace all occurences of pattern \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} c & Flag - Confirm replaces. \tn % Row Count 5 (+ 1) % Row 3 \SetRowColor{white} \& & Repeat last :s command \tn % Row Count 6 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.09494 cm} x{3.88206 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Ranges}} \tn % Row 0 \SetRowColor{LightBackground} :{\emph{n}},{\emph{m}} & Range - Lines {\emph{n}}-{\emph{m}} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} :. & Range - Current line \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} :\$ & Range - Last line \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} :'{\emph{c}} & Range - Marker {\emph{c}} \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} :\% & Range - All lines in file \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} \seqsplit{:g/pattern/} & Range - All lines that contain pattern \tn % Row Count 7 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.09494 cm} x{3.88206 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Files}} \tn % Row 0 \SetRowColor{LightBackground} :w {\emph{file}} & Write to {\emph{file}} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} :r {\emph{file}} & Read {\emph{file}} in after line \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} :n & Go to next file \tn % Row Count 5 (+ 1) % Row 3 \SetRowColor{white} :p & Go to previous file \tn % Row Count 6 (+ 1) % Row 4 \SetRowColor{LightBackground} :e {\emph{file}} & Edit {\emph{file}} \tn % Row Count 8 (+ 2) % Row 5 \SetRowColor{white} !!{\emph{program}} & Replace line with output from {\emph{program}} \tn % Row Count 10 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Other}} \tn % Row 0 \SetRowColor{LightBackground} J & Join lines \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} . & Repeat last text-changing command \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} u & Undo last change \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} U & Undo all changes to line \tn % Row Count 4 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}