Редактор 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. - повторить последнюю введенную команду четыре раза
Редактор имеет три типа буферов: буфер стирания (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 - возвращаемся к редактированию первого файла в списке
Именованные буферы сохраняют свое содержимое при переходе к редактированию другого файла.