Редактор vi- универсальный полноэкранный текстовый редактор в среде UNIX. Универсальность означает, что, во-первых, этот редактор есть во всех UNIX-подобных ОС и, во-вторых, этот редактор работает с практически любым видом терминала (ANSI, VT100, VT220, VT320, DEC, и т. д.).(База данных, содержащая описание известных системе терминалов находится в файле /etc/termcap.) Эта универсальность обернулась несколько непривычным (для пользователей DOS) пользовательским интерфейсом: для управления редактором используются лишь ``обычные'' кнопки клавиатуры (алфавитно-цифровые символы и знаки препинания).
Имеющиеся на многих типах терминалов функциональные клавиши практически не используются. Если клавиатура терминала имеет стрелочные клавиши, то они используются, но, как будет видно ниже, в ограниченном контексте.
1 Режимы работы редактора
Ввод текста
В этом режиме все, что набирается на клавиатуре отображается на экране терминала и запоминается в буфере редактора.
Нет возможности осуществлять операции редактирования текста, за исключением стирания последнего набранного символа (с помощью комбинации клавиш < Control-H> ).
Командный режим
В этом режиме символы клавиатуры выполняют специальные функции (перемещение курсора, стирание частей текста, и т. д.), то есть функции редактирования.
Набираемые команды НЕ ОТОБРАЖАЮТСЯ НА ЭКРАНЕ!
Режим командной строки
Режим командной строки позволяет производить более глобальные операции с текстом: записывать отредактированный текст в файл, считывать новый файл, выходить из vi, производить настройку редактора, поиск по шаблону, а также осуществлять некоторые функции редактирования.
Команды отображаются в нижней части экрана (в ``командной'' строке редактора).
2 Ввод текста
< Return> - создает пустую строку и переводит курсор в ее начало.
< Control-H> - уничтожает последний введенный символ (это действие не отображается на экране до выхода в командный режим).
< Control-[> или клавиша < Esc> - переводят редактор в командный режим.
В режиме ввода текста стрелочная клавиатура НЕ РАБОТАЕТ!
3 Команды
i- переход в режим набора методом вставки перед текущим символом
a- переход в режим набора методом вставки за текущим символом
R- переход в режим набора текста методом набивки.
Перемещение курсора
< Drawing or tabular insertion skipped...>
h,j,k,l- на один символ (одну строку), как показано стрелками
^или 0- в начало текущей строки
$- в конец текущей строки
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 file1file2 file3). В последнем случае вы двигаетесь по списку файлов с помощью команд:
:n- переходим к следующему файлу в списке
:rew- возвращаемся к редактированию первого файла в списке
Именованные буферы сохраняют свое содержимое при переходе к редактированию другого файла.