Редактор vi Печать
Статьи - Прочее

Редактор vi


Полноэкранный редактор 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 - переход в режим набора текста методом набивки.

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


< 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 file1 file2 file3). В последнем случае вы двигаетесь по списку файлов с помощью команд:

:n - переходим к следующему файлу в списке

:rew - возвращаемся к редактированию первого файла в списке

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