Введение в UNIX
Дегтярев Е.К.
Оглавление
12. Средства редактора EX, дополняющие возможности редактора VI
Как уже говорилось, редактор vi тесно связан с редактором
ex, являясь по сути одним из режимов работы последнего. Поэ-
тому ряд мощных команд, реализованных в ex, можно и полезно
выполнять и из редактора vi.
В начало страницы
Для выхода из vi в ex надо нажать клавишу (esc) для пере-
хода в командный режим, если вы были в режиме текста, а за-
тем нажать клавишу [:] (двоеточие). Будет напечатана подс-
казка редактора ex - двоеточие, приглашающая вводить команды
редактора ex.
В начало страницы
Поскольку ex - строчный редактор, вводится понятие номера
строки и понятие текущей строки. Все строки текста занумеро-
ваны натуральными числами, начиная с единицы. Знак $ (дол-
лар) означает номер последней строки текста.
Просмотр части текста на экране выполняется командой,
состоящей из одного (для просмотра одной строки) или пары
номеров - номера первой и номера последней строки части
текста и символа P (print), который по умолчанию может быть
опущен.
Например:
: 1,5p
program (input, output)
......
......
:
или просто :1,5
Для просмотра всего текста надо ввести:
: 1, $
Чтобы напечатать строки вместе с их номерами, надо в кон-
це команды просмотра поставить знак # (диез), например:
: 6, $#
6 include
7 .......
8 .......
.........
Следует помнить, что нумерация строк относительна. При
удалении одной строки все строки перенумеруются. После вы-
полнения команды просмотра текущей строкой становится пос-
ледняя просмотренная строка.
В начало страницы
Команда глобального поиска начинается префиксом g (для
глобального поиска по всему тексту) и печатает все строки,
содержащие предъявляемый образец, например:
: g/speed;
int speed;
d = speed x time;
output (speed).
Образец может быть любой частью текста и запоминается в
специальном буфере искомого образца, отличном от буфера все-
го текста. Если префикс g не указан, ищется и печатается
первая найденная строка, начиная от текущей:
: /speed;
int speed.
В начало страницы
Подстановка образца текста выполняется командой s
(substitute), в которой указывается искомый образец и заме-
няющий образец, например:
: s/eed/ace/
int space;
Эта команда выполняет замену первого вхождения искомого
образца в текущей строке.
Для замены всех вхождений в строке надо добавить флаг g
(global - глобальный) в конце команды:
: s/wine/water/g
water = water + shugar
Чтобы выполнить подстановки в нескольких строках, надо
добавить префикс адресации или поиска строк по образцу.
Например:
: 1,10s/wine/water/g
или
: 1, $s/wine/water/g
Примеры поиска по образцу:
: g/speed/s/eed/ace/g
или
: g/speed/s//space/g.
В последнем случае искомый образец берется из буфера ис-
комого образца.
Возможен интерактивный режим выполнения глобальной коман-
ды подстановки, при котором редактор для каждой найденной
строки перед выполнением подстановки требует подтверждения
ее необходимости в форме ввода буквы y (yes). Для интерак-
тивной формы в команде требуется использовать ключ c
(confirmation):
: g/eed/s//ace/gc
int speed;
^^^ y
real need;
^^^
d = speed x time;
^^^ y
output (speed);
^^^ y
Здесь три замены произведутся, а одна - нет.
В начало страницы
Отмена последней подстановки выполняется командой u
(undo). Реализация команды u выполняется обратной подстанов-
кой, поэтому повторная подача команды отменяет первую коман-
ду u.
В начало страницы
Редактируемый файл находится в буфере редактирования.
Чтение содержимого другого файла в буфер редактирования пос-
ле указанной или текущей строки можно выполнить командой r,
например:
0r preface.
Здесь содержимое файла чтения помещается в начале буфера
редактирования (после несуществующей нулевой строки). В ка-
честве файла чтения может быть файл стандартного вывода ко-
манды, например (пробел перед ! обязателен):
: r !date
: 1, $p
----------
Fr Jan 12 09:33 PST 1986
Запись буфера редактирования или его части в указанный
файл можно выполнить командой w, например:
: w newfile
или
: w >> oldfile
(добавление в существующий файл).
Попытка записи буфера в уже существующий файл сопровожда-
ется предупреждением и приглашением повторить команды с
восклицательным знаком:
: w! oldfile
Если имя опущено, подразумевается редактируемый файл.
Пример записи части буфера редактирования:
: 1, 100w !lpr.
Здесь роль файла записи играет стандартный вывод команды
(пробел перед знаком ! обязателен).
В начало страницы
Если редактор был вызван для редактирования нескольких
файлов, например:
$ vi .*,
или
$ ex *.c,
то переход к редактированию следующего файла выполняется ко-
мандой n (next):
: n
Командой e (edit) можно вызвать на редактирование произ-
вольный файл, указанный именем
: e another
Если в момент подачи команд n или e буфер редактирования
предыдущего файла не был записан, выдается предупреждение,
которое можно обойти, форсировав выполнение команд подачей
восклицательного знака : n! и : e! соответственно.
В начало страницы
Для этого используется префикс ! (восклицательный знак),
например:
: !cc % ,
где % - ссылка на имя текущего редактируемого файла.
Два восклицательных знака:
: !!
повторяют предыдущую команду.
В начало страницы
Выполняется командой vi, которой может предшествовать но-
мер строки, высвечиваемой в начале экрана, например:
: 10 vi
В режиме vi доступны все средства редактора. Выход из ре-
жима vi выполняется подачей команды Q (большое).
В начало страницы
Выход из редактора ex в режим команд системы выполняется
командой q, например:
: q
Если буфер редактирования не был записан или еще не все
файлы отредактированы, выдается предупреждение, которое мож-
но обойти, подавая q с восклицательным знаком:
: q!
Команду выхода можно для удобства комбинировать с коман-
дой записи, например:
: wq
или
: wq!
если есть препятствия для записи или выхода.
В начало страницы
|