Полноэкранный редактор vi
Редактор vi - универсальный полноэкранный текстовый редактор в среде UNIX. Универсальность означает, что, во-первых, этот редактор есть во всех UNIX-подобных ОС и, во-вторых, этот редактор работает с практически любым видом терминала (ANSI, VT100, VT220, VT320, DEC, и т. д.). (База данных, содержащая описание известных системе терминалов находится в файле /etc/termcap.) Эта универсальность обернулась несколько непривычным (для пользователей DOS) пользовательским интерфейсом: для управления редактором используются лишь ``обычные'' кнопки клавиатуры (алфавитно-цифровые символы и знаки препинания).
Имеющиеся на многих типах терминалов функциональные клавиши практически не используются. Если клавиатура терминала имеет стрелочные клавиши, то они используются, но, как будет видно ниже, в ограниченном контексте.
Режимы работы редактора
Ввод текста
В этом режиме все, что набирается на клавиатуре и отображается на экране терминала и запоминается в буфере редактора.
Нет возможности осуществлять операции редактирования текста, за исключением стирания последнего набранного символа (с помощью комбинации клавиш < Control-H> ).
Командный режим
В этом режиме символы клавиатуры выполняют специальные функции (перемещение курсора, стирание частей текста, и т. д.), то есть функции редактирования.
Набираемые команды НЕ ОТОБРАЖАЮТСЯ НА ЭКРАНЕ!
Режим командной строки
Режим командной строки позволяет производить более глобальные операции с текстом: записывать отредактированный текст в файл, считывать новый файл, выходить из vi, производить настройку редактора, поиск по шаблону, а также осуществлять некоторые функции редактирования.
Команды отображаются в нижней части экрана (в ``командной'' строке редактора).
Ввод текста
< Return> - создает пустую строку и переводит курсор в ее начало.
< Control-H> - уничтожает последний введенный символ (это действие не отображается на экране до выхода в командный режим).
< Control-[> или клавиша < Esc> - переводят редактор в командный режим.
В режиме ввода текста стрелочная клавиатура НЕ РАБОТАЕТ!
Команды
i - переход в режим набора методом вставки перед текущим символом
a - переход в режим набора методом вставки за текущим символом
R - переход в режим набора текста методом набивки.
Перемещение курсора
< Drawing or tabular insertion skipped...>
h,j,k,l - на один символ (одну строку), как показано стрелками
^ или 0 - в начало текущей строки
$ - в конец текущей строки
w - на слово вправо
b - на слово влево
} - на параграф вперед (параграф - это блок текста, отделенный пустой строкой)
{ - на параграф назад
[[ - в начало текста
]] - в конец текста
Кнопки стрелочной клавиатуры также позволяют перемещаться по тексту.
Редактирование
dd - стирание текущей строки
d - движение курсора - стирание от текущего положения курсора до нового, задаваемого символом перемещения курсора. (Нажатие кнопок стрелочной клавиатуры НЕ ЯВЛЯЕТСЯ движением курсора и не может использоваться в комбинированных командах.)
J - слияние текущей строки со следующей
u - отмена последней команды
.- повтор последней команды
:- переход в режим командной строки
Командная строка
:q или :q! - выход из редактора без сохранения изменений
:x - выход из редактора с записью, если файл был модифицирован
:w или w filename или w! filename - запись файла и возвращение в командный режим
:e filename или :e! filename - загрузка файла filename
:r filename - добавить содержимое указанного файла к редактируемому сразу за текущей строкой
:set nu - включить нумерацию строк
:set nonu - отключить нумерацию строк
:!command - выполнить команду UNIX не покидая редактора
:/word - выполнить поиск слова word в тексте
:/ - повторить поиск слова word далее по тексту
Блоки, буферы, окна редактирования.
Повторители
Командам и движениям курсора можно давать повторители (числа), например
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