109


                 7.   ЭКРАННЫЙ РЕДАКТОР VI

     7.1.   Введение

     Этот раздел посвящен экранному редактору  vi.  Редактор
vi является мощным средством для создания  и  редактирования
файлов. Он  предназначен  для  работы  на  видеотерминале  и
использует окна, посредством которых вы можете просматривать
текст файла. Несколько простых команд позволяют вам  сделать
изменения в тексте, которые  очень  быстро  отображаются  на
экране. Редактор может отобразить одну или  несколько  строк
текста. Он позволяет вам передвигать курсор в любую точку на
экране или в файле, создавать, изменять или  удалять  текст.
Вы можете также использовать некоторые  команды  построчного
редактора, такие как глобальные команды,  которые  позволяют
вам изменять множество появлений некоторой строки  символов,
используя одну команду. Чтобы двигаться по файлу, вы  можете
прокручивать текст вперед или назад.
     Примечание.   Не все  терминалы  обладают  способностью
прокрутки  текста  и  поэтому  средство   прокрутки   текста
редактором vi зависит от типа используемого терминала.
     Редактор vi имеет более  100  команд.  В  этом  разделе
описаны основные команды, которые позволят вам  использовать
vi просто, но  эффективно.  Особое  внимание  будет  уделено
выполнению следующих задач, позволяющих:
     - изменить   окружение    shell,    чтобы    установить
конфигурацию вашего терминала;
     - сделать доступным автоматический возврат каретки;
     - начать  работу  с  редактором  vi,   создать   текст,
исправить ошибки, записать текст в файл и завершить работу;
     - переместить текст внутри файла;
     - разбить и слить текст;
     - использовать специальные команды и сокращения;
     - использовать команды построчного редактора, доступные
внутри vi;
     - временно вернуться в shell, чтобы  выполнить  команды
shell;
     - восстановить файл, потерянный из-за прерывания сессии
редактирования;
     - редактировать несколько файлов в одной сессии.


     7.2.   Начальные установки

     В  этом  подразделе  описано,  как   делать   установку
конфигурации терминала, чтобы правильно работал редактор vi.

     7.2.1.   Установка конфирурации терминала

     Прежде чем начать работать с редактором vi,  необходимо
сообщить системе UNIX, какой тип терминала  вы  используете.
Это связано с тем, что программное обеспечение vi по разному
исполнимо на разных терминалах.
     Каждому  типу  терминала  соответствует  кодовое   имя,
которое распознается системой UNIX.


                            110
     Чтобы   установить   конфигурацию   вашего   терминала,
введите:
        TERM= terminal_name
        export TERM
        tput init

     В   первой   строке   переменной   TERM   присваивается
конкретное   значение   (тип   терминала).   Вторая   строка
экспортирует это значение; она передает  это  значение  всем
программам системы UNIX, выполнение которых зависит от  типа
используемого терминала.
     Команда tput  в  третьей  строке  производит  установку
программного обеспечения  для  вашего  терминала,  чтобы  он
правильно функционировал с системой UNIX.

     7.2.2.   Изменение конфигурации

     Если вы  часто  будете  использовать  редактор  vi,  то
необходимо сделать соответствующие  изменения  по  установке
конфигурации терминала в файле .profile.  Этот  файл  должен
находиться  в  вашем  собственном  справочнике.   За   более
подробной информацией обратетесь к разд. 9, где  описывается
shell.
     Если вы укажете соответствующие  установки  для  вашего
терминала  в  файле  .profile,   то   ваш   терминал   будет
автоматически настраиваться каждый раз при  регистрации.  То
есть  строки,  приведенные  в  п.  7.1.1,  добавьте  в  файл
.profile.
     hlv 2 Установка автоматического возврата каретки
     Если  вы  хотите,  чтобы  клавиша  RETURN  отрабатывала
автоматически  во  время  вашей  работы  с  редактором   vi,
создайте  файл  с   именем   .exrc   в   вашем   собственном
справочнике. В файле .exrc будут содержаться опции,  которые
управляют средой редактора vi.
     Чтобы создать файл .exrc, введите при вызове  редактора
имя этого  файла.  Затем  в  первой  строке  текста  введите
спецификацию  циклического  режима  (автоматический  возврат
каретки). Формат этой опции:
        : set wm=n
где n - число  символов  на строке экрана, после которого
        должен  автоматически появляться возврат каретки.
        Он может стоять только между словами, но не между
        слогами слова.
     Например,  если  вы  хотите,  чтобы   возврат   каретки
проставлялся за  20-м  символом  с  правой  стороны  экрана,
введите:
     : set wm=20
     По  окончании  запишите  содержимое  буфера  в  файл  и
завершите работу с редактором.  В  следующий  раз,  если  вы
будете  работать  с  vi,  то  этот  файл   предоставит   вам
автоматический возврат каретки.
     Чтобы  проверить  установки  и  циклический  режим  для
вашего терминала в редакторе vi, введите команду:
     : set
     Команду set также можете использовать  и  для  создания
или изменения опции циклического режима.


                            111
     7.3.   Создание файла

     Чтобы создать файл, введите:
     vi filename
Когда вы введете команду vi с именем файла, vi очистит экран
и  отобразит  окно,  в   которое   вы   можете   вводить   и
редактировать текст.

     7.4.   Режимы редактора

     Редактор vi функционирует в двух режимах: режим ввода и
командный режим.  В  режиме  ввода  вы  можете  добавлять  и
модифицировать текст; в командном режиме вы можете:
     - редактировать и изменять существующий текст;
     - удалять, перемещать и копировать текст;
     - передвигаться по всему файлу;
     - выполнять другие задачи.

     7.4.1.   Создание текста в режиме Append

     Если вы успешно  вошли  в  редактор  vi,  то  сразу  же
попадаете в командный режим и vi ожидает ввода ваших команд.
Чтобы создать текст необходимо:
     - введите a, чтобы перейти к режиму ввода  (не  нажимая
клавишу RETURN). Теперь вы можете  добавить  текст  к  файлу
(файл не печатается на экране);
     - введите нужный текст;
     - перейдите на новую строку и нажмите клавишу RETURN.
     Если вы указали циклический режим в файле .exrc, то  вы
будете  переходить  на  новую  строку  всякий   раз,   когда
достигнете точки автоматического возврата каретки.

     7.4.2.   Выход из режима Append

     После того как вы закончили  создавать  текст,  нажмите
клавишу ESCAPE, чтобы из режима ввода перейти  к  командному
режиму. Теперь вы можете  редактировать  текст,  который  вы
создали или записали.
        
        Create some text
        in the screen editor
        and return to
        command mode.

     Если вы нажмете  клавишу  ESCAPE  и  услышите  звуковой
сигнал, то это значит, что вы уже перешли в командный режим.
Нажатие клавиши ESCAPE в то время,  когда  вы  находитесь  в
командном режиме, никак не влияет на  текст  в  файле,  даже
если вы нажмете ее несколько раз.


     7.5.   Редактирование текста в командном режиме

     В общем случае редактирование файла -  это  добавление,
изменение, удаление текста. Чтобы выполнить  эти  задачи  вы
должны научиться  переходить  от  одной  страницы  текста  к
другой  странице,  от  одной  строки  к   другой   и   между
определенными точками на строке. В этом  подразделе  описаны
команды добавления и удаления текста  и  способы  премещения


                            112
курсора.

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

     Клавиши перемещения курсора  позволяют  вам  перемещать
