Всем известно, что редактор vi встроен в систему по умолчанию. Но новичок не может сразу в нем разобраться, поэтому и написана эта статья.
1. Режимы работы редактора
Ввод текста
В этом режиме все, что набирается на клавиатуре отображается на экране терминала и запоминается в буфере редактора.
Отсутствует возможность осуществлять операции редактирования текста, за исключением операции удаления последнего набранного символа (при помощи комбинации клавиш < Control-H >).
Командный режим
В этом режиме нажатие клавиш выполняет специальные функции (перемещение курсора, удаление частей текста, и т. п.), то есть функции редактирования.
Набираемые команды НЕ ОТОБРАЖАЮТСЯ НА ЭКРАНЕ!
Режим командной строки
Режим командной строки позволяет производить более глобальные операции с текстом: записывать отредактированный текст в файл, считывать новый файл, выходить из vi, производить настройку редатора, поиск по шаблону и выполнять некоторые функции редактирования.
Вводимые команды отображаются в нижней части экрана (в «командной» строке редактора).
2. Ввод текста
< Return > — создает пустую строку и переводит курсор в ее начало.
< Control-H > — уничтожает последний введенный символ (это действие не отображается на экране до выхода в командный режим).
< Control-[ > или клавиша < Esc > — переводят редактор в командный режим.
В режиме ввода текста стрелочная клавиатура НЕ РАБОТАЕТ!
3. Команды
i — переход к редактированию в режиме вставки перед текущим символом;
a — переход к редактированию в режиме вставки за текущим символом;
R — переход к редактированию текста в режиме замены;
Перемещение курсора
h,j,k,l — на один символ (одну строку) влево, вниз, вверх и вправо соответственно;
0 — в начало текущей строки;
$ — в конец текущей строки;
^ — в начало текущей строки (игнорируя символы скобок);
+ — в начало следущей строки;
— — в начало предыдущей строки;
< n > — на n-й символ текущей строки;
H — на верхнюю строку экрана;
M — на центральную строку экрана;
L — напоследнюю строку экрана;
< n > H — на n-ю строку экрана, считая от верхней строки;
< n > L — на n-ю строку экрана, считая от нижней строки;
w — на слово вправо;
b — на слово влево;
) — в начало следующего предложения;
( — в начало предыдущего предложения;
} — в начало следующего параграфа (параграф — это блок текста, отделяемый пустой строкой);
{ — в начало предыдущего параграфа;
[[ — в начало текста;
]] — в конец текста;
Кнопки стрелочной клавиатуры также позволяют перемещаться по тексту;
Редактирование
dd — стирание текущей строки;
d + команда перемещения курсора — удаление текста от текущего положения курсора до нового, задаваемого символом перемещения курсора (Нажатие кнопок стрелочной клавиатуры НЕ ЯВЛЯЕТСЯ командой перемещения курсора и не может использоваться в комбинированных командах);
J — слияние текущей строки со следующей;
u — отмена последней команды
. — повтор последней команды
: — переход в режим командной строки
4. Командная строка
:q или :q! — выход из редактора без сохранения изменений
: x — выход из редактора с записью, если файл был модифицирован
:w или w filename или w! filename — запись файла и возвращение в командный режим
:e filename или :e! filename — загрузка файла filename
:r filename — добавить содержимое указанного файла к редактируемому сразу за текущей строкой
:set nu — включить нумерацию строк
:set nonu — отключить нумерацию строк
:!command — выполнить команду UNIX не покидая редактора
:/word — выполнить поиск слова word в тексте
:/ — повторить поиск слова word далее по тексту
5 Блоки, буферы, окна редактирования. Повторители
Повторители
Командам и движениям курсора можно давать повторители (числа), например
2w — передвинуть курсор на два слова вперед
10l — передвинуть курсор на десять символов вправо
d10l — стереть десять символов справа от курсора
2d10l — стереть двадцать символов справа от курсора
5J — слить пять последующих строк в одну
4. — повторить последнюю введенную команду четыре раза
Буферы vi
Редактор имеет три типа буферов: буфер стирания (0-9), неименованный буфер и именованные буферы (a-z).
В буферы стирания автоматически заносятся стираемые элементы. В буфере 0 хранится последний стертый элемент, в буфере 1 — предпоследний и т. д.
Занести в буфер:
yy — занести текущую строку в неименованный буфер yдвижение курсора — занести указанный движением курсора блок текста в не именованный буфер.
«ayy — занести текущую строку в именованный буфер a
«Ayy — добавить текущую строку к содержимому именованного буфера a
«by10j — занести последующие 10 строк в именованный буфер b
Вставить из буфера:
p — вставить в текущую позицию содержимое неименованного буфера
«ap — вставить в текущую позицию содержимое именованного буфера a
«1p — вставить в текущую позицию содержимое буфера стирания 1
Многооконное редактирование
Редактировать сразу несколько файлов можно либо пользуясь командной редактора :e filename, либо указав все необходимые файлы в командной строке при вызове редактора (например: vi file1 file2 file3). В последнем случае вы двигаетесь по списку файлов с помощью команд:
:n — переходим к следующему файлу в списке
:rew — возвращаемся к редактированию первого файла в списке
Именованные буферы сохраняют свое содержимое при переходе к редактированию другого файла.