| # ДОБРО ПОЖАЛОВАТЬ НА ЗАНЯТИЯ ПО РЕДАКТОРУ Vim |
| |
| ## ГЛАВА ВТОРАЯ |
| |
| Что‐то неожиданное и непонятное? |
| Если это ваше первое знакомство с редактором Vim и вы планировали начать |
| с вводной главы учебника, не расстраивайтесь и сделайте вот что. |
| Наберите в командной строке редкатора Vim следующую команду |
| ~~~ cmd |
| :Tutor vim-01-beginner |
| ~~~ |
| Или просто откройте по ссылке [первую главу](@tutor:vim-01-beginner) учебника. |
| |
| Приблизительное время, необходимое для изучения второй главы учебника |
| составляет около 8–10 минут, и зависит от того, сколько времени вы посвятите |
| выполнению заданий. |
| |
| |
| # Урок 2.1.1. ИМЕНОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim |
| |
| ** Копирование с сохранением двух разных слов и последующая их вставка в текст ** |
| |
| 1. Переместите каретку к строке помеченной ✓ |
| |
| 2. Установите каретку на любом символе слова «Эдуард» и наберите команду |
| `"ayiw`{normal} |
| |
| Эта команда означает следующее: |
| *в регистр(") с названием(a) скопировать(y) только(i) слово(w)* |
| |
| 3. Сдвиньте каретку вперёд на слово «печенье» |
| (это можно сделать одним из следующих способов: |
| `fп`{normal} или `3fч`{normal}, или `$`{normal}, или `/пе<ENTER>`{normal}) |
| и наберите команду |
| `"byiw`{normal} |
| |
| 4. Переместите каретку на любой символ слова «Виктор» и наберите на клавиатуре |
| `ciw<CTRL-r>a<ESC>`{normal} |
| |
| Эта команда означает следующее: |
| *изменить(c) только(i) слово(w) на <содержимое регистра(r)> с названием(a)* |
| |
| 5. Установите каретку на любой символ слова «тортов» и наберите |
| `ciw<CTRL-r>b<ESC>`{normal} |
| |
| а) Отныне Эдуард будет отвечать за раздачу печенья |
| б) Таким образом Виктор имеет единоличные права по распределению тортов |
| |
| **Примечание.** |
| Регистры можно использовать также и для вырезания текста, например, |
| по команде `"sdiw`{normal} будет выполнено удаление слова под кареткой |
| в регистр с названием «s». |
| |
| Разделы документации: |
| [регистры](registers) |
| [именованные регистры](quote_alpha) |
| [перемещение](text-objects) |
| [CTRL-R](i_CTRL-R) |
| |
| |
| # Урок 2.1.2. РЕГИСТР РЕЗУЛЬТАТА ВЫЧИСЛЕНИЙ |
| |
| ** Вставка результатов вычислений напрямую в текст ** |
| |
| 1. Переместите каретку к строке помеченной ✗ |
| |
| 2. Установите каретку на любой цифре приведённого числа |
| |
| 3. Наберите на клавиатуре `ciw<CTRL-r>=60*60*24`{normal} `<ENTER>`{normal} |
| |
| 4. Переместите каретку в конец следующей строки, переключите редактор в режим |
| вставки, и добавьте сегодняшнюю дату с помощью следующей команды |
| `<CTRL-r>=`{normal}`system('date')`{vim} `<ENTER>`{normal} |
| |
| Примечание. |
| Результат вызова функции `system()`{vim} зависит от текущей операционной |
| системы, например, в ОС Windows необходимо использовать такую команду |
| `system('date /t')`{vim} или `:r!date /t`{vim} |
| |
| Правильно ли я помню, что в сутках 84600 секунд? |
| Сегодняшняя дата |
| |
| Примечание. |
| Тот же результат можно получить с помощью такой команды |
| `:pu=`{normal}`system('date')`{vim} или более короткой команды `:r!date`{vim} |
| |
| Разделы документации: |
| [регистр результата вычислений](quote=) |
| |
| |
| # Урок 2.1.3. НУМЕРОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim |
| |
| ** Как команды `yy`{normal} и `dd`{normal} влияют на содержимое регистров ** |
| |
| 1. Переместите каретку к строке помеченной ✓ |
| |
| 2. Скопируйте эту строку и проверьте состояние регистров с помощью команды |
| `:reg`{vim} `<ENTER>`{normal} |
| |
| 3. Удалите строку, начинающуюся с цифры 0, с помощью команды `"cdd`{normal} |
| и ещё раз проверьте состояние регистров (где будет строка, начинающаяся |
| с цифры 0?) |
| |
| 4. Продолжайте удалять все последующие нумерованные строки, проверяя состояние |
| регистров после каждой операции. |
| |
| **Примечание.** |
| В ходе этих действий вы заметите, что ранее удалённые строки смещаются вниз |
| по мере того, как новые удалённые строки добавляются в перечень регистров. |
| |
| 5. Теперь вставьте содержимое регистров в следующем порядке: c, 7, 4, 8, 2. |
| То есть наберите команды `"cp`{normal}, `"7p`{normal} и так далее. |
| |
| 0. Здесь |
| 9. шататься |
| 8. секретное |
| 7. будет |
| 6. на |
| 5. шесте |
| 4. это |
| 3. войны |
| 2. послание |
| 1. наградой |
| |
| |
| **Примечание.** |
| Целые строки, удалённые по команде `dd`{normal}, дольше сохраняются |
| в нумерованных регистрах, чем строки, которые были скопированы или когда |
| с оператором удаления указывается объект текста для перемещения каретки. |
| |
| Разделы документации: |
| [нумерованные регистры](quote_number) |
| |
| |
| # Урок 2.1.4. ИЗЯЩЕСТВО ЗАКЛАДОК |
| |
| ** Избегайте действий, свойственных для дятлокодеров ** |
| |
| **Примечание.** |
| При написании программ часто возникает необходимость перемещения больших |
| фрагментов кода. Приём, приведённый далее, поможет избежать подсчёта номеров |
| строк, требуемых для операций вроде `"a147d`{normal} или `:945,1091d a`{vim}, |
| или даже хуже — `i<CTRL-r>=1091-935<ENTER>`{normal}, как первое действие. |
| |
| 1. Переместите каретку к строке помеченной ✓ |
| |
| 2. Установите каретку на следующую строку, где начинается описание функции, |
| и поставьте закладку, воспользовавшись командой `ma`{normal} |
| |
| **Примечание.** |
| Неважно где будет находиться каретка в этой строке. |
| |
| 3. С помощью следующей команды `$%`{normal} установите каретку на последний |
| символ в этой строке с последующим перемещением на окончание блока кода |
| |
| 4. Удалите весь это блок кода в регистр с названием «a» с помощью команды |
| `"ad'a`{normal} |
| |
| Эта команда означает следующее: |
| *в регистр(") с названием (a) поместить удалённые строки от позиции каретки |
| до строки, в которой установлена закладка(') с названием (a)* |
| |
| 5. Вставьте удалённый блок между символами BBB и CCC с помощь команды |
| `"ap`{normal} |
| |
| ~~~ cmd |
| AAA |
| function itGotRealBigRealFast() { |
| if ( somethingIsTrue ) { |
| doIt() |
| } |
| // таксономия нашей функции изменилась, и её текущее положение больше |
| // не имеет привязки к алфавитному порядку |
| |
| // а теперь представьте, что здесь сотни строк кода |
| |
| // было бы глупо искать начальную и конечную строку этого блока кода, |
| // чтобы записывать или запоминать номер строки для каждой из них |
| } |
| BBB |
| CCC |
| ~~~ |
| |
| **Примечание.** |
| Пространство именования закладок и регистров не пересекаются между собой, |
| поэтому регистр «a» полностью независим от закладки с таким же названием «a». |
| Это правило не распространяется на регистры и макросы. |
| |
| Разделы документации: |
| [закладки](marks) |
| [перемещение к закладкам](mark-motions) (различие между \` и ') |
| |
| |
| # РЕЗЮМЕ УРОКА 2.1 |
| |
| 1. Чтобы сохранить (при удалении или копировании) текст для последующей |
| вставки, используйте имеющиеся 26 именованных регистра (a-z). |
| 2. Чтобы скопировать целое слово при нахождении каретки на любом символе |
| в этом слове, воспользуйтесь командой `yiw`{normal} |
| 3. Чтобы изменить целое слово при нахождении каретки на любом символе в этом |
| слове, воспользуйтесь командой `ciw`{normal} |
| 4. Чтобы в режиме вставки вставить текст непосредственно из регистра, |
| воспользуйтесь командой `<CTRL-r>a`{normal} |
| |
| 5. Чтобы в режиме вставки вставить результат вычисления простых математических |
| операций, воспользуйтесь командой `<CTRL-r>=60*60`{normal} `<ENTER>`{normal} |
| 6. Чтобы в режиме вставки вставить результат выполнения команд системы, |
| воспользуйтесь командой `<CTRL-r>=`{normal}`system('ls -l')`{vim} |
| |
| 7. Чтобы просмотреть содержимое регистров, воспользуйтесь командой `:reg`{vim} |
| 8. Учитывайте распределение удалённых целиком строк по команде `dd`{normal} — |
| это нумерованные регистры в порядке убывания, т. е. от 1 до 9. |
| Помните, что в нумерованных регистрах дольше хранятся те строки, которые |
| были уделены целиком, в отличие от любых других операций |
| 9. Учитывайте, что в нумерованных регистрах кратковременно сохраняется всё |
| что скопировано. |
| |
| 10. Чтобы установить закладку в режиме команд, воспользуйтесь командой |
| `m[a-zA-Z0-9]`{normal} |
| 11. Чтобы переместить каретку на строку в которой установлена закладка, |
| воспользуйтесь командой `'`{normal} |
| |
| |
| # ЗАКЛЮЧЕНИЕ |
| |
| На этом пока заканчивается вторая глава учебника по редактору Vim. |
| Работа над этой главой будет продолжена. |
| |
| Вторая глава учебника была написана Полом Д. Паркером (Paul D. Parker). |
| |
| Restorer, перевод на русский язык, 2025, restorer@mail2k.ru |