курсор  по  файлу.  Курсор  можно  переместить   с   помощью
следующих клавиш:
h - перемещает курсор на один символ влево;
j - перемещает курсор вниз на одну строку;
k - перемещает курсор вверх на одну строку;
l - перемещает курсор на один символ вправо;
     Команды j и k  сохраняют  позицию  курсора  на  строке.
Например, если курсор находился на 17-м  символе  слева,  то
когда вы введете команду j или  k,  то  он  переместится  на
новую строку, но будет  находиться  на  17-м  символе.  Если
символов в новой строке меньше, то  курсор  переместитcя  на
последний символ строки.
     Примечание.    Некоторые  терминалы  имеют  специальные
символы  управления  курсором,  помеченные  стрелками.   Эти
стрелки можно использовать вместо клавиш h, j, k, l.
     Если перед h,  j,  k,  l  поставить  число,  то  курсор
передвинется на  количество  строк/символов,  равных  числу.
Например, если надо передвинуть курсор на  4  строки  вверх,
введите 4k. Если вы не можете  продвинуться  дальше  в  этом
направлении, то vi подаст звуковой сигнал и курсор останется
на прежнем месте.
     Чтобы переместить курсор на 35 строк вниз, введите:
     35j
     Дополнительно к  клавишам  h  и  l  можно  использовать
клавиши SPACEBAR и BACKSPACE для перемещения курсора  вправо
или влево.
 - переместить курсор на один символ вправо;
 - переместить курсор на n символов вправо;
 - переместить курсор на один символ влево;
 - переместить курсор на n символов влево;


     7.5.2.   Удаление текста

     Если вы хотите удалить  символ,  переместите  курсор  к
этому символу и нажмите  x.  Перед  x  может  стоять  число,
которое  говорит  о  том,  сколько  символов  подряд   нужно
удалить. Редактор vi так корректирует строку, что  на  месте
удаленного символа не остается  пустого  промежутка  или  на
месте удаленной строки - пустой строки.

     7.5.3.   Добавление текста

     В редакторе vi существует две  команды  для  добавления
текста:  insert(i)  и  append(a).  Чтобы  добавить  текст  с
помощью команды i,  переместите  курсор  в  нужное  место  с
помощью клавишей h, j, k,  l.  Затем  нажмите  i  и  введите
текст. Введенный вами текст  появится  на  экране  слева  от
символа, на который указывает  курсор.  Этот  символ  и  все
остальные справа от курсора будут передвинуты вправо,  чтобы
освободить место для вашего нового текста. Редактор vi будет
хранить символы, вводимые вами,  до  тех  пор,  пока  вы  не
нажмете  клавишу  ESCAPE.  Если   необходимо,   передвинутые


                            113
символы будут перенесены на следующую строку.
     Таким же образом  вы  можете  использовать  команду  a.
Отличие состоит в том, что новый текст  появится  справа  от
символа, к которому подведен курсор.

     7.6.   Завершение работы c vi

     Когда  вы  закончите  работу  с   текстом,   необходимо
записать содержимое буфера в файл  и  возвратить  управление
shell. Для этого нажмите  клавишу  SHIFT  и  дважды  нажмите
Z(ZZ). Редактор сохранил имя того файла, который вы  указали
в начале сеанса редактирования,  и  в  этот  файл  перепишет
текст из буфера. Обратите внимание, что внизу экрана  дается
имя файла и количество строк и символов в файле. Затем shell
выдает вам подсказку.
   Пример.
        
        This is a text file.
        I am adding text to
        a temporary buffer and
        now it is perfect.
        I want to write this file,
        and return to the shell.
        -
        -
        -
        -
        "stuff" [New file] 6 lines, 135 characters
        $

     Вы также можете использовать команды :w и :q  редактора
vi для записи файла и окончания работы с редактором. Команды
редактора  начинаются  с  двоеточия  (:)  и   появляются   в
последней строке экрана. Команда :w записывает буфер в файл.
Команда  :q  завершает   работу   редактора   и   возвращает
управление shell. Вы можете ввести  эти  команды  раздельно,
или в одной команде :wq
     В табл.  8  приведены  основные  команды,  которые  вам
необходимы для вызова и использования редактора vi.
                                                   Таблица 8
                    Основные команды vi
 ----------------------------------------------------------
    Команды         |   Выполняемые функции
 ----------------------------------------------------------
 TERM=terminal_name |
 export TERM        |Установка конфигурации терминала
 tput init          |Инициализировать терминал как
                    |terminal_name
 vi filename        |Вызов редактора vi для редактирования
                    |файла filename
    a               |Добавить текст после курсора
    h               |Перемещает курсор на один символ влево
    j               |Перемещает курсор вниз на одну строку
    k               |Перемещает курсор вверх на одну строку
    l               |Перемещает курсор на один символ вправо
    x               |Удалить символ
                |Возврат каретки
               |Перейти из режима ввода в командный
                    |режим


                            114
                                         Продолжение табл. 8
 ----------------------------------------------------------
    Команды         |   Выполняемые функции
 ----------------------------------------------------------
    :w              |Записать в файл
    :q              |Завершить работу с редактором
    :wq             |Записать буфер в файл и завершить
                    |работу с редактором vi
    ZZ              |Записать изменения в файл и завершить
                    |работу с vi
 -----------------------------------------------------------

     7.7.   Перемещение курсора по экрану

     Ранее вы познакомились с тем, как перемещать  курсор  с
помощью клавишей h, j, k, l, BACKSPACE и  SPACEBAR.  В  этом
подразделе приводятся еще несколько команд, которые  помогут
вам  быстро  перемещать  курсор  по  экрану.   Эти   команды
выполняются в командном режиме.

     7.7.1.   Позиционирование курсора на символ

     Для  позиционирования  курсора  на  символ   в   строке
существуют три способа:
     - переместить  курсор  вправо  или  влево  до   нужного
символа;
     - переместить курсор в начало или конец строки;
     - поиск символа на строке.


     7.7.1.1.   Переместить курсор в начало или конец
        строки

     Переместить курсор на первый  или  последний  символ  в
строке можно следующим образом:
$ - переместить курсор на последний символ в строке;
0(ноль) - переместить курсор на первый символ в строке;
^ - переместить курсор на первый ненулевой символ в строке.

     7.7.1.2.   Поиск символа в строке

     Третий способ позиционирования курсора в строке  -  это
поиск указанного символа на текущей строке. Если  символ  не
найден на текущей строке, то появляется  звуковой  сигнал  и
курсор  остается  на  прежнем  месте.  Существуют   команды,
которые проводят поиск по шаблону. Они будут описаны  далее.
Здесь приведем 6 команд для поиска внутри строки: f,  F,  t,
T, ;(двоеточие) и ,(запятая). После f, F, t и  T  вы  можете
указать символ:
fx - осуществляет  поиск  указанного  символа  x  справа  от
     текущей позиции курсора;
Fx - осуществляет  поиск  указанного  символа  x  слева   от
     текущей позиции курсора;
tx - осуществляет перемещение курсора вправо  на  символ  до
     указанного символа x;
Tx - осуществляет перемещение курсора  влево  на  символ  до
     указанного символа x;


                            115
; - повторяет предыдущий поиск символа. Команда ; запоминает
     символ и ищет следующее  появление  символа  в  текущей
     строке;
, - повторяет  предыдущий  поиск  символа,  но  в   обратном
     направлении.  Команда  ;  запоминает  символ   и   ищет
     следующее появление символа в текущей строке;

     7.7.1.3.   Команда перемещения: - (знак минус)

     Команда - (минус)  перемещает  курсор  на  одну  строку
