===============================================================================
версия 1.7      =  ДОБРО  ПОЖАЛОВАТЬ  НА  ЗАНЯТИЯ  ПО  РЕДАКТОРУ  Vim  =
===============================================================================
=				ГЛАВА  ВТОРАЯ				      =
===============================================================================

  Что‐то неожиданное и непонятное?
  Если это ваше первое знакомство с редактором Vim и вы планировали начать
  с вводной главы учебника, не расстраивайтесь и сделайте вот что.
  Наберите на клавиатуре команду  :q! , нажмите клавишу <ENTER>, и попробуйте
  ещё раз, набрав в командной оболочке такую команду
      vimtutor --chapter 1 ru

  Приблизительное время, необходимое для изучения второй главы учебника,
  составляет около 8–10 минут, и зависит от того, сколько времени вы посвятите
  выполнению заданий.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

		    Урок 2.1.1. ОСВОЕНИЕ ТЕКСТОВЫХ ОБЪЕКТОВ

** Точечные операции с логическими частями текста используя текстовые объекты **

  1. Попрактикуйтесь в аккуратной работе со словами:
     - Поместите каретку на любое слово в строке помеченной --->
     - Наберите  diw , чтобы удалить ТОЛЬКО слово (слово без окружающих пробелов)
     - Наберите  daw , чтобы удалить СЛОВО (включая конечные пробелы)
     - Попробуйте другие операторы:  ciw  (изменить),  yiw  (копировать),
	gqiw  (форматировать)

