#		ДОБРО  ПОЖАЛОВАТЬ  НА  ЗАНЯТИЯ  ПО  РЕДАКТОРУ  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