вверх, позиционируя его на первом ненулевом  символе.  Чтобы
переместить курсор более чем на один  символ,  укажите  пред
знаком минус количество строк. Например,  чтобы  переместить
курсор вверх на 13 строк, введите:
        13-
     Если эти строки находятся выше отраженного  экрана,  то
окно  переместится  так,  чтобы  открыть  их.  Этот   способ
помогает быстро перемещаться по файлу.  Если  выше  окажется
меньше 13-ти строк, то звуковой сигнал подскажет вам, что вы
сделали ошибку и курсор останется в своем прежнем положении.


     7.7.1.4.   Команда перемещения + (знак плюс)

     Команда + (плюс) или   перемещает  курсор  вниз  на
одну строку и позиционирует на первый непустой символ. Перед
командой + можно указать количество  строк,  на  которое  вы
хотите  переместить  курсор.  Например,  чтобы   переместить
курсор на 9 строк вниз, введите:
        9+
     Если некоторые строки расположены ниже текущего экрана,
то окно переместится вниз, чтобы открыть их.

     7.7.2.   Позиционирование слов

     Редактор  vi  предполагает,  что  слово  -  это  строка
символов, которая может  включать  в  себя  буквы,  цифры  и
символы подчеркивания. В редакторе vi  существует  6  команд
позиционирования: w, b, e,  W,  B  и  E.  Команды  w,  b,  e
рассматривают любой символ, отличный  от  буквы,  цифры  или
подчеркивания, как разделитель, означающий начало или  конец
слова. Пунктуация до или после пустого пространства является
разделителем слов. Символ  начала  или  конца  строки  также
является разделителем.
     Команды W, B,  E  рассматривают  пунктуатию  как  часть
слова.  Слова  разделяются  пустым  пространством,   которое
состоит из символов пробел, табуляция и новая строка.
     Команды позиционирования:
w - перемещает курсор к началу следующего слова;
nw - перемещает курсор к началу n-го слова; конец строки  не
     останавливает движение курсора. Он  продолжает  подсчет
     слов с начала следующей строки;
W - игнорирует все знаки пунктуации и перемещает  курсор  на
     следующее после пробела слово;
e - перемещает курсор на последний символ в следующем слове;
E - перемещает  курсор  на   последний   символ   в   слове.
     Игнорирует  все  символы  пунктуации   за   исключением
     пробела. Слова разделяются пробелами;


                            116
b - перемещает курсор к первому символу предыдущего слова;
nb - перемещает курсор к первому  символу  n-го  предыдущего
     слова. Команда b не останавливается в начале  строки  и
     продолжает движение к началу строки;
B - используется подобно команде b, за исключением того, что
     слова  разделяются  только  символами  пробел  и  новая
     строка. Она рассматривает все другие символы пунктуации
     как буквы.

     7.7.3.   Позиционирование курсора на предложение

     Редактор vi также распознает предложения.  В  редакторе
vi предложение заканчивается знаками !, . или  ?.  Если  эти
разделители появляются в середине строки, то за ними  должны
стоять два пробела, чтобы vi их мог распознать.
     Вы  можете   перемещать   курсор   от   предложения   к
предложению в файле с помощью команд ( - открывающая  скобка
и ) - закрывающая скобка.
( - перемещает курсор в начало текущего предложения;
n( - перемещает  курсор  в  начало  n-го  предложения   выше
     текущего предложения;
) - перемещает курсор в начало следующего предложения;
n) - перемещает курсор в начало n-го предложения, следующего
     за текущим предложением.

     7.7.4.   Позиционирование курсора по параграфам

     Параграфы  распознаются   редактором   vi,   если   они
начинаются после пустой строки. Если  вы  хотите  перемещать
курсор по параграфам, то при создании текста не  забудьте  в
конце каждого параграфа поставить пустую строку.
{ - переместить курсор в начало текущего параграфа,  который
     ограничивается пустой строкой;
n{ - переместить курсор в начало n-го параграфа,  следующего
     за текущим параграфом;
} - переместить курсор в начало следующего параграфа;
n} - переместить курсор в начало n-го параграфа ниже текущей
     строки.


     7.7.5.   Позиционирование в окне

     Редактор  vi  предоставляет  вам  3  команды,   которые
позволяют вам позиционировать курсор  в  окне.  Эти  команды
должны быть введены на верхнем регистре:
H - переместить курсор к первой строке экрана;
M - переместить курсор к средней строке экрана;
L - переместить курсор к последней строке экрана.
     В табл. 9 приведены  команды  перемещения  курсора  для
позиционирования  его  на  символе,   строке,   предложении,
параграфе или позиционирования на экране.
                                                   Таблица 9
              Команды позиционирования курсора
 ----------------------------------------------------------
   Команда |        Действие команды
 ----------------------------------------------------------
           |         Позиционирование  на символ
           |
    h      |Перемещает курсор на один символ влево


                            117
                                         Продолжение табл. 9
 ----------------------------------------------------------
   Команда |        Действие команды
 ----------------------------------------------------------
    l      |Перемещает курсор на один символ вправо
 BACKSPACE |Перемещает курсор на один символ влево
 SPACEBAR  |Перемещает курсор на один символ вправо
    fx     |Осуществляет поиск указанного символа x справа
           |от текущей позиции курсора
    Fx     |Осуществляет поиск указанного символа x слева
           |от текущей позиции курсора
    tx     |Осуществляет перемещение курсора вправо
           |на символ до указанного символа x
    Tx     |Осуществляет перемещение курсора влево
           |на символ до указанного символа x
    ;      |Повторяет предыдущий поиск символа.
           |Команда ;  запоминает символ и ищет
           |следующее появление символа в текущей строке
    ,      |Повторяет предыдущий поиск символа,
           |но в обратном направлении
    j      |Перемещает курсор вниз на одну строку
    k      |Перемещает курсор вверх на одну строку
    -      |Перемещает  курсор на одну строку вверх,
           |позиционируя его на первом ненулевом символе
    +      |Перемещает курсор вниз на одну строку и
           |позиционирует на первый непустой символ
       |Перемещает курсор вниз на одну строку и
           |позиционирует на первый непустой символ
           |
           |      Позиционирование на строку
           |
    $      |Переместить курсор на последний символ в строке
    0(ноль)|Переместить курсор на первый символ в строке
    ^      |Переместить курсор на первый ненулевой символ
           |в строке
           |
           |       Позиционирование на слово
           |
    w      |Перемещает курсор к началу следующего слова
    W      |Игнорирует все знаки пунктуации и перемещает
           |курсор на следующее после пробела слово
    e      |Перемещает курсор на последний символ в
           |следующем слове
    E      |Перемещает курсор на последний символ в слове.
           |Игнорирует все символы пунктуации за
           |исключением пробела
    b      |Перемещает курсор к первому символу предыдущего
           |слова
    B      |Используется подобно команде b, за исключением
           |того, что слова разделяются только символами
           |пробел и новая строка
           |
           |     Позиционирование на предложение
           |
    (      |Перемещает курсор в начало текущего предложения
    )      |Перемещает курсор в начало следующего
           |предложения
           |
           |      Позиционирование на параграф


                            118
                                         Продолжение табл. 9
 ----------------------------------------------------------
   Команда |        Действие команды
 ----------------------------------------------------------
           |
    {      |Переместить курсор в начало текущего параграфа,
           |который ограничивается пустой строкой
    }      |Переместить курсор в начало следующего
           |параграфа
           |
           |      Позиционирование в окне
           |
    H      |Переместить курсор к первой строке экрана
    M      |Переместить курсор к средней строке экрана
    L      |Переместить курсор к последней строке экрана
 ----------------------------------------------------------


     7.8.   Позиционирование курсора на неотображаемом
        тексте

     В этом подразделе описывается, как  переместить  курсор
