Редактор vi

Крутиков М.П.

Коррекция от 19 июня 1998 г. (Малашонок Д.Ю.)



Полноэкранный редактор vi

Редактор 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 - переход к редактированию текста в режиме замены;

Перемещение курсора

h,j,k,l - на один символ (одну строку) влево, вниз, вверх и вправо соответственно;

0 - в начало текущей строки;

$ - в конец текущей строки;

^ - в начало текущей строки (игнорируя символы скобок);

+ - в начало следущей строки;

- - в начало предыдущей строки;

< n > - на n-й символ текущей строки;

H - на верхнюю строку экрана;

M - на центральную строку экрана;

M - напоследнюю строку экрана;

< 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 - возвращаемся к редактированию первого файла в списке

Именованные буферы сохраняют свое содержимое при переходе к редактированию другого файла.


The file was converted from TeX source by FunnyTeX utility by Mike Krutikov