---> Потренируйтесь здесь на словах: «Vim'овский», (text_object) и 'мощный'.

  2. Работа с содержимым скобок:
     - Поместите каретку внутри любой пары () {} [] <> в строке помеченной --->
     - Наберите  di(  или  dib  (удалить всё, что внутри круглых скобок)
     - Наберите  da(  или  dab  (удалить внутри круглых скобок и сами скобки)
     - Попробуйте то же самое с  i"  и  a"  для машинописных кавычек или
	it  и  at  для тегов HTML и XML.

---> Примеры: {фигурные}, [прямоугольные], <угловые>, (круглые) и "quoted".

  3. Операции с абзацами и предложениями:
     - Наберите  dip  для удаления ТОЛЬКО абзаца
	(каретка может быть в любом месте абзаца)
     - Наберите  vap  для визуального выделения всего абзаца
     - Попробуйте  das  для удаления предложения
	(работает при наличии знаков препинания .!? )

  4. Расширенные комбинации:
     - ciwnew<ESC>  — изменить текущее слово на «new»
     - ciw"<CTRL-R>-"<ESC> — обернуть всю строку в кавычки
     - gUit         — преобразовать внутреннее содержимое HTML-тега в верхний
			регистр
     - va"p         — выделить текст в кавычках и вставить поверх него

---> Итоговое задание: (Измените "этот" текст) [применив {различные} операции]<

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

		 Урок 2.1.2. ИМЕНОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim

** Копирование с сохранением двух разных слов и последующая их вставка в текст **

  1. Переместите каретку к строке помеченной --->

  2. Установите каретку на любом символе слова «Эдуард» и наберите команду
     "ayiw

Эта команда означает следующее:
    в регистр(") с названием(a) скопировать(y) только(i) слово(w)

  3. Сдвиньте каретку вперёд на слово «печенье» (это можно сделать одним из
     следующих способов: fп или 3fч, или $, или /пе <ENTER>) и наберите команду
     "byiw

  4. Переместите каретку на любой символ слова «Виктор» и наберите на клавиатуре
     ciw<CTRL-R>a<ESC>

Эта команда означает следующее:
    изменить(c) только(i) слово(w) на <содержимое регистра(r)> с названием(a)

  5. Установите каретку на любой символ слова «тортов» и наберите
     ciw<CTRL-R>b<ESC>

--->  а) Отныне Эдуард будет отвечать за раздачу печенья
      б) Таким образом Виктор имеет единоличные права по распределению тортов

Примечание.
    Регистры можно использовать также и для вырезания текста, например,
    по команде  "sdiw  будет выполнено удаление слова под кареткой в регистр
    с названием «s».

Разделы документации:
	регистры		:h registers
	именованные регистры	:h quote_alpha
	перемещение		:h text-objects
	CTRL-R			:h i_CTRL-R

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

		   Урок 2.1.3. РЕГИСТР РЕЗУЛЬТАТА ВЫЧИСЛЕНИЙ

	      ** Вставка результатов вычислений напрямую в текст **

  1. Переместите каретку к строке помеченной --->

  2. Установите каретку на любой цифре приведённого числа

  3. Наберите на клавиатуре  ciw<CTRL-R>=60*60*24<ENTER>

  4. Переместите каретку в конец следующей строки, переключите редактор в режим
     вставки, и добавьте сегодняшнюю дату с помощью следующей команды
     <CTRL-R>=system('date')<ENTER>

Примечание.
    Результат вызова функции system() зависит от текущей операционной системы,
    например, в ОС Windows необходимо использовать такую команду
    system('date /t')    или    :r!date /t

---> Правильно ли я помню, что в сутках 84600 секунд?
     Сегодняшняя дата 

Примечание.
    Тот же результат можно получить с помощью такой команды  :pu=system('date')
    или более короткой команды  :r!date

Разделы документации:
	регистр результата вычислений	:h quote=

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

	       Урок 2.1.4. НУМЕРОВАННЫЕ РЕГИСТРЫ В РЕДАКТОРЕ Vim

	  ** Как команды  yy  и  dd  влияют на содержимое регистров **

  1. Переместите каретку к строке помеченной --->

  2. Скопируйте эту строку и проверьте состояние регистров с помощью команды
     :reg<ENTER>

  3. Удалите строку, начинающуюся с цифры 0, с помощью команды  "cdd  и ещё раз
     проверьте состояние регистров (где будет строка, начинающаяся с цифры 0?)

  4. Продолжайте удалять все последующие нумерованные строки, проверяя состояние
     регистров после каждой операции.

Примечание.
    В ходе этих действий вы заметите, что ранее удалённые строки смещаются вниз
    по мере того, как новые удалённые строки добавляются в перечень регистров.

  5. Теперь вставьте содержимое регистров в следующем порядке: c, 7, 4, 8, 2.
     То есть наберите команды  "cp , "7p  и так далее.

---> 0. Здесь
     9. шататься
     8. секретное
     7. будет
     6. на
     5. шесте
     4. это
     3. войны
     2. послание
     1. наградой

Примечание.
    Целые строки, удалённые по команде  dd  , дольше сохраняются в нумерованных
    регистрах, чем строки, которые были скопированы или когда с оператором
    удаления указывается объект текста для перемещения каретки.

Разделы документации:
	нумерованные регистры		:h quote_number

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

			Урок 2.1.5. СПЕЦИАЛЬНЫЕ РЕГИСТРЫ

** Применение регистров буфера обмена и «чёрная дыра» для расширенной правки **

 Примечание.
    Для использования системного буфера обмена в системе Linux требуются
    библиотеки X11 или Wayland, и сам редактор Vim должен быть скомпилирован
    с включённым компонентом «+clipboard» (обычно это максимальная версия).
    Это можно проверить с помощью следующих команд редактора Vim:
    :version
    и
    :echo has('clipboard_working')

  1. Регистры буфера обмена  +  и  *  :
     - "+y  — копирование в системный буфер обмена
	(например, по команде  "+yy  будет скопирована текущая строка)
     - "+p  — вставка из системного буфера обмена
     - "*   — основной выбор в X11 (средняя кнопка «мыши»), а "+ — буфер обмена

---> "+yy в этой строке, затем вставьте в другое приложение по Ctrl+V или Cmd+V

  2. Регистр «чёрная дыра»  _  стирает текст:
     - "_daw  — сотрёт слово без сохранения в регистре
     - Полезно, когда вы не хотите перезаписывать регистр по умолчанию "
     - Обратите внимание, что здесь используется текстовый объект «a Word»,
       описанный в предыдущем уроке
     - "_dd   — сотрёт строку без сохранения
     - "_dap  — сотрёт абзац без сохранения
     - Комбинируйте со счётчиками: 3"_dw

---> "_diw на любом слове, чтобы удалить его, не затрагивая историю копирования

  3. Совместите с визуальным выделением:
   - Выделите текст с помощью <SHIFT-V>, a затем "+y
   - Чтобы вставить из буфера обмена в режиме вставки — <CTRL-R> +
   - Попробуйте открыть другое приложение и вставить из системного буфера обмена

  4. Запомните:
   - Регистры буфера обмена доступны между разными экземплярами редактора Vim
   - Регистр буфера обмена не всегда работает
   - Регистр «чёрная дыра» предотвращает случайную перезапись других регистров
   - Регистр по умолчанию " по-прежнему доступен для копирования и вставки
   - Именованные регистры (a-z) остаются частными для каждой сессии Vim

  5. Устранение неполадок с буфером обмена:
     - Проверьте доступность с помощью команды :echo has('clipboard_working')
     - При выводе 1 — означает доступно, 0 — означает, что компонент не включен
     - В системе Linux может потребоваться пакет vim-gtk или vim-x11
       (посмотрите вывод команды :version)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

			 Урок 2.1.6. ИЗЯЩЕСТВО ЗАКЛАДОК

	       ** Избегайте действий, свойственных для дятлокодеров **

Примечание.
    При написании программ часто возникает необходимость перемещения больших
    фрагментов кода. Приём, приведённый далее, поможет избежать подсчёта номеров
    строк, требуемых для операций вроде  "a147d  или  :945,1091d a  , или даже
    хуже — i<CTRL-R>=1091-935<ENTER> , как первое действие.

  1. Переместите каретку к строке помеченной --->

  2. Установите каретку на следующую строку, где начинается описание функции,
     и поставьте закладку, воспользовавшись командой  ma

Примечание.
    Неважно где будет находиться каретка в этой строке.

  3. С помощью следующей команды  $%  установите каретку на последний символ
     в этой строке с последующим перемещением на окончание блока кода

  4. Удалите весь это блок кода в регистр с названием «a» с помощью команды
     "ad'a

Эта команда означает следующее:
    в регистр(") с названием (a) поместить удалённые строки от позиции каретки
    до строки, в которой установлена закладка(') с названием (a)

  5. Вставьте удалённый блок между символами BBB и CCC с помощь команды
     "ap

---> AAA
     function itGotRealBigRealFast() {
       if ( somethingIsTrue ) {
         doIt()
       }
       // таксономия нашей функции изменилась, и её текущее положение больше
       // не имеет привязки к алфавитному порядку

       // а теперь представьте, что здесь сотни строк кода

       // было бы глупо искать начальную и конечную строку этого блока кода,
       // чтобы записывать или запоминать номер строки для каждой из них
     }
     BBB
     CCC

Примечание.
    Пространство именования закладок и регистров не пересекаются между собой,
    поэтому регистр «a» полностью независим от закладки с таким же названием «a».
    Это правило не распространяется на регистры и макросы.

Разделы документации:
	закладки			:h marks
	перемещение к закладкам		:h mark-motions  (различие между ` и ')

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

				Резюме урока 2.1

  1. Текстовые объекты обеспечивают точное редактирование:
     - iw или aw — только или включая слово
     - i[ или a[ — внутри или включая скобки
     - i" или a" — внутри или включая кавычки
     - it или at — внутри или включая теги
     - ip или ap — только или включая абзаца
     - is или as — только или включая предложения

  2. Чтобы сохранить (при удалении или копировании) текст для последующей
     вставки, используйте имеющиеся 26 именованных регистра (a-z).
  3. Чтобы скопировать целое слово при нахождении каретки на любом символе
     в этом слове, воспользуйтесь командой  yiw
  4. Чтобы изменить целое слово при нахождении каретки на любом символе в этом
     слове, воспользуйтесь командой  ciw
  5. Чтобы в режиме вставки вставить текст непосредственно из регистра,
     воспользуйтесь командой  <CTRL-R>a

  6. Чтобы в режиме вставки вставить результат вычисления простых математических
     операций, воспользуйтесь командой  <CTRL-R>=60*60<ENTER>
  7. Чтобы в режиме вставки вставить результат выполнения команд системы,
     воспользуйтесь командой  <CTRL-R>=system('ls -l')<ENTER>

  8. Чтобы просмотреть содержимое регистров, воспользуйтесь командой  :reg
  9. Учитывайте распределение удалённых целиком строк по команде  dd  — это
     нумерованные регистры в порядке убывания, т. е. от 1 до 9.
     Помните, что в нумерованных регистрах дольше хранятся те строки, которые
     были удалены целиком, в отличие от любых других операций
 10. Учитывайте, что в нумерованных регистрах кратковременно сохраняется всё
     что скопировано.

 11. Чтобы установить закладку в режиме команд, воспользуйтесь командой
     m[a-zA-Z0-9]
 12. Чтобы переместить каретку на строку в которой установлена закладка,
     воспользуйтесь командой  '

 13. Специальные регистры:
     - "+ и "* — системный буфер обмена (зависит от ОС)
     - "_      — «чёрная дыра» (стирание удалённого или скопированного текста)
     - "=      — регистр результата вычислений
     - "-      — регистр малых удалений

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  На этом пока заканчивается вторая глава учебника по редактору Vim.
  Работа над этой главой будет продолжена.

  Вторая глава учебника была написана Полом Д. Паркером (Paul D. Parker)
				    и Кристианом Брабандт (Christian Brabandt).

    Restorer, перевод на русский язык, 2025, restorer@mail2k.ru

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