на текст, который не отображен на текущем экране. Вы  можете
сделать это следующим образом:
     - прокрутка вперед и назад файла;
     - перейти к указанной строке в файле;
     - поиск по шаблону в файле.


     7.8.1.   Прокрутка текста

     Четыре команды редактора vi позволяют вам  осуществлять
прокрутку текста файла. Команды ^f (f) и ^d  (d)
проводят прокрутку экрана вперед, а команды ^b  (b)  и
^u (u) - прокрутку экрана назад.

     7.8.1.1.   Команда ^f

     Команда ^f осуществляет прокрутку вперед на  одно  окно
текста,  расположенного  ниже  текущего  окна.  Редактор  vi
очищает экран и выводит новое  окно.  Две  последние  строки
текущего окна отображаются в верхней части нового окна. Если
окно дополнено пустыми строками, то они помечаются знаком  ~
(тильда)

     7.8.1.2.   Команда ^d

     Команда ^d осуществляет прокрутку на  половину  экрана,
чтобы отобразить текст, расположенный ниже окна. Если курсор
находится на последней строке файла и вы нажмете ^d,  то  vi
подаст звуковой сигнал.


     7.8.1.3.   Команда ^b

     Команда  ^b  осуществляет  прокрутку  экрана  назад  на
полное окно, чтобы отобразить текст, который находится  выше
текущего экрана. Редактор  vi  очищает  экран  и  отображает


                            119
новое окно. В отличие от команды ^f, команда ^b не оставляет
в новом окне строки из текущего окна.


     7.8.1.4.   Команда ^u

     Команда  ^u  осуществляет  прокрутку  половины  экрана,
чтобы отобразить текст, расположенный выше окна. Если курсор
достигнет начала файла, то vi подаст звуковой сигнал.


     7.9.   Переход на указанную строку

     Команда G позиционирует курсор на  указанную  строку  в
окне. Если эта строка не находится в текущем  экране,  то  G
очищает экран и отображает окно, содержащее эту строку. Если
не  указана  строка,  то  команда  G  перемещает  курсор  на
последнюю строку файла:
G - переместить курсор на последнюю строку в файле;
nG - переместить курсор на строку n.


     7.10.   Номера строк

     Каждая строка файла  имеет  номер,  соответствующий  ее
положению в буфере. Чтобы получить номер конкретной  строки,
переместите курсор на эту строку и введите команду:
     ^g
     В нижней части экрана команда ^g поместит информацию:
     - имя файла;
     - был ли буфер модифицирован после поледней записи  его
в файл;
     - номер строки, на которой находится курсор;
     - общее количество строк в буфере.

     7.11.   Поиск символов по шаблону: команды / и ?

     Для поиска символов по шаблону вы  можете  использовать
команды /, ?, n и  N.  Эти  команды  позволяют  осуществлять
поиск  вперед  и  назад  в   буфере   следующего   появления
указанного шаблона символов. Команды n  и  N  позволяют  вам
повторить последний поиск.
     Команда / и следующий за ней  шаблон  (/pattern)  ведет
поиск  вперед  по  буферу  следующего  появления   символов,
указанных в шаблоне и помещает курсор на  первый  символ  из
шаблона. Например, командная строка:
     /Hello world
находит  первое  появление  в  буфере  слов  Hello  world  и
помещает курсор под буквой H.
     Команда ? и следующий за ней  шаблон  (?pattern)  ведет
поиск в обратном  направлении  в  буфере  первого  появления
символов, указанных в шаблоне и помещает курсор на первый из
этих символов. Например, командная строка:
     ?data set design
находит предыдущее появление в буфере слов data set design и
помещает курсор под буквой d в слове data.
     Эти команды поиска не выполняют  циклически  возврат  в
случае окончания строки во время поиска двух или более слов.
Например, если  вам  надо  найти  появление  Hello  world  и


                            120
окажется, что слово Hello находится в конце одной строки,  а
слово world  -  первое  слово  последующей  строки,  то  эти
команды не найдут Hello world.
     В то же время, эти команды поиска выполняют циклический
возврат в конце или начале буфера  для  продолжения  поиска.
Например,  если  вы  находитесь  почти  в  конце  буфера,  а
символы, которые соответствуют шаблону в начале  буфера,  то
команда поиска / найдет шаблон.
     Команды n и N  позволяют  повторить  предыдущий  запрос
поиска /pattern или ?pattern:
n - повторить последнюю команду поиска;
N - повторить   последнюю   команду   поиска   в    обратном
     направлении.
     Команды  /  и  ?  не  дают  вам   возможности   указать
конкретное появление шаблона с помощью числа. То есть, вы не
можете, например, запросить поиск  3-го  появления  шаблона,
начиная с текущей позиции.
     В табл. 10 приведены команды vi для перемещения курсора
с помощью прокрутки текста, указания номера строки и  поиска
по шаблону.
                                                  Таблица 10
 Дополнительные команды перемещения курсора в редакторе vi
 ----------------------------------------------------------
  Команда  |             Действие
 ----------------------------------------------------------
           |            Прокрутка
    ^f     |Прокрутка экрана вперед на полное окно. Откры-
           |вается новое окно с текстом, расположенным ниже
           |текущего окна
    ^d     |Прокрутка текста вниз на пол-окна. Открываются
           |строки, расположенные ниже текущего окна
    ^b     |Прокрутка экрана назад на полное окно. Откры-
           |вается новое окно с текстом, расположенным выше
           |текущего окна
    ^d     |Прокрутка текста вверх на пол-окна. Открываются
           |строки, расположенные выше текущего окна
           |
           |      Позиционирование с помощью номера
           |                строки
           |
    1G     |Перейти к первой строке в файле
    G      |Перейти к последней строке в файле
    ^g     |Выдать номер строки и состояние файла
           |
           |      Поиск по шаблону
           |
 /pattern  |Поиск вперед в буфере до первого появления
           |шаблона. Курсор помещается на первом символе
           |шаблона
 ?pattern  |Поиск назад в буфере до первого появления
           |шаблона. Курсор помещается на первом символе
           |шаблона
    n      |Повторить последнюю команду поиска
    N      |Повторить последнюю команду поиска в обратном
           |направлении
 ----------------------------------------------------------

     7.12.   Создание текста


                            121
     Три основные команды позволяют в редакторе vi создавать
текст:
a - добавить текст;
i - вставить текст;
o - открыть новую  строку,  на  которой  может  быть  введен
     текст.
     После того, как вы создали текст  с  помощью  одной  из
этих команд, можете возвратиться в командный режим редактора
vi нажав клавишу ESCAPE.

     7.12.1.   Добавить текст

     Чтобы в файл добавить текст, воспользуйтесь  следующими
командами:
a - добавить текст после курсора;
A - добавить текст в конце текущей строки.


     7.12.2.   Вставить текст

     Чтобы в файл вставить текст, воспользуйтесь  следующими
командами:
i - вставить текст до курсора;
I - вставить  текст  в  начале  текущей  строки  до  первого
     ненулевого символа.
     Для возврата в командный режим, нажмите клавишу ESCAPE.

     7.12.3.   Открыть строку для текста

     Для   открытия   строки   для   текста   воспользуйтесь
