From: Nikolay Shaplov Date: Sat, 10 Jan 2026 08:13:04 +0000 (+0300) Subject: English version for introduction for vim X-Git-Url: http://gitweb.nataraj.world/?a=commitdiff_plain;h=09a748f8c65c605dc986129989fdf30fcefee12f;p=articles.git English version for introduction for vim --- diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/.editorconfig b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/.editorconfig new file mode 100644 index 0000000..35615fa --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/.editorconfig @@ -0,0 +1,15 @@ +# EditorConfig is awesome: https://editorconfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 +indent_style = space +indent_size = 2 + +[Makefile] +indent_style = tab diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/.gitignore b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/.gitignore new file mode 100644 index 0000000..6605412 --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/.gitignore @@ -0,0 +1,10 @@ +# LaTeX +*\~ +*.swp +*.log +*.aux +*.out +*.snm +*.nav +*.toc +*.vrb diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/Makefile b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/Makefile new file mode 100644 index 0000000..e36dbb5 --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/Makefile @@ -0,0 +1,5 @@ +all: + xelatex vim-for-postgres-developers.tex && make clean + +clean: + rm -f *.log *.aux *.out *.snm *.nav *.toc *.vrb diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/README.md b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/README.md new file mode 100644 index 0000000..394652d --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/README.md @@ -0,0 +1,8 @@ +# Шаблон презентаций для Beamer + +При подготовке шаблона использованы: +* [Шаблон презентации PostgresPro для Openoffice](link hidden) +* Шрифт [Gilroy](https://oc.postgrespro.ru/index.php/s/oXFIYT9dLwLCle6) +* Тема [gcr2019](https://github.com/schors/gcr2019theme) для Beamer + +Для сборки запустите команду: `xelatex example.tex` diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/elements/code.tex b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/elements/code.tex new file mode 100644 index 0000000..9c504c3 --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/elements/code.tex @@ -0,0 +1,45 @@ +\usepackage{listings} + +% for listings +\definecolor{acmebg}{HTML}{FFFFEF} +\definecolor{acmeh}{HTML}{EFFFFF} +\definecolor{acmec}{HTML}{8C8ACE} +\definecolor{acmel}{HTML}{52AAAD} +\definecolor{acmel1}{HTML}{EFEF9C} +\definecolor{acmel2}{HTML}{9CEFEF} +\lstset{ + columns=flexible, + keepspaces=true, + showstringspaces=false, + showtabs=false, + tabsize=4, + frame=single, + basicstyle=\fontsize{10pt}{12}\bf\ttfamily\color{black}, + backgroundcolor=\color{acmebg}, + commentstyle=\color{black}, + keywordstyle=\color{black}, + stringstyle=\color{red}, + rulecolor=\color{acmel}, + framerule=1pt +} + +% for listings background +\makeatletter +\let\old@lstKV@SwitchCases\lstKV@SwitchCases +\def\lstKV@SwitchCases#1#2#3{} +\makeatother +\usepackage{lstlinebgrd} +\makeatletter +\let\lstKV@SwitchCases\old@lstKV@SwitchCases + +\lst@Key{numbers}{none}{% + \def\lst@PlaceNumber{\lst@linebgrd}% + \lstKV@SwitchCases{#1}% + {none:\\% + left:\def\lst@PlaceNumber{\llap{\normalfont + \lst@numberstyle{\thelstnumber}\kern\lst@numbersep}\lst@linebgrd}\\% + right:\def\lst@PlaceNumber{\rlap{\normalfont + \kern\linewidth \kern\lst@numbersep + \lst@numberstyle{\thelstnumber}}\lst@linebgrd}% + }{\PackageError{Listings}{Numbers #1 unknown}\@ehc}} +\makeatother \ No newline at end of file diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/elements/diag.tex b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/elements/diag.tex new file mode 100644 index 0000000..1f49bdb --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/elements/diag.tex @@ -0,0 +1,49 @@ +% библиотеки +\usetikzlibrary{% + arrows, % стрелки + shapes.misc, % фигуры + shapes.geometric, % фигура ellipse + chains, % цепочки + positioning, % позиционирование элементов + scopes, % создание дополнительных веток + shadows % тени +} +% указание цветов +\definecolor{Gray}{RGB}{102,102,102} +\definecolor{LightGray}{RGB}{178,178,178} +\definecolor{Red}{RGB}{204,0,0} +\definecolor{Pink}{RGB}{255,102,102} + +% установки для элементов +\tikzset{ + every node/.style={on chain}, + every join/.style={->}, % со стрелками + Rectangle/.style={ + rectangle, % обычный прямоугольник + % размер блока + minimum size=6mm, + very thick, % двойная линия + draw=Gray, % указываем заданный ранее цвет + % цвета узлов + top color=white, + bottom color=LightGray, + % шрифт моноширинный + font=\ttfamily + }, + Rounded/.style={ + rounded rectangle, % прямоугольник со скруглёнными углами + drop shadow={opacity=0.35}, % тень от узлов + minimum size=6mm, % размер узла + very thick, % двойная линия + draw=black!50, % цвет обводки + top color=white,bottom color=black!20, % цвета градиента + font=\itshape}, % шрифт курсив +Ellipse/.style={ + ellipse, % прямоугольник со скруглёнными углами + drop shadow={opacity=0.35}, % тень от узлов + minimum size=6mm, % размер узла + very thick, % двойная линия + draw=black!50, % цвет обводки + top color=white,bottom color=black!20, % цвета градиента + font=\itshape}, % шрифт курсив +} \ No newline at end of file diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamercolorthemePgPro.sty b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamercolorthemePgPro.sty new file mode 100644 index 0000000..a0bb186 --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamercolorthemePgPro.sty @@ -0,0 +1,21 @@ +\mode + +% Settings +\AtBeginDocument{\setromanfont{Times New Roman}} +\AtBeginDocument{\setsansfont{Gilroy}} +\AtBeginDocument{\setmonofont{Consolas}} +\setbeamercolor*{title page header}{fg=white} +\setbeamerfont*{title}{size*={32pt}{1},family=\sffamily} +\setbeamercolor*{author}{fg=white} +\setbeamerfont*{author}{size*={18pt}{1},family=\sffamily} +\setbeamercolor*{frametitle}{fg=cyan} +\setbeamerfont*{frametitle}{size*={22pt}{1},family=\sffamily,series=\bfseries} +%\definecolor{text}{HTML}{595959} +\definecolor{text}{HTML}{000000} +\setbeamercolor{normal text}{fg=text} +\setbeamerfont{normal text}{size*={12pt}{18},family=\sffamily} +\AtBeginDocument{\usebeamerfont{normal text}} +\setbeamertemplate{itemize items}{\textbullet}% отключает кошмарные синие треугольники +\setbeamercolor{itemize/enumerate body}{fg=text} +\mode + diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamerinnerthemePgPro.sty b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamerinnerthemePgPro.sty new file mode 100644 index 0000000..1a36ba0 --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamerinnerthemePgPro.sty @@ -0,0 +1,30 @@ +\mode + +\setbeamertemplate{background}{ + \begin{tikzpicture} + \ifnum\thepage=1\relax% + \node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg.png}}; + \fi + \ifnum\thepage>1\relax% + \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_page_bg.png}}; + \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{text}\tiny\insertframenumber}; + \fi + \end{tikzpicture} +} + +% Title page +\defbeamertemplate*{title page}{gcr2019}[1][] +{ + \vskip3cm% + \begin{beamercolorbox}[leftskip=0.7cm,left,#1]{title page header} + \usebeamerfont{title}\inserttitle\par% + \end{beamercolorbox}% + \vskip0.75cm% + \begin{beamercolorbox}[leftskip=0.7cm,left,#1]{author} + \usebeamerfont{author}\insertauthor% + \end{beamercolorbox} + \vspace{9cm} +} + +\mode + diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamerouterthemePgPro.sty b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamerouterthemePgPro.sty new file mode 100644 index 0000000..a03dd07 --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamerouterthemePgPro.sty @@ -0,0 +1,13 @@ +\mode + +% Frame title +\defbeamertemplate*{frametitle}{gcr2019}[1][] +{ + \vskip1cm + \begin{beamercolorbox}[wd=\paperwidth,leftskip=0.7cm]{frametitle} + \usebeamerfont{frametitle}% + \insertframetitle + \end{beamercolorbox} +} + +\mode \ No newline at end of file diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamerthemePgPro.sty b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamerthemePgPro.sty new file mode 100644 index 0000000..3af4da9 --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/beamerthemePgPro.sty @@ -0,0 +1,19 @@ +% Based on gcr2019 theme (https://github.com/schors/gcr2019theme) +% Used backghround pictures from template https://confluence.postgrespro.ru/download/attachments/169509420/_PostgresPro_ШАБЛОН.odp?version=1&modificationDate=1675418955114&api=v2 +% and Gilroy font from https://oc.postgrespro.ru/index.php/s/oXFIYT9dLwLCle6 +\mode + +% Requirement +\RequirePackage{tikz} + +% Settings +\useinnertheme{PgPro} +\useoutertheme{PgPro} +\usecolortheme{PgPro} + +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{blocks}[rounded][shadow=true] +\setbeamertemplate{footline}{\vspace{1cm}} +\setbeamersize{text margin left=0.7cm,text margin right=0.7cm} + +\mode diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro.png b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro.png new file mode 100644 index 0000000..7c459a8 Binary files /dev/null and b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro.png differ diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_page_bg.png b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_page_bg.png new file mode 100644 index 0000000..af85d09 Binary files /dev/null and b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_page_bg.png differ diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_page_bg2.png b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_page_bg2.png new file mode 100644 index 0000000..f62056c Binary files /dev/null and b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_page_bg2.png differ diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_thanks_bg.png b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_thanks_bg.png new file mode 100644 index 0000000..92f3cc7 Binary files /dev/null and b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_thanks_bg.png differ diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_title_bg.png b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_title_bg.png new file mode 100644 index 0000000..3de8436 Binary files /dev/null and b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_title_bg.png differ diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_title_bg2.png b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_title_bg2.png new file mode 100644 index 0000000..969dbca Binary files /dev/null and b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/theme.nonfree/bgpics/pgpro_title_bg2.png differ diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/vim-for-postgres-developers.pdf b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/vim-for-postgres-developers.pdf new file mode 100644 index 0000000..f2f3134 Binary files /dev/null and b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/vim-for-postgres-developers.pdf differ diff --git a/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/vim-for-postgres-developers.tex b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/vim-for-postgres-developers.tex new file mode 100644 index 0000000..9b29573 --- /dev/null +++ b/slides/2025 - Becoming PosgtreSQL Core Developer/1.5. Vim for PostgreSQL Developers/english-LaTeX/vim-for-postgres-developers.tex @@ -0,0 +1,527 @@ +\documentclass[aspectratio=169]{beamer} + +\usepackage{xltxtra} +\defaultfontfeatures{Ligatures=TeX,Mapping=tex-text} +\usepackage[russian]{babel} +\usepackage[utf8]{inputenc} +\usepackage[normalem]{ulem} % для \sout + + +%\usepackage{tikz} % FIXME не уверен что все это тут надо +%\usetikzlibrary{chains} + + % Цвета для гиперссылок + \definecolor{linkcolor}{HTML}{799B03} % цвет ссылок + \definecolor{urlcolor}{HTML}{6633FF} % цвет гиперссылок + + \hypersetup{pdfstartview=FitH, linkcolor=linkcolor,urlcolor=urlcolor, colorlinks=true} + +\title{Git and vim for PostgreSQL developers} +\author{Nikolay Shaplov} + +\makeatletter +% Добавляем подпапку к пути поиска .sty/.tex +\def\input@path{{./theme.nonfree}} +\makeatother + + +\usetheme{PgPro} +\input{elements/code.tex} + +\begin{document} + +\begin{frame} +\titlepage +\end{frame} + +% FIXME introduction page + +% FIXME QR-code link to slides + + +\begin{frame}{General topic} + + If you want to write well, you should read a lot. + And you'd better read best samples you can find. + + PostgreSQL is one of the finest C\text{-}driven project one can get. + + In this talk we will learn how to use git and vim to read and explore PostgreSQL code right in the console. + +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +{\setbeamertemplate{background}{ + \begin{tikzpicture} + \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg2.png}}; + \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber}; + \end{tikzpicture} + } + \setbeamercolor{normal text}{fg=white}\usebeamercolor*{normal text} + \setbeamerfont{normal text}{size*={32pt}{1},family=\sffamily}\usebeamerfont*{normal text} + \begin{frame} + \vskip1cm + Git + \end{frame} +} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile, shrink=10]{Git, fetching the source code} + + In order to get latest snapshot of PostgreSQL code you should run command: + + \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +$ git clone https://git.postgresql.org/git/postgresql.git \end{lstlisting} + +If that command does not work for you, may be you just need to install `git` package + + \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +$ sudo apt-get install git\end{lstlisting} + +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +{\setbeamertemplate{background}{ + \begin{tikzpicture} + \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg2.png}}; + \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber}; + \end{tikzpicture} + } + \setbeamercolor{normal text}{fg=white}\usebeamercolor*{normal text} + \setbeamerfont{normal text}{size*={32pt}{1},family=\sffamily}\usebeamerfont*{normal text} + \begin{frame} + \vskip1cm + Vim + \end{frame} +} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\begin{frame}[fragile, shrink=10]{Why vim?} + \begin{itemize} + \item Masterclass is when expert shows how he works. And I work with vim + \item We will need complex navigation methods to browse the code, that is not provided by simple editors + \item If you work with the console, you are much closer to system level than in modern IDE + \item You may consider this as an excursion into history + \item Vim is actually a professional tool providing very high speed of coding + \item Most students find vim very useful as soon as they learn how to do basic things + \end{itemize} +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +{\setbeamertemplate{background}{ + \begin{tikzpicture} + \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg2.png}}; + \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber}; + \end{tikzpicture} + } + \setbeamercolor{normal text}{fg=white}\usebeamercolor*{normal text} + \setbeamerfont{normal text}{size*={32pt}{1},family=\sffamily}\usebeamerfont*{normal text} + \begin{frame} + \vskip1cm + Vim myths + \end{frame} +} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile, shrink=10]{Vim myths} + \begin{itemize} + \item There are two main modes in vim: + \begin{itemize} + \item Beep + \item Mess everything up + \end{itemize} + \end{itemize} +% \emph{~~~ No, this is one mode} +% \begin{itemize} +% \item \sout{You can't quit vim} +% \end{itemize} +% \emph{~~~ No. Vim is \underline{not} Hotel California.} + +% \emph{~~~ I may assure you, you will be expert in quitting vim when these talks are finished.} +% \begin{itemize} +% \item \sout{One need MIDI Foot Controller Pedal to properly work with vim} +% \end{itemize} + +% \emph{~~~ No. MIDI Foot Pedal is for Emacs users only} +\end{frame} + + +\begin{frame}[fragile, shrink=10]{Vim myths} + \begin{itemize} + \item \sout{There are two main modes in vim:} + \begin{itemize} + \item \sout{Beep} + \item \sout{Mess everything up} + \end{itemize} + \end{itemize} + \emph{~~~ No, this is one mode} +% \begin{itemize} +% \item \sout{You can't quit vim} +% \end{itemize} +% \emph{~~~ No. Vim is \underline{not} Hotel California.} + +% \emph{~~~ I may assure you, you will be expert in quitting vim when these talks are finished.} +% \begin{itemize} +% \item \sout{One need MIDI Foot Controller Pedal to properly work with vim} +% \end{itemize} + +% \emph{~~~ No. MIDI Foot Pedal is for Emacs users only} +\end{frame} + + +\begin{frame}[fragile, shrink=10]{Vim myths} + \begin{itemize} + \item \sout{There are two main modes in vim:} + \begin{itemize} + \item \sout{Beep} + \item \sout{Mess everything up} + \end{itemize} + \end{itemize} + \emph{~~~ No, this is one mode} + \begin{itemize} + \item You can't quit vim + \end{itemize} +% \emph{~~~ No. Vim is \underline{not} Hotel California.} + +% \emph{~~~ I may assure you, you will be expert in quitting vim when these talks are finished.} +% \begin{itemize} +% \item \sout{One need MIDI Foot Controller Pedal to properly work with vim} +% \end{itemize} +% \emph{~~~ No. MIDI Foot Pedal is for Emacs users only} +\end{frame} + + + +\begin{frame}[fragile, shrink=10]{Vim myths} + \begin{itemize} + \item \sout{There are two main modes in vim:} + \begin{itemize} + \item \sout{Beep} + \item \sout{Mess everything up} + \end{itemize} + \end{itemize} + \emph{~~~ No, this is one mode} + \begin{itemize} + \item \sout{You can't quit vim} + \end{itemize} + \emph{~~~ No. Vim is \underline{not} Hotel California.} + +% \emph{~~~ I may assure you, you will be expert in quitting vim when these talks are finished.} +% \begin{itemize} +% \item \sout{One need MIDI Foot Controller Pedal to properly work with vim} +% \end{itemize} +% \emph{~~~ No. MIDI Foot Pedal is for Emacs users only} +\end{frame} + + +\begin{frame}[fragile, shrink=10]{Vim myths} + \begin{itemize} + \item \sout{There are two main modes in vim:} + \begin{itemize} + \item \sout{Beep} + \item \sout{Mess everything up} + \end{itemize} + \end{itemize} + \emph{~~~ No, this is one mode} + \begin{itemize} + \item \sout{You can't quit vim} + \end{itemize} + \emph{~~~ No. Vim is \underline{not} Hotel California.} + + \emph{~~~ I may assure you, you will be expert in quitting vim when these talks are finished.} +% \begin{itemize} +% \item \sout{One need MIDI Foot Controller Pedal to properly work with vim} +% \end{itemize} +% \emph{~~~ No. MIDI Foot Pedal is for Emacs users only} +\end{frame} + +\begin{frame}[fragile, shrink=10]{Vim myths} + \begin{itemize} + \item \sout{There are two main modes in vim:} + \begin{itemize} + \item \sout{Beep} + \item \sout{Mess everything up} + \end{itemize} + \end{itemize} + \emph{~~~ No, this is one mode} + \begin{itemize} + \item \sout{You can't quit vim} + \end{itemize} + \emph{~~~ No. Vim is \underline{not} Hotel California.} + + \emph{~~~ I may assure you, you will be expert in quitting vim when these talks are finished.} + \begin{itemize} + \item One need MIDI Foot Controller Pedal to properly work with vim + \end{itemize} +% \emph{~~~ No. MIDI Foot Pedal is for Emacs users only} +\end{frame} + +\begin{frame}[fragile, shrink=10]{Vim myths} + \begin{itemize} + \item \sout{There are two main modes in vim:} + \begin{itemize} + \item \sout{Beep} + \item \sout{Mess everything up} + \end{itemize} + \end{itemize} + \emph{~~~ No, this is one mode} + \begin{itemize} + \item \sout{You can't quit vim} + \end{itemize} + \emph{~~~ No. Vim is \underline{not} Hotel California.} + + \emph{~~~ I may assure you, you will be expert in quitting vim when these talks are finished.} + \begin{itemize} + \item \sout{One need MIDI Foot Controller Pedal to properly work with vim} + \end{itemize} + \emph{~~~ No. MIDI Foot Pedal is for Emacs users only} +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\input{elements/diag.tex} + +\begin{frame}{Vim modes} + \resizebox{0.8\textwidth}{!}{ + \begin{tikzpicture}[start chain=going below, node distance=12mm and 32mm] % начало цепочки + \node (insert_mode)[Rectangle]{Insert mode}; + \node (command_mode)[Rectangle]{Command mode}; + \node (search_mode)[Rectangle]{Search mode}; % FIXME убедиться, что режим поиска -- правильное название. + + \node (normal_mode)[Rectangle, left=of command_mode]{Normal mode}; + \end{tikzpicture} % конец блока + } +\end{frame} + + +\usetikzlibrary{arrows.meta} + +\begin{frame}{Vim modes} + \resizebox{0.8\textwidth}{!}{ + \begin{tikzpicture}[start chain=going below, node distance=12mm and 32mm, >={Stealth[scale=1.5]} ] % начало цепочки + \node (insert_mode)[Rectangle]{Insert mode}; + \node (command_mode)[Rectangle]{Command mode}; + \node (search_mode)[Rectangle]{Search mode}; % FIXME убедиться, что режим поиска -- правильное название. + + \node (normal_mode)[Rectangle, left=of command_mode]{Normal mode}; + + \path[->] (normal_mode.east) edge node[midway, above, sloped, yshift=32pt]{ i / Ins } (insert_mode.west); + \path[->] (normal_mode.east) edge node[midway, above, sloped, yshift=32pt]{ : } (command_mode.west); + \path[->] (normal_mode.east) edge node[midway, below, yshift=32pt]{ / } (search_mode.west); + + \end{tikzpicture} % конец блока + } +\end{frame} + +\begin{frame}{Vim modes} + \resizebox{0.8\textwidth}{!}{ + \begin{tikzpicture}[start chain=going below, node distance=12mm and 32mm, >={Stealth[scale=1.5]} ] % начало цепочки + \node (insert_mode)[Rectangle]{Insert mode}; + \node (command_mode)[Rectangle]{Command mode}; + \node (search_mode)[Rectangle]{Search mode}; % FIXME убедиться, что режим поиска -- правильное название. + + \node (normal_mode)[Rectangle, left=of command_mode]{Normal mode}; + + \path[->] (insert_mode.west) edge node[midway, above, sloped, yshift=32pt]{ Esc } (normal_mode.east); + \path[->] (command_mode.west) edge node[pos=0.38, above, sloped, yshift=32pt]{ Esc / Enter } (normal_mode.east); + \path[->] (search_mode.west) edge node[pos=0.40, below, sloped, yshift=36pt]{ Esc / Enter } (normal_mode.east); + + \end{tikzpicture} % конец блока + } +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\begin{frame}[fragile, shrink=10]{Commands of the command-line mode} + \begin{itemize} + \item \textbf{:q} --- quit vim + \item \textbf{:q!} --- quit without saving + \item \textbf{:w} --- save (\textbf{:wq} --- save and quit) + \item \textbf{:123} --- go to line 123 + \item \textbf{:set number} --- show line numbers + \item \textbf{:set nonumber} --- hide line numbers + \end{itemize} + Use \textbf{up} and \textbf{down} arrows to scroll through commands history + + \textbf{Tab} is for autocompletion +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile, shrink=10]{Normal mode commands} + \begin{itemize} + \item \textbf{dd} --- delete line; + \item \textbf{u} --- undo; + \item \textbf{Ctrl + r} --- redo. + \end{itemize} + +Copy and past commands + + \begin{itemize} + \item \textbf{v} / \textbf{V} --- text selection mode + \item \textbf{d} --- delete selected text into buffer + \item \textbf{y} --- copy (yank) selected text into buffer + \item \textbf{p} / \textbf{P} --- insert text from buffer in/after cursor position + \end{itemize} +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile, shrink=10]{Search mode commands} + \begin{itemize} + \item \textbf{/abc} --- search text for substring `abc`; + \item \textbf{/} --- search again. + \end{itemize} + +Use \textbf{up} and \textbf{down} arrows to scroll through search history + +You can also use regular expressions here. + +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +{\setbeamertemplate{background}{ + \begin{tikzpicture} + \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg2.png}}; + \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber}; + \end{tikzpicture} + } + \setbeamercolor{normal text}{fg=white}\usebeamercolor*{normal text} + \setbeamerfont{normal text}{size*={32pt}{1},family=\sffamily}\usebeamerfont*{normal text} + \begin{frame} + \vskip1cm + Navigating through code using tags in vim + \end{frame} +} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\begin{frame}[fragile, shrink=10]{Tags lists} + +Tags are an ancient way for navigating the code, for jumping from symbol's usage to it's definition. + +In this technique you use some script for generating list of symbols defined in your project (tags) and your editor uses them for navigating through the code. + +For C code of PostgreSQL tags are generated with `ctags` program from `exuberant-ctags` package. + +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\begin{frame}[fragile, shrink=10]{Building tags list} + + +To build tags list you should install `exuberant-ctags` package: + + \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +$ sudo apt-get install exuberant-ctags \end{lstlisting} + +And then run \texttt{make\_ctags} script provided by PostgreSQL developers from the root of PostgreSQL source tree + + \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +$ src/tools/make_ctags \end{lstlisting} + +You will get a bunch of \texttt{tags} files in each directory of source tree. +You can copy it to your extension dir, so you can jump to postgres code function definitions while editing your code. + +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile, shrink=10]{Using tags in vim} + +Let's open some file from PostgreSQL source code + + \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +$ vim src/backend/postmaster/postmaster.c \end{lstlisting} + +and find some symbol that most probably defined inside PosgreSQL code. +I found \texttt{BACKEND\_NUM\_TYPES} on 145th line. + +You can move cursor to that symbol, and press \textbf{Ctrl + \rbrack} to jump to the place where this symbol is defined. + +In order to go back, press \textbf{Ctrl + t} +\end{frame} + + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile, shrink=10]{Hiding \texttt{tags} from git} + +\texttt{tags} files are not ignored by by git version control system. +You can see that by running command + +\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +$ git status \end{lstlisting} + +Theoretically you cat add \texttt{tags} into \texttt{.girignore} file, but you will have to track this change manually, make sure it is not committed, and so on. +Less known solution is to add \texttt{tags} into local .\texttt{git/info/exclude} file, that will do same trick. + +Run again + +\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +$ git status \end{lstlisting} + +and you will see that \texttt{tags} files are now ignored. + +\end{frame} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile, shrink=10]{Open file on certain position} + +If you, for some reason need to open file on certain position, for example you get an error message from a compiler, that specify certain line number, you can specify this line number as an extra option with "plus" prefix in front of it: + +\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +$ vim src/backend/access/common/reloptions.c +1234 \end{lstlisting} + +This command will open \texttt{reloptions.c} file in vim, and move cursor to line number 1234. + +\end{frame} + + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile, shrink=10]{\texttt{grep}ing for function definition} + +If you know function name (from compiler error message) and would like to find it's definition, most probably you will try to use \texttt{grep} utility. +But you will not success, as multiple \texttt{tags} files will also contain this function name. +You should use `git grep` command instead, as it will ignore files that are not part of git repository + +\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +$ git grep ^tsvectorin \end{lstlisting} + +This command uses the convention that, in a C program, the function name is specified starting from the first character of the line. +This allow to find only function definition, and ignore all other occurrences. + +\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1] +int +my_function(char * str, bool is_cool) \end{lstlisting} + +\end{frame} + + + +{\setbeamertemplate{background}{ + \begin{tikzpicture} + \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_thanks_bg.png}}; + \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber}; + \end{tikzpicture} + } + \begin{frame} + \end{frame} +} +\end{document}