diff --git a/CHEATSHEET.md b/CHEATSHEET.md index 712910e..d433135 100644 --- a/CHEATSHEET.md +++ b/CHEATSHEET.md @@ -1,7 +1,5 @@ # Neovim command and keybind cheat sheet -Some of these are plain Vim commands, others are specific to Neovim. - ## BASICS - `Space` leader key @@ -19,8 +17,7 @@ Some of these are plain Vim commands, others are specific to Neovim. ## Tabs -- `Ctrl`+`t` open a file in e.g. a Telescope finder in a new tab -- `gt` or `gT` switch between open tabs (forward/reverse direction) +- `gt` or `gT` switch forward/reverse between tabs ## Windows/splits @@ -39,39 +36,34 @@ Some of these are plain Vim commands, others are specific to Neovim. - `:bn` go to next buffer - `:bp` go to previous buffer -## Code +## Text - `w` move to **start of next word** (ignores punctuation due to remap) - `e` move to **end of next word** (ignores punctuation due to remap) - `b` move to **start of previous word** (ignores punctuation due to remap) - `Ctrl`+`0` start of line - `Ctrl`+`$` end of line -- `Ctrl`+`d` scroll **down** 1/2 page while keeping the cursor centered -- `Ctrl`+`u` scroll **up** 1/2 page while keeping the cursor centered +- `Ctrl`+`d` scroll down 1/2 page while keeping the cursor centered +- `Ctrl`+`u` scroll up 1/2 page while keeping the cursor centered - `Ctrl`+`o` jump to location you were before (e.g. after using `gg`) - `Ctrl`+`i` jump back to location you were before (after using `Ctrl`+`o`) - `f` jump forward to `` - `F` jump backwards to `` -- `t` jump forward just before `` -- `T` jump backwards just before `` -- `;` jump to next occurence of (same line only) -- `,` jump to previous occurence of (same line only) +- `;` jump to next occurence of on same line +- `,` jump to previous occurence of onx same line -## LSP +## LSP, Code & Diagnostics - `Ctrl`+`n/p` scroll down/up through LSP suggestions - `Ctrl`+`l` accept selected suggestion - `gd` go to definition - -## Diagnostics - -- `gd` go to definition -- `leader`+`qq` toggle trouble.nvim quickfix list +- `gr` show references of function +- `leader`+`qq` toggle `trouble.nvim` quickfix list - `leader`+`da` go to next diagnostic (any severity) - `leader`+`dw` go to next diagnostic (warning severity) - `leader`+`de` go to next diagnostic (error severity) -## Telescope windows +## Telescope - `↓` or `Ctrl`+`n` scroll down (**n**ext) file list - `↑` or `Ctrl`+`p` scroll up (**p**revious) file list @@ -84,26 +76,35 @@ Some of these are plain Vim commands, others are specific to Neovim. - `Ctrl`+`q` send all items to quickfix list - `Alt`+`q` send selected items to quickfix list +## Oil + +- `Ctrl`+`d` bottom of file list +- `Ctrl`+`u` top of file list +- `Ctrl`+`p` preview file +- `Ctrl`+`v` open file in **vertical** split +- `Ctrl`+`x` open file in **horizontal** split +- `Ctrl`+`t` open file in new tab + ## EDITING ### Code editing -- `leader`+`i` re-indent whole file -- `leader`+`o` re-format whole file or visual with `conform.nvim` +- `leader`+`o` re-format whole file or visual w/ `conform.nvim` - `i` insert mode at cursor position -- `I` insert mode at the **beginning of the line** -- `a` insert mode **one character after the current** one -- `A` insert mode at the **end of the line** +- `I` insert mode at **beginning of line** +- `a` insert mode **after the current char** +- `A` insert mode at **end of line** - `o` insert mode a line **below** the cursor - `O` insert mode a line **above** the cursor - `s` delete character and replace (substitute) it - `cw` replace the current word - `cc` replace whole line - `C` replace to the end of the line -- `yy` copy (yank) the current line +- `yy` copy the current line - `p` paste yanked line below - `P` paste yanked line above -- `"3p` redo (put) e.g. your third last delete [source](https://www.reddit.com/r/neovim/comments/18ri1bm/its_been_like_10_years_and_i_just_learned_that/) + +## SELECTING ### Visual mode @@ -111,6 +112,11 @@ Some of these are plain Vim commands, others are specific to Neovim. - `V` line mode - `Ctrl`+`v` block mode +### Code selection + +- `leader`+`Space` context-sensitive text selection w/ `treesitter` +- `Backspace` reduce context-sensitive selection + ## SEARCH/OPEN - `leader`+`fg` search text in files (also searches for text under cursor) diff --git a/CHEATSHEET.pdf b/CHEATSHEET.pdf new file mode 100644 index 0000000..50ca921 Binary files /dev/null and b/CHEATSHEET.pdf differ diff --git a/logo.png b/logo.png new file mode 100644 index 0000000..5316d19 Binary files /dev/null and b/logo.png differ diff --git a/mkcheatsheet.sh b/mkcheatsheet.sh new file mode 100755 index 0000000..0713ca8 --- /dev/null +++ b/mkcheatsheet.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# Renders MARKDOWN.md to PDF with Pandoc +# Packages required: +# - pandoc +# - basictex (brew install --cask basictex) +pandoc --standalone --from=markdown+yaml_metadata_block --template=tmpl.tex \ +--metadata-file=vars.yml --pdf-engine=xelatex -o CHEATSHEET.pdf CHEATSHEET.md diff --git a/tmpl.tex b/tmpl.tex new file mode 100644 index 0000000..204164b --- /dev/null +++ b/tmpl.tex @@ -0,0 +1,263 @@ +\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor} +$endif$ +% +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provides euro and other symbols +\else % if luatex or xelatex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} +$endfor$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} +$endif$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifxetex + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifluatex + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifluatex + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +$if(colorlinks)$ +\usepackage{xcolor} +$endif$ +\usepackage{hyperref} +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + pdfborder={0 0 0}, +$endif$ + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +% Fix footnotes in tables (requires footnote package) +\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{longtable}}{} +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(subparagraph)$ +$else$ +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ + + + +\pagestyle{$pagestyle$} + +% set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(lang)$ +\usepackage[$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +% get rid of language-specific shorthands (see pandoc #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{}$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + $if(latex-dir-rtl)$ + \usepackage[RTLdocument]{bidi} + $else$ + \usepackage{bidi} + $endif$ +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ + +$if(title)$ +\title{$title$} +$endif$ +$if(subtitle)$ +\providecommand{\subtitle}[1]{} +\subtitle{$subtitle$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +\date{$date$} + +\usepackage{multicol} + +\let\oldtexttt\texttt +\renewcommand{\texttt}[1]{{\color{blue}{\oldtexttt{#1}}}} + + +\usepackage{tikz} + +\AddToHookNext{shipout/background}{ + \begin{tikzpicture}[remember picture,overlay] + \node at (current page.south east) { + %\hspace*{-6cm}\includegraphics[width=4cm]{logo.png} + \includegraphics[width=6cm,trim=0 -10cm -26cm 0]{logo.png} + }; + \end{tikzpicture} +} + +\begin{document} + +%\includegraphics[width=2.5cm]{logo.png} + +$if(ragged)$ +\raggedright +$endif$ + +\footnotesize + +$if(columns)$ +\begin{multicols}{$columns$} +$else$ +\begin{multicols}{3} +$endif$ +$body$ +\end{multicols} + +\end{document} diff --git a/vars.yml b/vars.yml new file mode 100644 index 0000000..41e27b6 --- /dev/null +++ b/vars.yml @@ -0,0 +1,26 @@ +--- +# metadata +title: Neovim cheat sheet +author: Oliver Ladner +lang: en +keywords: + - neovim + - cheat sheet + +linkcolor: blue + +documentclass: scrartcl +pagestyle: empty +papersize: a4paper +geometry: + - a4paper + - left=0.5cm + - right=0.5cm + - top=0.7cm + - bottom=0.5cm + - landscape + +columns: 4 +fontsize: 12pt +ragged: yes +graphics: yes