blob: d2b69181af9dede6bdb9310068e4f3444a4173df [file] [log] [blame]
RestorerZ21ac3a42025-03-16 19:49:41 +01001# ДОБРО ПОЖАЛОВАТЬ НА ЗАНЯТИЯ ПО РЕДАКТОРУ Vim
2
3## ГЛАВА ВТОРАЯ
4
5 Что‐то неожиданное и непонятное?
6 Если это ваше первое знакомство с редактором Vim и вы планировали начать
7 с вводной главы учебника, не расстраивайтесь и сделайте вот что.
8 Наберите в командной строке редкатора Vim следующую команду
9~~~ cmd
10 :Tutor vim-01-beginner
11~~~
12 Или просто откройте по ссылке [первую главу](@tutor:vim-01-beginner) учебника.
13
14 Приблизительное время, необходимое для изучения второй главы учебника
15 составляет около 810 минут, и зависит от того, сколько времени вы посвятите
16 выполнению заданий.
17
18
19# Урок 2.1.1. ИМЕНОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim
20
21** Копирование с сохранением двух разных слов и последующая их вставка в текст **
22
23 1. Переместите каретку к строке помеченной
24
25 2. Установите каретку на любом символе слова «Эдуард» и наберите команду
26 `"ayiw`{normal}
27
28Эта команда означает следующее:
29 регистр(") с названием(a) скопировать(y) только(i) слово(w)*
30
31 3. Сдвиньте каретку вперёд на слово «печенье»
32 (это можно сделать одним из следующих способов:
33 `fп`{normal} или `3fч`{normal}, или `$`{normal}, или `/пе<ENTER>`{normal})
34 и наберите команду
35 `"byiw`{normal}
36
37 4. Переместите каретку на любой символ слова «Виктор» и наберите на клавиатуре
38 `ciw<CTRL-r>a<ESC>`{normal}
39
40Эта команда означает следующее:
41 *изменить(c) только(i) слово(w) на <содержимое регистра(r)> с названием(a)*
42
43 5. Установите каретку на любой символ слова «тортов» и наберите
44 `ciw<CTRL-r>b<ESC>`{normal}
45
46а) Отныне Эдуард будет отвечать за раздачу печенья
47б) Таким образом Виктор имеет единоличные права по распределению тортов
48
49**Примечание.**
50 Регистры можно использовать также и для вырезания текста, например,
51 по команде `"sdiw`{normal} будет выполнено удаление слова под кареткой
52 в регистр с названием «s».
53
54Разделы документации:
55 [регистры](registers)
56 [именованные регистры](quote_alpha)
57 [перемещение](text-objects)
58 [CTRL-R](i_CTRL-R)
59
60
61# Урок 2.1.2. РЕГИСТР РЕЗУЛЬТАТА ВЫЧИСЛЕНИЙ
62
63** Вставка результатов вычислений напрямую в текст **
64
65 1. Переместите каретку к строке помеченной ✗
66
67 2. Установите каретку на любой цифре приведённого числа
68
69 3. Наберите на клавиатуре `ciw<CTRL-r>=60*60*24`{normal} `<ENTER>`{normal}
70
71 4. Переместите каретку в конец следующей строки, переключите редактор в режим
72 вставки, и добавьте сегодняшнюю дату с помощью следующей команды
73 `<CTRL-r>=`{normal}`system('date')`{vim} `<ENTER>`{normal}
74
75Примечание.
76 Результат вызова функции `system()`{vim} зависит от текущей операционной
77 системы, например, в ОС Windows необходимо использовать такую команду
78 `system('date /t')`{vim} или `:r!date /t`{vim}
79
80Правильно ли я помню, что в сутках 84600 секунд?
81Сегодняшняя дата
82
83Примечание.
84 Тот же результат можно получить с помощью такой команды
85 `:pu=`{normal}`system('date')`{vim} или более короткой команды `:r!date`{vim}
86
87Разделы документации:
88 [регистр результата вычислений](quote=)
89
90
91# Урок 2.1.3. НУМЕРОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim
92
93** Как команды `yy`{normal} и `dd`{normal} влияют на содержимое регистров **
94
95 1. Переместите каретку к строке помеченной ✓
96
97 2. Скопируйте эту строку и проверьте состояние регистров с помощью команды
98 `:reg`{vim} `<ENTER>`{normal}
99
100 3. Удалите строку, начинающуюся с цифры 0, с помощью команды `"cdd`{normal}
101 и ещё раз проверьте состояние регистров (где будет строка, начинающаяся
102 с цифры 0?)
103
104 4. Продолжайте удалять все последующие нумерованные строки, проверяя состояние
105 регистров после каждой операции.
106
107**Примечание.**
108 В ходе этих действий вы заметите, что ранее удалённые строки смещаются вниз
109 по мере того, как новые удалённые строки добавляются в перечень регистров.
110
111 5. Теперь вставьте содержимое регистров в следующем порядке: c, 7, 4, 8, 2.
112 То есть наберите команды `"cp`{normal}, `"7p`{normal} и так далее.
113
1140. Здесь
1159. шататься
1168. секретное
1177. будет
1186. на
1195. шесте
1204. это
1213. войны
1222. послание
1231. наградой
124
125
126**Примечание.**
127 Целые строки, удалённые по команде `dd`{normal}, дольше сохраняются
128 в нумерованных регистрах, чем строки, которые были скопированы или когда
129 с оператором удаления указывается объект текста для перемещения каретки.
130
131Разделы документации:
132 [нумерованные регистры](quote_number)
133
134
135# Урок 2.1.4. ИЗЯЩЕСТВО ЗАКЛАДОК
136
137** Избегайте действий, свойственных для дятлокодеров **
138
139**Примечание.**
140 При написании программ часто возникает необходимость перемещения больших
141 фрагментов кода. Приём, приведённый далее, поможет избежать подсчёта номеров
142 строк, требуемых для операций вроде `"a147d`{normal} или `:945,1091d a`{vim},
143 или даже хуже — `i<CTRL-r>=1091-935<ENTER>`{normal}, как первое действие.
144
145 1. Переместите каретку к строке помеченной ✓
146
147 2. Установите каретку на следующую строку, где начинается описание функции,
148 и поставьте закладку, воспользовавшись командой `ma`{normal}
149
150**Примечание.**
151 Неважно где будет находиться каретка в этой строке.
152
153 3. С помощью следующей команды `$%`{normal} установите каретку на последний
154 символ в этой строке с последующим перемещением на окончание блока кода
155
156 4. Удалите весь это блок кода в регистр с названием «a» с помощью команды
157 `"ad'a`{normal}
158
159Эта команда означает следующее:
160 *в регистр(") с названием (a) поместить удалённые строки от позиции каретки
161 до строки, в которой установлена закладка(') с названием (a)*
162
163 5. Вставьте удалённый блок между символами BBB и CCC с помощь команды
164 `"ap`{normal}
165
166~~~ cmd
167AAA
168function itGotRealBigRealFast() {
169 if ( somethingIsTrue ) {
170 doIt()
171 }
172 // таксономия нашей функции изменилась, и её текущее положение больше
173 // не имеет привязки к алфавитному порядку
174
175 // а теперь представьте, что здесь сотни строк кода
176
177 // было бы глупо искать начальную и конечную строку этого блока кода,
178 // чтобы записывать или запоминать номер строки для каждой из них
179}
180BBB
181CCC
182~~~
183
184**Примечание.**
185 Пространство именования закладок и регистров не пересекаются между собой,
186 поэтому регистр «a» полностью независим от закладки с таким же названием «a».
187 Это правило не распространяется на регистры и макросы.
188
189Разделы документации:
190 [закладки](marks)
191 [перемещение к закладкам](mark-motions) (различие между \` и ')
192
193
194# РЕЗЮМЕ УРОКА 2.1
195
196 1. Чтобы сохранить (при удалении или копировании) текст для последующей
197 вставки, используйте имеющиеся 26 именованных регистра (a-z).
198 2. Чтобы скопировать целое слово при нахождении каретки на любом символе
199 в этом слове, воспользуйтесь командой `yiw`{normal}
200 3. Чтобы изменить целое слово при нахождении каретки на любом символе в этом
201 слове, воспользуйтесь командой `ciw`{normal}
202 4. Чтобы в режиме вставки вставить текст непосредственно из регистра,
203 воспользуйтесь командой `<CTRL-r>a`{normal}
204
205 5. Чтобы в режиме вставки вставить результат вычисления простых математических
206 операций, воспользуйтесь командой `<CTRL-r>=60*60`{normal} `<ENTER>`{normal}
207 6. Чтобы в режиме вставки вставить результат выполнения команд системы,
208 воспользуйтесь командой `<CTRL-r>=`{normal}`system('ls -l')`{vim}
209
210 7. Чтобы просмотреть содержимое регистров, воспользуйтесь командой `:reg`{vim}
211 8. Учитывайте распределение удалённых целиком строк по команде `dd`{normal} —
212 это нумерованные регистры в порядке убывания, т. е. от 1 до 9.
213 Помните, что в нумерованных регистрах дольше хранятся те строки, которые
214 были уделены целиком, в отличие от любых других операций
215 9. Учитывайте, что в нумерованных регистрах кратковременно сохраняется всё
216 что скопировано.
217
218 10. Чтобы установить закладку в режиме команд, воспользуйтесь командой
219 `m[a-zA-Z0-9]`{normal}
220 11. Чтобы переместить каретку на строку в которой установлена закладка,
221 воспользуйтесь командой `'`{normal}
222
223
224# ЗАКЛЮЧЕНИЕ
225
226 На этом пока заканчивается вторая глава учебника по редактору Vim.
227 Работа над этой главой будет продолжена.
228
229 Вторая глава учебника была написана Полом Д. Паркером (Paul D. Parker).
230
231 Restorer, перевод на русский язык, 2025, restorer@mail2k.ru