следующими командами:
o - создать текст с начала новой строки, расположенной  ниже
     текущей строки. Вы можете ввести эту  команду  в  любом
     месте текущей строки;
O - создать текст с начала новой строки, расположенной  выше
     текущей строки. Вы можете ввести эту  команду  в  любом
     месте текущей строки.
     Команды открытия создают  строку  непосредственно  выше
или ниже текущей  строки  и  переводят  вас  в  режим  ввода
текста. Курсор располагается в начале новой строки и ожидает
от вас ввода текста.
     В табл. 11  приведены  команды  создания  и  добавления
текста с помощью редактора vi.
                                                  Таблица 11
                  Команды создания текста
 ----------------------------------------------------------
   Команда |            Функция
 ----------------------------------------------------------
     a     |Создать текст после курсора
     A     |Создать текст в конце текущей строки
     i     |Создать текст перед курсором
     I     |Создать текст перед первым ненулевым символом
           |в текущей строке
     o     |Создать  текст с начала новой строки, располо-
           |женной под текущей строкой
     O     |Создать  текст с начала новой строки, располо-
           |женной над текущей строкой
      |Возвратить vi в командный режим из режима ввода


                            122
                                        Продолжение табл. 11
 ----------------------------------------------------------
   Команда |            Функция
 ----------------------------------------------------------
           |текста
 ----------------------------------------------------------


     7.13.   Удаление текста

     Вы можете удалить текст с помощью нескольких  команд  в
командном режиме и небольшой объем в режиме ввода.

     7.13.1.   Удаление текста в режиме ввода текста

     Если вы находитесь в режиме ввода текста редактора vi и
хотите удалить символ, воспользуйтесь клавишей BACKSPACE:
BACKSPACE - удалить текущий символ (слева от курсора).
     Клавиша BACKSPACE  перемещает  курсор  назад  в  режиме
ввода  текста  и  удаляет  каждый  символ,  который   курсор
переходит. Однако удаленный символ  не  стирается  с  экрана
пока вы не нажмете клавишу ESCAPE для возврата  в  командный
режим.
     Удалить текст вы можете и с помощью следующих ключей:
^w - отменить ввод текущего слова;
@ - удалить  на  текущей  строке  весь  введенный  во  время
     данного режима ввода текст;
^v - удалить  специальное  значение,  если  есть,  следующих
     вводимых символов.
     Когда вы вводите ^w, курсор возвращается  на  последнее
введенное слово и ожидает на первом символе этого слова.  Он
не стирает слово с экрана до тех пор,  пока  вы  не  нажмете
клавишу ESCAPE или не введете новые символы на  месте  этого
слова.

     7.13.2.   Отменить последнюю команду

     Отменить последнюю введенную команду  можно  с  помощью
следующих команд:
u - отменить последнюю команду;
U - восстановить текущую строку в состояние до произведенных
     изменений.
     Если вы случайно удалили строки, то для отмены  команды
удаления введите команду u. Удаленные строки вновь  появятся
на экране. Если вы ввели  неправильно  команду,  то  введите
команду u и неверная команда будет отменена. Команда U будет
аннулировать все изменения в текущей строке до тех пор, пока
курсор будет находиться на этой строке.
     Если вы введете команду u  дважды,  то  вторая  команда
отменит первую. Например, если вы удалили по ошибке строку и
восстановили ее с помощью команды u, то нажав второй раз  u,
вы вновь удалите строку. Знание этих команд может спасти вас
от многих неприятностей.


     7.14.   Команды удаления в командном режиме

     Многие команды редактора vi, такие как команды удаления


                            123
и изменения, предоставляют вам  возможность  использовать  в
командной  строке  команды  перемещения   курсора.   Команды
перемещения курсора могут указывать на объект текста: слово,
строка, предложение, параграф. В этом  случае  общий  формат
команды будет такой:
        [number][command]text_object
Квадратные  скобки  указывают,  что  данные  компоненты   не
являются обязательными.
     Все команды удаления,  выдаваемые  в  командном  режиме
сразу же удаляют указанный текст с экрана и оставшуюся часть
отображают на экране в обновленном виде.
     Команда удаления имеет следующий формат:
        [number]dtext_object
где  d - команда удаления;
     text_object - объект удаления.

     7.14.1.   Удаление слов

     Вы можете удалить  слово  или  часть  слова  с  помощью
команды d. Переместите курсор к первому удаляемому символу и
введите команду dw. Символ,  расположенный  над  курсором  и
последующие за нми будут стерты.  Команда  dw  удаляет  одно
слово или знак пунктуации и пробелы, которые следуют за ним.
Вы можете удалить несколько слов или  знаков  пунктуации  за
один раз, если укажете перед командой соответствующее число.
Например, чтобы удалить  3  слова  и  две  запятые,  введите
команду 5dw.


     7.14.2.   Удаление параграфов

     Чтобы удалить параграф, воспользуйтесь командой:
        d{ или d}
Помните,  что  вы  можете  восстановить  удаленный  текст  с
помощью команды u.


     7.14.3.   Удаление строк

     Чтобы удалить строку, введите:
        dd
Для  удаления  нескольких  строк  укажите   перед   командой
количество удаляемых строк. Например, команда:
        10dd
сотрет 10 строк.
     Если вы удаляете несколько строк, то  vi  отображает  в
нижней части экрана сообщение типа:
        10 lines deleted
     Если ниже текущей строки осталось меньше 10  строк,  то
прозвучит сигнал и строки не удалятся.

     7.14.4.   Удаление текста после курсора

     Для удаления всего  текста  на  строке,  расположенного
после курсора, поместите курсор на первый удаляемый символ и
введите:
        D или d$
Эта команда удаляет текст только на текущей строке.


                            124
     В табл. 12 приведен список команд для удаления текста.
                                                  Таблица 12
                  Команды удаления текста
 ----------------------------------------------------------
   Команда |            Функция
 ----------------------------------------------------------
           |      Режим ввода
           |
 BACKSPACE |Удалить текущий символ
   1w      |Удалить текущее слово
   @       |Удалить текущую строку нового текста или
           |удалить весь новый текст в текущей строке
           |
           |      Командный режим
           |
   u       |Отменить последнюю команду
   U       |Восстановить текущую строку в прежнем
           |состоянии
   x       |Удалить текущий символ
   ndx     |Удалить n-ый объект текста x
   dw      |Удалить слово над курсором и следующий за
           |ним пробел, или знак пунктуации
   dW      |Удалить слово и пунктуацию над курсором
           |с последующим за ним пробелом
   dd      |Удалить текущую строку
   D       |Удалить часть строки справа от курсора
   d)      |Удалить текущее предложение от текущей
           |позиции курсора до конца
   d}      |Удалить текущий параграф от текущей позиции
           |до конца
 ----------------------------------------------------------

     7.15.   Модификация текста

     Один  из  способов  модификации   текста   представляют
команды удаления и команды ввода текста.  Другой  способ,  с
помощью  которого  вы  можете  изменить  текст,  это  задать
команду, позволяющую одновременно удалять и создавать текст.
В редакторе  vi  существуют  3  основные  команды  изменения
текста: r, s и c.

     7.15.1.   Замена текста

rx - Заменить текущий символ (символ, на который  показывает
     курсор) на x. Эта команда не устанавливает режим  ввода
     текста и,  следовательно,  нет  необходимости  нажимать
     после нее клавишу ESCAPE.
nrx - Заменить n символов на x. После этой команды также  не
     надо нажимать клавишу ESCAPE.
