RestorerZ | 21ac3a4 | 2025-03-16 19:49:41 +0100 | [diff] [blame] | 1 | # ДОБРО ПОЖАЛОВАТЬ НА ЗАНЯТИЯ ПО РЕДАКТОРУ 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 | составляет около 8–10 минут, и зависит от того, сколько времени вы посвятите |
| 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 | |
| 114 | 0. Здесь |
| 115 | 9. шататься |
| 116 | 8. секретное |
| 117 | 7. будет |
| 118 | 6. на |
| 119 | 5. шесте |
| 120 | 4. это |
| 121 | 3. войны |
| 122 | 2. послание |
| 123 | 1. наградой |
| 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 |
| 167 | AAA |
| 168 | function itGotRealBigRealFast() { |
| 169 | if ( somethingIsTrue ) { |
| 170 | doIt() |
| 171 | } |
| 172 | // таксономия нашей функции изменилась, и её текущее положение больше |
| 173 | // не имеет привязки к алфавитному порядку |
| 174 | |
| 175 | // а теперь представьте, что здесь сотни строк кода |
| 176 | |
| 177 | // было бы глупо искать начальную и конечную строку этого блока кода, |
| 178 | // чтобы записывать или запоминать номер строки для каждой из них |
| 179 | } |
| 180 | BBB |
| 181 | CCC |
| 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 |