source: content/presentations/emacs/emacs-polyglot.org

Last change on this file was 07b264f, checked in by w96k <w96k@…>, on Oct 26, 2022 at 11:00:49 PM

Change email

  • Property mode set to 100644
File size: 22.5 KB
Line 
1#+Title: Свободный текстовый редактор общего назначения GNU/Emacs
2#+Author: Михаил Кириллов https://w96k.de
3#+EMAIL: w96k@runbox.com
4#+DATE: 1 Июня 2020
5#+LANGUAGE: ru
6#+OPTIONS: H:2 date:nil num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
7#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
8#+BEAMER_THEME: Berlin
9#+BEAMER_COLOR_THEME: default
10#+LATEX_HEADER: \usepackage[russian]{babel}
11#+LATEX_HEADER: \usepackage{beamerthemesplit}
12#+LATEX_CLASS_OPTIONS: [article,12pt,notitlepage,notitle,oneside,twocolumn]
13#+STARTUP: beamer
14#+LINK_HOME: https://w96k.dev
15
16* Вступление
17** Текстовый редактор
18 Текстовый редактор необходим тем, кто хочет набирать и сохранять
19 текст в памяти компьютера. Это может понадобиться программистам и
20 тем, кто хочет писать заметки и документы.
21** Свобода
22 - Пользователь хочет понимать работу одного из базовых инструментов
23 - Для понимания необходимо изучить исходный код
24 - Исходный код может быть открытым или закрытым
25 - Только при открытости исходного кода становиться возможно
26 полностью изучить работу программы. Также это способствует
27 улучшению и расширению функционала.
28
29** О чём доклад
30
31 Мы рассмотрим использование редактора GNU Emacs для выполнения
32 следующих задач:
33 - программирование
34 - редактирования документов и презентаций
35 - ведение заметок
36
37* GNU
38** GNU/Emacs
39 #+ATTR_LATEX: :width 100
40 [[./emacs.png]] *GNU/Emacs* -- это свободный немодальный текстовый
41 редактор общего назначения, созданный в 1985 году Ричардом
42 Столлманом. Редактор обновляется по сей день и доступен на многих
43 платформах в том числе Windows.
44
45** Кто пользуется
46 Имаксом в той или иной степени пользовались следующие люди:
47 * Линус Торвальдс
48 * Дональд Кнут
49 * Юкихиро Матсумото
50 * Гуидо Ван Россум
51 * Рич Хикей
52 * Джо Армстронг
53 * Эрик Реймонд
54 * Андрей Александреску
55
56 Также Emacs весьма популярен среди непрограммистов, например писателей.
57
58** Главный экран
59 # Продемонстрировать главный экран Emacs
60 Если открыть Имакс, то нас встретит следующая надпись:\\
61
62
63 *Welcome to GNU Emacs, one component of the GNU/Linux operating system.*
64
65
66 Что это значит?
67
68** GNU is not Unix
69 #+ATTR_LATEX: :height 60
70 [[./gnu.png]]
71
72 *GNU* -- это фонд свободного программного обеспечения, который
73 содержит ПО, следующее четырём свободам:
74
75** Свободы GNU
76 :PROPERTIES:
77 :BEAMER_opt: shrink=10
78 :END:
79*** Свобода 0
80 Свобода выполнять программу как вам угодно в любых целях.
81
82*** Свобода 1
83 Свобода изучать работу программы и модифицировать
84 программу, чтобы она выполняла ваши вычисления, как вы
85 пожелаете. Это предполагает доступ к исходному тексту.
86
87*** Свобода 2
88 Свобода передавать копии, чтобы помочь другим.
89
90*** Свобода 3
91 Свобода передавать копии своих измененных версий другим. Этим вы
92 можете дать всему сообществу возможность получать выгоду от ваших
93 изменений. Это предполагает доступ к исходному тексту.
94
95** Больше о GNU
96 Деятельность данного фонда подробно описана в книге "[[https://en.wikipedia.org/wiki/Free_as_in_Freedom][Free as in
97 Freedom]]", которая доступна на русском языке.
98
99 #+ATTR_LATEX: :width 100
100 [[./gnu-book.jpeg]]
101* Редакторы
102** Другие редакторы
103 Рассмотрим следующие текстовые редакторы, которые возможно
104 используют ваши друзья и коллеги:
105
106 * IDE от JetBrains (PHPStorm, InttelliIDEA и т.д.)
107 * VS Code
108 * Sublime Text
109 * Vi/Vim/NeoVim
110
111 За исключением вима данные редакторы не подходят для общего
112 назначения, большинство из них направлены именно на написание
113 кода. Тем не менее даже в более узкой специализации они имеют
114 серьезные изъяны.
115
116** Недостатки популярных редакторов
117*** IDE от JetBrains
118 * Закрытый исходный код
119 * Плохая производительность, долгий отклик
120 * Узкая специализация (одно IDE на язык вместо одного окружения для всего)
121 * Неконсинстентность интерфейса
122*** Sublime Text
123 * Закрытый исходный код
124 * Неконсинстентность интерфейса
125** Недостатки популярных редакторов
126*** VS Code
127 * Телеметрия
128 * Низкая производительность (Electron)
129 * Основан на веб-технологиях
130 * Неконсистентность интерфейса
131*** Vi/Vim/NeoVim
132 * Невозможно выйти (шутка)
133
134* Vim и Emacs
135** Почему Emacs и Vim непопулярны
136
137 #+ATTR_LATEX: :height 120
138 [[./learning-curve.jpg]]
139
140 Ответ: Кривая обучения
141
142** Миф: Emacs не настолько сложен
143 Мы видим, что вход в вим высокий. С другой стороны у Emacs кривая
144 обучения начинается с самого низа, но потом закручивается. Что это
145 значит?
146
147** Миф: Emacs не настолько сложен
148 В отличии от Vim GNU/Emacs имеет рядовые инструменты для работы с
149 текстом: поддержка мыши (выделение, скролл), стрелки, улучшенная
150 система горячих клавиш, меню. Emacs в изначальной поставке -- это
151 что-то между обычным текстовым редактором вроде notepad.exe и
152 IDE. Тем не менее Emacs имеет возможности расширения, которые
153 позволяют превратить его в многофункциональное IDE-подобное нечто.
154** M-x butterfly
155 #+ATTR_LATEX: :height 140
156 [[./real_programmers.png]]
157
158 Шуточная функция поставляется в GNU/Emacs после появления комикса.
159** Схожести и отличия Emacs / Vim
160 #+ATTR_LATEX: :height 120
161 [[./emacs-vim.png]]
162 Не смотря на то, что редакторы достаточно разительно отличаются
163 друг друга концептуально, на самом деле у них больше общего чем
164 может показаться.
165** Схожести
166 | | *Emacs* | *Vim* |
167 |-------------------------+---------+-------|
168 | Интерфейс | Текст | Текст |
169 | Туториал | Есть | Есть |
170 | Фреймы | Есть | Есть |
171 | Файловый менеджер | Есть | Есть |
172 | Макросы | Есть | Есть |
173 | Автокомплит | Есть | Есть |
174 | Интеграция с терминалом | Есть | Есть |
175
176** Отличия
177 | | *Emacs* | *Vim* |
178 |---------------------+------------------+-------------|
179 | Ввод | Аккордовые бинды | Модальность |
180 | Язык расширений | Emacs Lisp | VimScript |
181 | Принципы | M-x butterfly | Unix Way |
182 | Документация | Info | Man |
183 | Клиент (в основном) | Графика | Терминал |
184
185 Подробнее о сравнении Vim и Emacs:
186 https://en.wikipedia.org/wiki/Editor_war
187
188** Что даёт графический клиент
189 - Правильно работающие бинды (например в консоли не сработает C-.)
190 - Управление мышью
191 - Отображение картинок, видео, граф. документов вроде pdf
192 - Отображение шрифта с лигатурами
193 - Всплывающие окна и дополнительные меню
194** (equal :Emacs :Vim) ;; => t
195 Субъективно Emacs Lisp предоставляет больше возможностей по
196 расширению редактора, чем VimScript. Хотя Emacs Lisp и далёк от
197 идеала, он больше похож на язык общего назначения. По этим и другим
198 соображениям Emacs популярен в частности среди пользователей Vim.
199** Evil
200 #+ATTR_LATEX: :height 25
201 [[./evil.png]] *Evil-mode* -- это расширение для GNU/Emacs, которое
202 эмулирует Vim. Так как оба редактора работают со всеми объектами как
203 с текстом, то использование эмуляции Vim в Emacs более тривиальное,
204 чем в каком-нибудь IDE. Огромное количество пакетов Emacs
205 предоставляют биндинги для работы с Evil.
206* Возможности
207** Что есть в GNU/Emacs
208 * Рантайм Emacs Lisp
209 * Аккордовые сочетания клавиш
210 * Макросы
211 * Встроенный пакетный менеджер
212 * Встроенный файловый менеджер
213 * Отображение номеров строк
214 * Работа с терминалом (ansi-term, eshell)
215 * Разделение на фреймы
216 * Поддержка большого числа языков программирования
217 * Поддержка спелл-чекера
218 * Встроенная система помощи (туториал, apropos, функции, бинды)
219** Что есть в GNU/Emacs
220 * Интерактивные элементы (кнопки, формы и т.д.)
221 * Интерфейс к info и man
222 * Поиск
223 * Встроенный текстовый браузер eww
224 * Встроенные клиенты IRC и email
225 * Линтер кода Flymake
226 * Интерфейс к GDB
227 * Система контроля версий (не только git)
228 * Возможность удаленного редактирования кода (например через ssh)
229 * Org-mode для ведения заметок (и много чего еще)
230 * Можно читать pdf (с pdf-tools)
231** Биндинги Emacs
232 Биндинги в Emacs мнемонические. Это значит, что их легко запомнить,
233 так как буква биндинга практически всегда что-то обозначает.
234 - =C-n= Следующая строка (next)
235 - =C-p= Предыдущая строка (previous)
236 - =C-f= Вперед на символ (forward)
237 - =C-b= Назад на символ (back)
238
239 Не все биндинги появились именно в Emacs. Emacs изначально был
240 расширением редактора TECO.
241
242 Подробнее об истории биндингов Emacs и Vim:
243 http://xahlee.info/kbd/keyboard_hardware_and_key_choices.html
244** Биндинги Emacs
245 Важным отличием биндингов в редакторе GNU/Emacs является то, что
246 они еще и аккордовыми. Это значит, что несколько комбинаций
247 следующих друг за другом могут что-то значить. Например:
248 - =C-x C-f= открыть файл
249 - =C-x s= сохранить файл
250 Набираемые аккордовые бинды отображаются в мод-лайне. Для сброса
251 существует биндинг *C-g*.
252** Emacs Lisp
253 Ядро редактора написано на языке C, остальное -- язык расширений
254 Emacs Lisp (25% C + 75% Elisp). Лисп -- один из старейших
255 динамических языков программирования, основанный на
256 нетипизированном лямбда-исчислении. Выглядит примерно так:
257
258 #+BEGIN_SRC emacs-lisp
259 ;; Объявление и вызов функции
260 (defun имя-функции (аргументы) (тело функции))
261 (имя-функция аргумент1 аргумент2)
262
263 (defun hello (name)
264 (concat "Hello, " name)) ;; => hello
265 (hello "Mikhail") ;; => "Hello, Mikhail"
266 #+END_SRC
267** Всё есть функция
268 Любое действие в редакторе представляет из себя функцию.
269 - Двинули курсор в начало строки -- функция beginning-of-line
270 - Сохранили файл -- функция save-buffer
271 - Вставили текст -- функция yank
272
273 И так с любым действием.
274
275** Система помощи
276 В GNU/Emacs встроен туториал и очень удобная система помощи.
277 - =C-h t= Туториал (на русском языке)
278 - =C-h r= Мануал Emacs
279 - =C-h a= Apropos (по описанию находит нужную функцию)
280 - =C-h k= Describe-key (описывает функцию, прикрепленную к бинду)
281 - =C-h f= Describe-function (описывает функцию)
282 - =C-h m= Describe-mode
283 - =C-h i= Info
284** Моды
285 *Мод* -- это модификация GNU/Emacs, которая включается при
286 определенном условии.
287 - Major мод может быть всего один, чаще всего вешается на открытие
288 файла определенного расширения. Например при открытие файла с
289 расширением .py запустится python-mode.
290 - Minor модов может быть неограниченное количество, они дополняют
291 функционал Major модов. Могут быть активированы всегда (имеют
292 префикс global-<название мода>) или при определенном условии.
293** Мод-лайн
294 *Мод-лайн* отображает информацию об используемых модах и состоянии
295 файла (название, сохранён или нет, позиция курсора, система
296 контроля версий). Пользователь может расширить мод-лайн для показа
297 своей информации, например времени. Под мод-лайном располагает
298 Echo зона, которая даёт уведомления о работе модов, а также может
299 запрашивать ввод.
300** Буфер
301 *Буфер* -- это обособленная память с текстом, которой манипулирует
302 имакс прежде чем писать на диск. Экран Emacs отображает буфера,
303 грубо говоря вы видите всегда как-минимум один буфер. При запуске
304 доступны следующие буферы:
305 - =*GNU EMACS*= -- начальный экран
306 - =*scratch*= -- площадка REPL для обкатывания Emacs Lisp
307 Бинды:
308 - =C-x b= -- сменить буфер
309 - =C-x C-b= -- список буферов
310** Программирование
311 Поддерживаются языки:
312 - C
313 - Lisp и Scheme
314 - C++
315 - Fortran
316 - Java
317 - Javascript
318 - Python
319 - Ruby
320 - Perl
321 - и множество других
322 Разумеется список можно расширить сторонними пакетами
323** Программирование
324 Также для задач программирования доступны:
325 - Форматирование кода
326 - Компилирование программ
327 - Линтер Flymake, который на фоне проверяет текст программы
328 - Дебаггеры GDB, PDB, JDB и другие
329 - Интерфейс к grep
330 - Выполнение кода Emacs Lisp прямо в редакторе
331** Система контроля версий
332 При программировании полезно использовать систему контроля
333 версий. Самая распространненая система -- git. Про другие системы
334 обычно забывают, но не в случае Emacs. Система контроля версий
335 Emacs поддерживает:
336 - Git
337 - Mercurial
338 - CVS
339 - Bazaar
340 - Subversion
341 - и другие
342
343** Org-mode
344 *Org-mode* -- Markdown на колёсах, декларативный формат описания
345 всего и вся, основанный на списке из уровней (Outline). С помощью
346 org-mode можно:
347 - Организовывать свою жизнь
348 - Создавать документы и презентации (latex)
349 - Использовать технику грамотного программирования
350 - Заменять Markdown
351
352 https://orgmode.org/worg/org-tutorials/
353** Tramp
354 #+BEGIN_QUOTE
355 Вимеры могут привести в аргумент то, что их редактор уже доступен
356 на многих системам и ничего не надо докачивать и что можно
357 редактировать прямо на сервере.
358 #+END_QUOTE
359 В Emacs вы можете редактировать удалённые файлы через ssh,
360 использую Tramp. Выглядеть это будет также как вы редактируете всё
361 на своей родной системе. В Vim редактирование на сервере работает
362 только при условии отсутствия конфигурации, в Emacs
363** Кастомизация
364 [[./customize.png]]
365 =M-x customize= открывает GUI, позволяющий редактировать поведение
366 и внешний вид Emacs.
367* Конфиг
368** .emacs / init.el
369 В качестве конфигурации Emacs использует один из следующих файлов в домашней директории:
370 - ~/.emacs
371 - ~/.emacs.d/init.el
372
373 Файл конфигурации содержит листинг кода на Emacs Lisp, который
374 Emacs вычисляет при запуске программы. Чтобы создавать конфиг Emacs
375 вовсе необязательно в идеале владеть Emacs Lisp.
376** Пакетный менеджер package.el
377 Для расширения предусмотрен пакетный менеджер, который уже встроен
378 в редактор. По-умолчанию доступен только один официальный
379 репозиторий Elpa, но пользователь может подключать сторонние
380 (например Melpa).
381 - =M-x list-packages= -- список пакетов, доступных в репозиториях
382 - =M-x package-install <название пакета>= -- установка пакета из репозитория
383 Моя конфигурация доступна по адресу https://w96k.ru/emacs.html
384** use-package
385 *use-package* -- это декларативная обёртка от сообщества для
386 package.el. Рекомендую использовать use-package, чтобы ваш конфиг
387 не превратился со временем в нечитаемое месиво.
388 - =:config= -- изолирует конфигурацию пакетов друг от друга
389 - =:hook= -- короткая запись для навешивания хуков
390 - =:ensure= -- загружает пакет из репозитория
391 - =:diminish= -- скрывает мод из модлайна
392 - и другие опции
393
394* Демо
395** Создание базового конфига
396 Наглядное создание базового конфига с нуля.
397** Редактирование кода
398 - Projectile
399 - VCS
400 - LSP
401 - Repl и терминал
402** Организация жизни при помощи org-mode
403** Ведение документов
404* Дистрибутивы
405** Vanilla
406** Spacemacs
407** Doom Emacs
408** Prelude
409* Изучение
410** Tutorial
411** Info emacs
412** Книги
413*** Mastering Emacs
414*** Learning Gnu Emacs
Note: See TracBrowser for help on using the repository browser.