Разделы:

Главная

О проекте

Загрузки

Документация:

Linux

BSD

Другие Unix

Программинг

HTML, XML...

Сервера

"Окна Закрой!"

MANы

 



12. СРЕДСТВА РЕДАКТОРА EX, ДОПОЛНЯЮЩИЕ ВОЗМОЖНОСТИ РЕДАКТОРА VI
Как уже говорилось, редактор vi тесно связан с редактором ex, являясь по сути одним из режимов работы последнего. Поэ- тому ряд мощных команд, реализованных в ex, можно и полезно выполнять и из редактора vi.

12.1. Выход из vi в ex

Для выхода из vi в ex надо нажать клавишу (esc) для пере- хода в командный режим, если вы были в режиме текста, а за- тем нажать клавишу [:] (двоеточие). Будет напечатана подс- казка редактора ex - двоеточие, приглашающая вводить команды редактора ex.

12.2. Просмотр строк текста

Поскольку ex - строчный редактор, вводится понятие номера строки и понятие текущей строки. Все строки текста занумеро- ваны натуральными числами, начиная с единицы. Знак $ (дол- лар) означает номер последней строки текста. Просмотр части текста на экране выполняется командой, состоящей из одного (для просмотра одной строки) или пары номеров - номера первой и номера последней строки части текста и символа P (print), который по умолчанию может быть опущен. Например:
   : 1,5p
   program (input, output)
   ......
   ......
   :
или просто :1,5
   Для просмотра всего текста надо ввести:
   : 1, $
   Чтобы напечатать строки вместе с их номерами, надо в кон-
це команды просмотра поставить знак # (диез), например:
   : 6, $#
   6 include 
   7 .......
   8 .......
   .........

Следует помнить, что нумерация строк относительна. При удалении одной строки все строки перенумеруются. После вы- полнения команды просмотра текущей строкой становится пос- ледняя просмотренная строка.

12.3. Поиск строк по образцу текста

Команда глобального поиска начинается префиксом g (для глобального поиска по всему тексту) и печатает все строки, содержащие предъявляемый образец, например:
   : g/speed;
   int speed;
   d = speed x time;
   output (speed).

Образец может быть любой частью текста и запоминается в специальном буфере искомого образца, отличном от буфера все- го текста. Если префикс g не указан, ищется и печатается первая найденная строка, начиная от текущей:
: /speed;
int speed.

12.4. Подстановка образца текста

Подстановка образца текста выполняется командой 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
Здесь три замены произведутся, а одна - нет.

12.5. Отмена последней подстановки

Отмена последней подстановки выполняется командой u (undo). Реализация команды u выполняется обратной подстанов- кой, поэтому повторная подача команды отменяет первую коман- ду u.

12.6. Чтение и запись файлов в буфере редактирования

Редактируемый файл находится в буфере редактирования. Чтение содержимого другого файла в буфер редактирования пос- ле указанной или текущей строки можно выполнить командой r, например:
0r preface.
Здесь содержимое файла чтения помещается в начале буфера редактирования (после несуществующей нулевой строки). В ка- честве файла чтения может быть файл стандартного вывода ко- манды, например (пробел перед ! обязателен): : r !date
: 1, $p
----------
Fr Jan 12 09:33 PST 1986
Запись буфера редактирования или его части в указанный файл можно выполнить командой w, например:
: w newfile
или
: w >> oldfile
(добавление в существующий файл).
Попытка записи буфера в уже существующий файл сопровожда- ется предупреждением и приглашением повторить команды с восклицательным знаком:
: w! oldfile
Если имя опущено, подразумевается редактируемый файл. Пример записи части буфера редактирования:
: 1, 100w !lpr.
Здесь роль файла записи играет стандартный вывод команды (пробел перед знаком ! обязателен).

12.7. Вызов на редактирование следующего или нового файла

Если редактор был вызван для редактирования нескольких файлов, например:
$ vi .*,
или
$ ex *.c,
то переход к редактированию следующего файла выполняется ко- мандой n (next):
: n
Командой e (edit) можно вызвать на редактирование произ- вольный файл, указанный именем
: e another
Если в момент подачи команд n или e буфер редактирования предыдущего файла не был записан, выдается предупреждение, которое можно обойти, форсировав выполнение команд подачей восклицательного знака : n! и : e! соответственно.

12.8. Выполнение команды системы внутри редактора ex

Для этого используется префикс ! (восклицательный знак), например:
: !cc % ,
где % - ссылка на имя текущего редактируемого файла.
Два восклицательных знака:
: !!
повторяют предыдущую команду.

12.9. Переход в режим редактора vi

Выполняется командой vi, которой может предшествовать но- мер строки, высвечиваемой в начале экрана, например: : 10 vi
В режиме vi доступны все средства редактора. Выход из ре- жима vi выполняется подачей команды Q (большое).

12.10. Выход из редактора ex

Выход из редактора ex в режим команд системы выполняется командой q, например:
: q
Если буфер редактирования не был записан или еще не все файлы отредактированы, выдается предупреждение, которое мож- но обойти, подавая q с восклицательным знаком: : q!
Команду выхода можно для удобства комбинировать с коман- дой записи, например: : wq
или
: wq!
если есть препятствия для записи или выхода.

далее     содержание


Партнёры и спонсоры проекта:

Все материалы сайта распространяются по лицензии GNU/GPL
© ProUNIX 2003-2009, UnixLib 2005-2009, SoftLib 2006-2009.