R - Заменяет только те символы,  которые  введены  в  режиме
     ESCAPE. Если  будет  достигнут  конец  строки,  то  эта
     команда добавит ввод как новый текст.
     Например, вы хотите  заменить  слово  acts  на  ants  в
следующем предложении:
     The circus has many acts.
Поместите курсор  под  буквой  c  в  слове  acts  и  введите
команду:
     rn


                            125
Предложение будет иметь вид:
     The circus has many ants.
Чтобы заменить слово many  на  7777,  поместите  курсор  под
буквой m в слове many и введите команду:
     4r7
Команда r заменит слово many на четыре цифры 7:
     The circus has 7777 ants.

     7.15.2.   Подстановка текста

     Команда подстановки текста заменяет символы,  но  затем
позволяет вам продолжать ввод текста с того  места,  где  вы
нажали клавишу ESCAPE.
s - удалить символ, на который указывает курсор  и  добавить
     текст. После окончания  ввода  текста  нажмите  клавишу
     ESCAPE;
ns - удалить n символов и добавить  текст.  После  окончания
     ввода текста нажмите клавишу ESCAPE;
S - заменить все символы в строке.
     Когда вы вводите команду s, последний символ  в  строке
символов, который будет заменен, переписывается со знаком $.
Символ не стирается с экрана, пока  вы  не  введете  на  его
место новый символ, или не нажмете клавишу ESCAPE.

     7.15.3.   Изменение текста

     Команда подстановки заменяет символы. Команда изменения
заменяет объект текста и затем продолжает добавлять текст  с
этого места до тех пор, пока вы не нажмете клавишу ESCAPE.
     Команда изменения может содержать аргумент text_object.
Вы можете заменить символ, слово и так далее на новый текст:
ncx - заменить  n-ый  объект  текста  типа  x  (предложение,
     параграф);
cw - заменить слово или оставшиеся символы в слове на  новый
     текст. Редактор vi  печатает  знак  $,  чтобы  показать
     последний символ, который будет заменен;
ncw - заменить n слов;
cc - заменить все символы в строке;
ncc - заменить все символы в  текущей  строке  и  n  верхних
     строк;
C - заменить оставшиеся символы в строке от курсора до конца
     строки; dfn nC заменить оставшиеся символы, начиная  от
     курсора в текущей строке и во всех n верхних строках.
     Команда "c" использует знак $, чтобы отметить последний
символ,  который  должен  быть  замещен.  После   того   как
выполнилась команда изменения, вы находитесь в режиме  ввода
текста и можете вводить любой текст. Тескт будет храниться в
буфере, пока вы не нажмете клавишу ESCAPE.
     В табл. 13 приведены команды изменения текста.
                                                  Таблица 13
                  Команды изменения текста
 ----------------------------------------------------------
   Команда |            Функция
 ----------------------------------------------------------
      r    |Заменить текущий символ
      R    |Заменить те символы, которые введены в режиме
           |ESCAPE
      s    |Удалить символ, под которым расположен курсор


                            126
                                        Продолжение табл. 13
 ----------------------------------------------------------
   Команда |            Функция
 ----------------------------------------------------------
           |и добавить текст. Для окончания режима ввода
           |нажмите клавишу ESCAPE
      S    |Заменить все символы в строке
      cc   |Заменить все символы в строке
      ncx  |Заменить n объектов текста типа x (предложение,
           |параграф)
      cw   |Заменить слово или оставшиеся символы в слове
           |на новый текст
      C    |Заменить оставшиеся символы в строке от курсора
           |до конца строки
 ----------------------------------------------------------


     7.16.   Извлечение и присоединение текста

     Редактор  vi  предоставляет   набор   команд,   которые
разбивают текст в файл  и  набор  команд,  которые  копируют
часть текста и помещают в другое место в файле.

     7.16.1.   Перемещение текста

     Вы можете переместить текст из одного  места  в  буфере
редактора vi в другое, удалив строки, а затем поместив их  в
требуемое место. Удаленный текст  сохраняется  во  временном
буфере. Переместите курсор  на  то  место,  куда  вы  хотите
поместить текст и  нажмите  клавишу  "p".  Удаленные  строки
будут добавлены ниже текущей строки.
p - поместить содержимое временного буфера после курсора или
     ниже текущей строки.
     Удаленная с помощью команды удаления строка может  быть
помещена в середине  другой  строки.  Позиционируйте  курсор
между двумя словами, затем нажмите  клавишу  "p".  Удаленная
строка будет помещена после курсора.
     Так как  временный  буфер  сохраняет  результат  только
последней команды,  то  команда  "p"  должна  использоваться
сразу же после команды удаления.  Команда  "p"  используется
также для копирования текста, помещенного во временный буфер
командой "y"


     7.16.2.   Перемещение букв

     Быстрым способом перемещения букв  является  комбинация
команд "x" и "p" (xp). Команда  "x"  удаляет  букву,  "p"  -
помещает ее после следующего символа. Например, в  следующем
предложении есть ошибка:
     A line of tetx
Поместите курсор под буквой "t" в комбинации  "tx"  и  затем
нажмите клавиши "x" и "p". В результате получим:
     A line of text

     7.16.3.   Копирование текста

     Вы можете копировать одну или несколько строк текста во


                            127
временный буфер и  затем  поместить  копию  этого  текста  в
определенное место в файле. Чтобы поместить текст  на  новое
место, введите команду  "y".  Команда  "y"  имеет  следующий
общий формат:
     [number]y[text_object]
Копирование строк с помощью команды  "y"  не  удаляет  их  с
прежнего места в файле, т.е. вы можете поместить один и  тот
же кусок текста в нескольких местах.
     В табл. 14 приведены способы использования команды "y".
                                                  Таблица 14
                         Команда y
 -----------------------------------------------------
   Команда |            Функция
 -----------------------------------------------------
    nyx    |Копирование n-го объекта текста типа  x
           |(предложение или параграф)
    yw     |Создание копии слова
    yy     |Создание копии текущей строки
    nyy    |Копирование n строк
    y)     |Создание копии всего текста до конца
           |предложения
    y}     |Создание копии всего текста до конца
           |параграфа
 -----------------------------------------------------
     Обратите внимание, что эта команда позволяет  указывать
номер объекта текста, который будет копироваться.

     7.17.   Копирование и перемещение текста с
        использованием регистров

     Перемещение и копирование нескольких разделов текста  в
