16.2. Режимы

vi работает в различных режимах, которые используются для выполнения различных задач. При первом запуске vi вы попадаете в командный режим. В нём вы можете выполнять различные команды для работы с текстом, перемещения по файлу, сохранения, выхода и изменения режимов. Редактирование текста выполняется в режиме вставки. Вы можете быстро переключаться между режимами с помощью разнообразных комбинаций клавиш, описанных ниже.

16.2.1. Командный режим

Сначала вы попадаете в командный режим. В этом режиме вы не можете вводить текст или редактировать уже существующий. Однако вы можете манипулировать текстом, выполнять поиск, выходить, сохранять, загружать новые файлы и др. Данную информацию следует рассматривать только как знакомство с командным режимом. Описания различных команд смотрите в Разд. 16.7.

Наверное самой часто используемой командой в командном режиме является переключение в режим вставки. Оно осуществляется нажатием на клавишу i. Курсор изменяет свой вид, а в нижней части экрана появляется надпись -- INSERT -- (или -- ВСТАВКА --) (учтите, что это не происходит во всех клонах vi). Теперь все ваши нажатия на клавиатуре будут вставляться в текущий буфер и отображаться на экране. Чтобы вернуться назад в командный режим, нажмите клавишу ESCAPE.

Командный режим также позволяет вам перемещаться по файлу. В некоторых системах вы можете использовать для этого клавиши со стрелками. В других системах вам может потребоваться использовать более традиционные клавиши: “hjkl”. Вот перечень этих клавиш и их использование для перемещения:

h перемещение влево на один символ
j перемещение вниз на один символ
k перемещение вверх на один символ
l перемещение вправо на один символ

Чтобы переместиться, просто нажмите клавишу. Как вы позже увидите, эти клавиши можно комбинировать с числами, чтобы использовать их более эффективно.

Многие из команд, которые вы увидите в командном режиме, начинаются с двоеточия. Например, выход - это :q, как уже упоминалось выше. Двоеточие означает, что это команда, а “q” говорит vi выйти. Другие команды представляют собой необязательные числа, следующие после буквы. Эти команды не содержат в начале двоеточия и используются в основном для работы с текстом.

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

Вы можете комбинировать числа с клавишами перемещения, чтобы переместиться за один раз на нужное количество символов. Например, 10k выполнит перемещение вверх на десять строк.

Командный режим можно также использовать для вырезания и вставки текста и считывания других файлов в текущий буфер. Копирование текста выполняется с помощью клавиши y (y означает yank - резкий рывок). Копирование текущей строки выполняется командой yy, а перед ней может следовать число для копирования большего количества строк. Затем переместите курсор в нужное место и нажмите p. Текст будет вставлен в строку сразу после текущей.

Вырезание текста выполняется командой dd, а p можно использовать для вставки вырезанного текста назад в файл. Прочитать текст из другого файла также является простой процедурой. Просто наберите :r, и через пробел добавьте имя файла, содержащего текст для вставки. Содержимое файла будет вставлено в текущий буфер в строку после курсора. Более сложные клоны vi даже обладают возможностью автозавершения имён файлов как в командном процессоре.

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

Простой поиск выполняется нажатием на клавишу /, после чего вводится искомый вами текст. vi будет искать его от текущего положения курсора до конца файла, остановившись на первом найденном совпадении. Учтите, что неполные совпадения также вызовут остановку поиска. Например, поиск слова “the” приведёт к остановке на словах “then”, “therefore” и т.д. Это происходит вследствие того, что все эти слова содержат “the”.

После того, как vi найдёт первое совпадение, вы можете продолжить поиск до следующего совпадения, нажав на клавишу / и Enter. Вы также можете выполнять поиск по файлу в обратном направлении, заменив слэш на ?. Например, поиск по файлу в обратном направлении слова “the” выполняется с помощью команды ?the.

16.2.2. Режим вставки

Вставка и замена текста выполняется в режиме вставки. Как уже упоминалось выше, чтобы перейти в этот режим, надо в командном режиме нажать клавишу i. После этого весь набираемый вами текст будет вставляться в текущий буфер. Нажатие на клавишу ESCAPE вернёт вас назад в командный режим.

Замена текста осуществляется несколькими способами. В командном режиме нажатие на r позволит вам заменить один символ под курсором. Просто введите новый символ и он заменит тот, что находится под курсором. Затем вы снова будет возвращены в назад в командный режим. Нажатие на клавишу R позволит вам заменить любое количество символов. Чтобы выйти из этого режима и вернуться в командный режим, просто нажмите ESCAPE.

Существует ещё один способ для переключения между режимами вставки и замены. Нажатие на клавишу INSERT в командном режиме переведёт вас в режим вставки. При работе в этом режиме клавиша INSERT служит переключателем между режимами вставки и замены. Нажатие на неё один раз позволит вам заменять текст. Ещё одно нажатие вернёт вас назад в режим вставки.