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