различные  части  файла   является   утомительной   работой.
Редактор  vi  предлагает  вам  использовать  так  называемые
регистры, в которых вы можете хранить текст до тех пор, пока
он вам не понадобится. Сохранить  текст  вы  можете  либо  с
помощью  команды  "y",  либо  с  помощью  команды  удаления.
Использование регистров особенно полезно, если часть  текста
должна появиться во многих местах в файле. Извлекаемый текст
остается в указанном регистре пока вы не завершите работу  с
ним, либо закончите работу с редактором,  либо  поместите  в
этот регистр другой текст.
     Общий формат команды:
        [number]["X]command[text_object]
где  X - имя регистра, состоящее из одной буквы верхнего
         регистра. Имени регистра должны предшествовать
         двойные кавычки.
     В табл. 15 приведены команды извлечения и присоединения
текста.
                                                  Таблица 15
         Команды извлечения и присоединения текста
 -----------------------------------------------------
   Команда |            Функция
 -----------------------------------------------------
    p      |Помещает содержимое временного буфера,
           |полученное с помощью команды y и команд
           |удаления, в текст после курсора
    yy     |Создает копию строки текста и помещает во
           |временный буфер
    nyx    |Создает копию n-го объекта текста типа x


                            128
                                        Продолжение табл. 15
 -----------------------------------------------------
   Команда |            Функция
 -----------------------------------------------------
           |и  помещает ее во временный буфер
    "xyn   |Помещает копию объекта текста типа n в
           |в регистр с именем x
    "xp    |Помещает содержимое регистра x после
           |курсора
 -----------------------------------------------------

     7.18.   Специальные команды

     В  этом  подразделе  приведены   специальные   команды,
которые будут вам весьма полезны:
. - повторить последнюю команду;
j - объединить две строки;
^l - очистить экран и вновь отобразить его;
~ - заменить нижний регистр на верхний и vice versa (?).

     7.18.1.   Повторить последнюю команду

     Команда  "."  (точка)  повторяет  последнюю   введенную
команду. Очень часто она используется с командой поиска.


     7.18.2.   Объединение строк

     Команда  "j"  объединяет  строки.  Чтобы   ввести   эту
команду,  поместите  курсор  на  текущей  строке  и  нажмите
клавиши SHIFT и j одновременно. Текущая строка  объединяется
со следующей строкой.
     Например, вы имеете две строки текста:
        Dear Mr.
        Smith:
Объединим эти две строки в одну. Поместите курсор под  любым
символом в первой строке и введите команду  "j".  На  экране
появится строка:
        Dear Mr. Smith:
Обратите внимание,  что  редактор  vi  автоматически  ставит
пробел между последним  словом  в  первой  строке  и  первым
словом второй строки.


     7.18.3.   Очистить окно и восстановить текст

     Если другой  пользователь  системы  UNIX  посылает  вам
собщение с использованием команды write, а вы  в  это  время
редактируете с помощью vi, то посланное сообщение появится в
вашем текущем окне поверх текста, который  вы  редактируете.
Чтобы восстановить редактируемый текст после  того,  как  вы
прочтете посланное  сообщение,  нужно  перейти  в  командный
режим. Если вы находитесь в режиме ввода текста, то  нажмите
"^l". Редактор vi сотрет сообщение и восстановит окно в  том
виде, в котором оно было до прихода сообщения.

     7.18.4.   Заменить нижний регистр на верхний и
               vice versa


                            129

     Чтобы быстро заменить букву нижнего регистра  на  букву
верхнего регистра, надо поместить курсор под этой  буквой  и
нажать клавишу "~" (тильда). Вы  можете  заменить  несколько
букв, нажав столько же раз клавишу "~", либо поставив  перед
тильдой число требуемых замен.
     В табл. 16 приведены специальные команды.
                                                  Таблица 16
                    Специальные команды
 -----------------------------------------------------
   Команда |            Функция
 -----------------------------------------------------
    .      |Повторить последнюю команду
    j      |Соединить текущую строку со строкой,
           |расположенной ниже
    ^l     |Очистить и восстановить текущее окно
    ~      |Заменить нижний регистр на верхний
 -----------------------------------------------------

     7.19.   Использование команд построчного редактора

     Редактор vi имеет доступ ко многим командам построчного
редактора  ex.  В  этом  подразделе  обсуждаются   некоторые
наиболее часто используемые команды.
     Команды редактора ex очень похожи на команды  редактора
ed.
     Команды построчного редактора начинаются с символа  ":"
(двоеточие). После того, как вы  введете  двоеточие,  курсор
опускается в низ экрана и отображает  двоеточие.  Оставшаяся
часть команды тоже появляется внизу экрана.

     7.19.1.   Временный возврат к shell

     Когда вы входите в vi, то содержимое  буфера  заполняет
ваш экран, делая невозможным выдачу команд для shell. Однако
вам может это понадобиться. Например, вам  необходимо  будет
получить информацию из другого файла для присоединения ее  к
текущему тексту. Вы можете получить эту информацию, запустив
одну из команд shell,  которая  отображает  текст  файла  на
экране. Например, cat или pg.  Однако  процедура  завершения
работы с редактором и повторный вход  в  редактор  потребуют
времени и  сил.  Редактор  vi  предлагает  вам  два  способа
временного выхода из редактора  для  того,  чтобы  вы  могли
ввести команды shell (и даже редактировать другие файлы)  не
покидая сам редактор. Это команды :sh и :!.
     Команда :! позволяет вам выйти из редактора и запустить
команду shell одной командной строкой. Находясь в  командном
режиме  редактора  vi,  введите  :!.   Эти   символы   будут
напечатаны в низу экрана. Сразу же после символа  !  введите
команду shell. Shell запустит вашу команду, даст вам ответ и
напечатает сообщение:
     Hit return to continue
После того, как вы нажмете клавишу RETURN, vi обновит  экран
и курсор примет свое прежнее положение.
     Команда редактора :sh позволяет вам делать то же самое,
но ведет по другому себя на  экране.  Из  командного  режима
редактора vi введите :sh и нажмите клавишу RETURN. Подсказка


                            130
команды shell появится  на  следующей  строке.  Ведите  ваши
команды  после  подсказки  так,  будто  бы  вы  работаете  в
нормальном режиме с shell. Когда вы будете готовы  вернуться
к  редактору  vi,  введите  ^d  или  exit.   Экран   обновит
информация из вашего буфера и курсор вновь  переместится  на
прежнее место.
     При  временном  переходе   к   shell   даже   изменение
справочников не мешает возврату к буферу  редактора  vi  при
вводе ^d или exit.

     7.19.2.   Запись текста в новый файл

     Команда  "w"  позволяет  вам  создавать  файл,  копируя
строки  текста  из  файла,  который  вы  в   данный   момент
редактируете, в файл,  который  вы  указали.  Чтобы  создать
новый файл нужно указать строку или строки (номера строк)  и
имя нового файла  в  командной  строке.  Общий  формат  этой
команды:
     :line_number[, line_number]w filename
Например, чтобы записать третью строку буфера в файл  three,
введите:
     :3w three
     При  успешном  создании  нового  файла,   редактор   vi
напечатает следующую информацию:
     "three" [New file] 1 line, 20 characters
Чтобы записать текущую строку в файл, укажите . (точку)  как
адрес строки:
     :.w junk
     Создастся новый файл с именем junk. Он будет  содержать
только текущую строку буфера vi.
     Вы можете записать часть буфера в новый файл, обозначив
границы  строк.  Например,  чтобы  строки  с  23-й  по  37-ю
записать в файл, введите следующую команду:
     :23,37w newfile

     7.19.3.   Переход к указанной строке

     Вы можете переместить курсор к любой строке  в  буфере,
если введете команду:
       :n
где n - номер строки в буфере.

     7.19.4.   Удалить остаток буфера

     Одним из самых простых способов удаления всех строк  от
текущей строки и  до  конца  буфера  является  использование
команды "d" построчного редактора со специальнымим символами
для текущей и последней строк:
        :.,$d
где   .(точка) - обозначает текущую строку;
      $ - обозначает последнюю строку.


     7.19.5.   Добавить файл в буфер

     Чтобы добавить текст из файла ниже указанной  строки  в
буфер  редактора,  воспользуйтесь  командой  "r".  Например,


                            131
чтобы перенести содержимое файла data в  ваш  текущий  файл,
поместите курсор на то место,  где  должен  стоять  текст  и
введите команду:
     :r data
Вместо перемещения курсора вы можете указать  номер  строки.
Например, чтобы вставить  файл  data  после  56-й  строки  в
буфере, введите:
     :56r data

     7.19.6.   Провести глобальные изменения

:g/pattern/command - для   каждой   строки,   содержащей
     pattern  выполнить  команду   command   редактора   ex.
     Построчный редактор напечатает све строки,  сождержащие
     pattern;
:s/pattern/new_words - это  команда  замены.  Построчный
     редактор отыскивает первое появление символов pattern в
     текущей строке и заменяет его на new_words;
:s/pattern/new_words/g - редактор  ex  заменяет   каждое
     появление pattern в текущей строке;
:g/helix/s//double helix/g - эта  команда   осуществляет
     поиск  слова  helix.  Каждое  найденное   слово   helix
     заменяется на double helix. Ограничители после  команды
     "s"  позволяют  не  вводить  слово  helix  каждый  раз.
     Команда запоминает  слово  между  ограничителями  после
     команды "g".
     В табл. 17  приведены  команды  построчного  редактора,
доступные в редакторе vi.
                                                  Таблица 17
               Команды построчного редактора
 -----------------------------------------------------------
            Команда        |       Функция
 -----------------------------------------------------------
        :                  |Обозначает, что следующая за ней
                           |команда является командой пост-
                           |рочного редактора
        :sh            |Временный возврат к shell для вы-
                           |полнения команд shell
        ^d                 |Возврат из временного shell в
                           |текущее окно vi для продолжения
                           |редактирования
        :n             |Переход к n-ой строке буфера
     :x,yw data        |Записать строки от номера x до
                           |номера y в новый файл data
     :$                |Переход к последней строке
                           |буфера
     :.,$d             |Удалить все строки в буфере,
                           |начиная с текущей и до послед-
                           |ней строки
  :r shell.file        |Вставить содержимое shell.file
                           |после текущей строки в буфере
 :s/text/new_words/    |Заменить первое появление сим-
                           |волов text в текущей строке на
                           |new_words
 :s/text/new_words/g   |Заменить каждое появление сим-
                           |волов text в текущей строке на
                           |new_words
 :g/text/s//new_words/g|Заменить каждое появление сим-
                           |волов text в файле на new_words


                            132
                                        Продолжение табл. 17
 -----------------------------------------------------------
            Команда        |       Функция
 -----------------------------------------------------------
 -----------------------------------------------------------

     7.20.   Завершение работы с редактором vi

     Пять  основных  команд  могут  быть  использованы   для
завершения  работы  с  редактором   vi.   Команды,   которым
предшествует ":", являются командами построчного редактора:
:wq - записать содержимое буфера vi в  файл,  который  в
     данный момент редактируется и завершить работу с vi;
ZZ - записать содержимое буфера, если он изменялся с момента
     последней записи;
:q - записать временный буфер в новый  файл  filename  и
     завершить работу с редактором vi;
:q! - завершить  работу  с  редактором  vi  без   записи
     содержимого  буфера  в   файл;   не   учитываются   все
     изменения, проведенные в буфере;
:q - завершить  работу  с  редактором  vi   без   записи
     содержимого буфера в файл. Эта команда работает  в  том
     случае, если вы не производили изменений  в  буфере.  В
     противном случае vi выдаст предупреждающее сообщение  о
     том, что вы должны сохранить буфер или  воспользоваться
     для завершения работы с vi командой :q!.
     Что  нужно  сделать,  чтобы  дать  файлу  другое   имя?
Например, вы хотите записать  в  новый  файл  junk.  Введите
команду:
     :w junk
Затем завершите работу с vi:
     :q
     Если вы попытаетесь записать в уже  существующий  файл,
то получите предупреждающее  сообщение.  Например,  если  вы
попытаетесь  записать  в  файл   johnson,   система   выдаст
сообщение:
         "johnson" File exists - use "w!johnson"
         to overwrite
     Если вы хотите заменить содержимое существующего  файла
на содержимое буфера, то воспользуйтесь командой ":w!":
     :w! johnson
     В  табл.  18  приведены  команды  завершения  работы  с
редактором vi.
                                                  Таблица 18
                     Команды завершения
 -----------------------------------------------------------
      Команда        |       Функция
 -----------------------------------------------------------
     ZZ              |Записать буфер в файл, если после
                     |последней записи в буфере были сделаны
                     |изменения, и завершить работу с vi
     :wq         |Записать буфер в файл и завершить
                     |работу с vi
                     |
 :w filename     |Записать буфер в новый файл filename
 :q              |и завершить работу с vi
                     |
 :w! filename    |Перезаписать содержимое буфера в уже
 :q              |существующий файл filename и завершить


                            133
                                        Продолжение табл. 18
 -----------------------------------------------------------
      Команда        |       Функция
 -----------------------------------------------------------
                     |работу с vi
                     |
     :q!         |Завершить работу с vi без записи
                     |буфера в файл, даже если содержимое
                     |буфера изменялось
     :q          |Завершить работу с vi без записи
                     |буфера в файл, если буфер не изменялся
 -----------------------------------------------------------

     7.21.   Специальные опции для vi

     Команда vi имеет специальные опции. Они позволяют:
     - восстановить потерянный файл,  если  работа  vi  была
прервана;
     - поместить в буфер редактирования несколько  файлов  и
редактировать их по порядку;
     - просмотр  файла   без   риска   случайного   внесения
изменений в него.

     7.21.1.   Восстановление потерянного файла

     Если случайно произошло прерывание работы редактора vi,
то не производится запись текста из буфера обратно  в  файл.
Но   vi   сохраняет   копию   буфера.   Когда    вы    вновь
зарегистрируетесь в системе  UNIX,  вы  можете  восстановить
файл с помощью опции -r. Введите:
     vi -r filename
Все  или  почти  все  изменения,  которые  вы  выполнили  до
прерывания, вновь появятся в буфере vi, и вы  снова  сможете
продолжить редактирование файла или записать буфер в файл  и
завершить работу с vi.


     7.21.2.   Редактирование нескольких файлов

     Если вы  хотите  редактировать  в  одном  сеансе  более
одного файла, то введите  команду  vi,  указав  имя  каждого
файла:
     vi file1 file2
vi  ответит,  сколько  файлов   вы   будете   редактировать.
Например:
     2 files to edit
После того, как вы отредактировали первый файл, запишите все
изменения из буфера в файл file1:
     :w
Система ответит на эту команду сообщением в низу  экрана.  В
нем она напечатает имя файла, число строк и символов в  этом
файле. Затем вы можете начать редактировать следующий  файл,
задав команду:
     :n
Система в низу экрана  сообщит  вам  имя  следующего  файла,
который вы будете редактировать, и число строк и символов  в
этом файле.


                            134
     7.21.3.   Просмотр файла

     Один из способов просмотра файла,  это  воспользоваться
командами прокрутки и поиска. Однако вы можете защитить себя
от случайного внесения изменений  в  файл  во  время  сеанса
редактирования.   Чтобы   воспользоваться   опцией   "только
чтение", вызовите редактор следующим образом:
     view file
     В табл. 19 приведены специальные опции редактора vi.
                                                  Таблица 19
                    Специальные опции vi
 -----------------------------------------------------------
      Опция               |       Функция
 -----------------------------------------------------------
  vi file1 file2 file3|Ввести три файла (file1 file2
                          |и file3) в буфер vi для редакти-
                          |рования
                          |
 :w                   |Записать текущий файл и начать
 :n                   |редактирование следующего файла
                          |
 vi -r file1          |Восстановить изменения, сделан-
                          |ные в файле file1
 view file            |Осуществить просмотр файла
                          |с помощью опции "только чтение"
                          |чтобы предотвратить случайные
                          |изменения в файле file
  ----------------------------------------------------------