mirror of
https://github.com/vim/vim.git
synced 2025-07-04 23:07:33 -04:00
232 lines
13 KiB
Plaintext
232 lines
13 KiB
Plaintext
|
# ДОБРО ПОЖАЛОВАТЬ НА ЗАНЯТИЯ ПО РЕДАКТОРУ 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
|