VI(1)

ИМЯ
vi, view,vedit - активизирует экранно-ориентированный редактор

СИНТАКСИС


	vi [option...] [command...] [filename...]

	view [option...] [command...] [filename...]

	vedit [option...] [command...] [filename...]

ОПИСАНИЕ
Редактор vi предлагает мощный набор операций для редактирования текста, основанный на некотором множестве мнемонических команд. Большинство команд - это одиночные клавиши, которые выполняют простые функции редактирования. Программа vi открывает "окно" размером с экран дисплея, в котором вы можете редактировать ваш файл. При помощи vi содержимое этого файла может быть легко и быстро изменено. При редактировании обеспечивается обратная визуальная связь (имя vi - сокращение от слова "visual").

Команда view аналогична vi, за исключением того, что автоматически устанавливается опция "только чтение" (-R). При использовании view файл изменяться не может.

Команда vedit аналогична vi, за исключением различия в установках опций. vedit использует режим novice, включает опцию magic, устанавливает опцию report=1, вызывает showmode и устанавливает redraw.

Опция showmode информирует пользователя vedit об используемом им режиме, выводя сообщение в нижнем правом углу экрана. Например, после использования команды ESC-i будет напечатано предложение "INSERT MODE" (режим вставки).

Необходимо отметить, что вы не можете установить опцию novice из пределов vi или ex. Если вы хотите использовать опцию novice, вы должны использовать утилиту vedit. (Существует возможность устанавливать опцию nonovice из пределов vedit).

vi и строковый редактор ex - это один и тот же редактор: имена vi и ex идентифицируют скорее особый пользовательский интерфейс чем функциональное различие. Различие в пользовательском интерфейсе, однако, совершенно поразительное. ex - мощный строчно-ориентированный редактор, схожий с редактором ed. Однако, и в 'ex', и в 'ed' визуальная корректировка экрана терминала ограничена, а команды вводятся с командной строки. С другой стороны, vi - это экранно-ориентированный редактор, устроенный таким образом, где то, что вы видите на экране, точно соответствует содержимому файла, который вы редактируйте.

В командной строке vi допустимы следующие опции:

-t Эквивалент первоначальной команды tag; редактирует файл, содержащий признак tag (тег), и устанавливает редактор согласно определению этого признака.
-r Используется при восстановлении, когда имело место повреждение редактора или всей системы, отыскивает последнюю сохраненную версию указанного файла. Если файл не определен, то эта опция выводит список сохраненных файлов.
-l Специфическая для редактирования LISP, эта опция устанавливает опции showmatch и lisp.
-Wn По умолчанию устанавливает "окно" размером 'n'. Чрезвычайно удобно в наборных устройствах, чтобы начинать работу в малом окне.
-R Устанавливает опцию "только чтение", при этом файлы могут только просматриваться, но не редактироваться.

БУФЕР РЕДАКТИРОВАНИЯ
vi не выполняет никаких операций редактирования над указанным вами файлом. Вместо этого он работает с копией вашего файла, которая находится в буфере редактирования.

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

РЕЖИМЫ РАБОТЫ
Внутри vi существует три отдельных режима:

Режим команды: в этом режиме сигнал с клавиатуры интерпретируется как команда редактирования.

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

Режим переключения в 'ex': редакторы vi и ex почти одинаковы. отличаясь, в основном, только пользовательским интерфейсом. В vi команды - это одиночные клавиши. В ex командами являются строки текста, завершенные нажатием клавиши RETURN. vi имеет специальную команду "escape", которая позволяет перейти к большинству строчно-ориентированных команд редактора ex. Для использования режима переключения в ex наберите символ ':'. Этот символ отобразится в командной строке как указатель на следующую команду редактора ex. Выполняемая команда может быть прервана нажатием клавиши INTERRUPT. Большинство команд обработки файла выполняется в режиме переключения в ex (например, команды чтения из файла и записи из буфера редактирования обратно в файл).

СПЕЦИАЛЬНЫЕ КЛАВИШИ
В редакторе vi существует несколько специальных клавиш. Следующие клавиши используются для редактирования, ограничения или прерывания команд и командных строк:

ESC Используется для возврата в режим команды vi или для отмены неполностью набранной команды.
RETURN Завершает команды ex в режиме переключения в ex. Также используется для начала новой строки в режиме вставки.
INTERRUPT Часто то же самое, что и клавиша DEL или RUBOUT во многих терминалах. Генерирует прерывание, выдавая редактору указание на остановку текущей работы. Используется для прекращения любой выполняемой команды.
/ Используется для определения строки, по которой осуществляется поиск. Знак "косая черта" появляется в строке состояния как указатель на шаблон поиска. Знак вопроса '?' работает также, только поиск в файле ведется назад (т.е. в обратном направлении).
: Двоеточие является указателем на команду редактора ex. После него вы можете набрать любую команду редактора ex, затем нажать клавишу ESC или RETURN, после чего заданная команда будет выполнена.

В режиме вставки могут использоваться следующие символы:

BKSP В текущей строке возвращает курсор назад на один символ. Последний символ, набранный перед BKSP, удаляется из входного буфера, но остается на экране дисплея.
Ctrl-U Перемещает курсор назад на первый символ вставки или перезапускает ввод.
Ctrl-V Удаляет специальное значение следующего набранного символа. Используйте Ctrl-V для вставки управляющих символов. Символы "перевод строки" и Ctrl-J не могут быть вставлены в текст иначе, как символы "новая строка". Ctrl-Q и Ctrl-S захватываются операционной системой перед тем, как будут обработаны редактором vi, поэтому они тоже не могут быть вставлены как текст.
Ctrl-W Перемещает курсор назад на первый символ последнего вставленного слова.
Ctrl-T При вводе, с установкой опции autoindent и в начале текущей строки введение этого символа обеспечит вставку пустого пространства размером shiftwidth.
Ctrl-@ Введенный в качестве первого символа при вводе, он заменяется на последний вставленный текст, и ввод прекращается. Из последней вставки запоминается только 128 символов. Если было вставлено более 128 символов, то эта команда символы не вставляет. Символ Ctrl-@ не может находиться в файле, даже заключенный в кавычки.

НАЧАЛО РАБОТЫ И ВЫХОД ИЗ РЕДАКТОРА VI
Для входа в редактор vi наберите:

vi Редактирует пустой буфер редактирования
vi file Редактирует указанный файл
vi +123 file Переходит на строку с номером 123
vi +45 file Переходит на строку с номером 45
vi +/word file Ищет первое вхождение слова "word"
vi +/tty file Ищет первое вхождение слова "tty"
Существует несколько путей выхода из редактора vi:
ZZ Содержимое буфера редактирования записывается в файл только при условии, что были сделаны какие-либо изменения.
:x Содержимое буфера редактирования записывается в файл только при условии, что были сделаны какие-либо изменения.
:q! Отменяет сеанс редактирования. Восклицательный знак указывает редактору vi на необходимость безусловного выхода. В этом случае содержимое буфера редактирования не переписывается.

КОМАНДЫ РЕДАКТОРА VI
vi - это визуальный редактор с "окном" в редактируемом файле. То, что вы видите на экране, является представлением редактора vi содержимого файла. Команды не вызывают никаких изменений на экране, пока не будет нажата команда исполнения. Большинство команд могут использовать счетчик, стоящий перед ними и показывающий число повторов команды. Этот параметр в следующих описаниях команд не задан, но он подразумевается, если не отвегнут каким-нибудь стоящим перед ним аргументом. Когда редактор vi получает команду неправильного формата, он сигнализирует об этом звонком.

ПЕРЕМЕЩЕНИЕ КУРСОРА
Клавиши управления курсором позволяют вам перемещать ваш курсор по файлу. Следует отметить, в частности, клавиши направления (если они имеются на вашем терминале), клавиши управления курсором H, J, K, L и SPACEBAR, BKSP, Ctrl-N и Ctrl-P. Эти три набора клавиш выполняют одинаковые функции.

Forward Space (Перемещение вперед):
I, SPACEBAR, клавиша перемещения вправо.
Синтаксис:
I
SPACEBAR
Клавиша перемещения вправо
Функция:
Перемещает курсор на один символ вперед. Если задан счетчик, то перемещает вперед на указанное число символов. Вы не можете переместиться за предел конца строки.

Backspace (Перемещение назад):
h, BKSP, клавиша перемещения влево.
Синтаксис:
h
BKSP
Клавиша перемещения влево
Функция:
Перемещает курсор на один символ назад. Если задан счетчик, то перемещает назад на указанное число символов. Вы не можете переместиться за предел начала строки.

Next Line (Следующая строка):
+, RETURN, Ctrl-N, LF.
Синтаксис:
+
RETURN
Функция:
Перемещает курсор вниз на начало следующей строки.
Синтаксис:
j
Ctrl-N
LF
Клавиша перемещения вниз
Функция:
Перемещает курсор вниз на одну строку, оставляя его в прежней колонке. Обратите внимание на различие между этими командами и предыдущим набором команд (+, RETURN), которые перемещают курсор на НАЧАЛО cледующей строки.

Previous Line (Предыдущая строка):
-, k, Ctrl-P, клавиша перемещения вверх.
Синтаксис:
k
Ctrl-P
Клавиша перемещения вверх
Функция:
Перемещает курсор на одну строку вверх, оставляя его в прежней колонке. Если задан счетчик, то курсор перемещается на указанное число строк.
Синтаксис:
Функция:
Перемещает курсор на начало предыдущей строки. Если задан счетчик, то курсор перемешается на указанное число строк.

Beginning of Line (Начало строки):
O, ^.
Синтаксис:
^
O
Функция:
Перемещает курсор на начало текущей строки. Обратите внимание, что 'O' всегда возвращает курсор на первый символ текущей строки. Знак '^' работает несколько иначе: он перемещает курсор на первый символ строки, который не является меткой табуляции или пробелом. Это очень удобно при редактировании файла, имеющего большое число абзацев, например, текста программы.

End of Line (Конец строки):
$
Синтаксис:
$
Функция:
Перемещает курсор в конец текущей строки. Обратите внимание, что курсор находится над последним символом в строке. Если задан счетчик, то курсор перемещается на (счетчик-1)-строк вперед в конец строки.

Goto Line (Перейти к строке):
G
Синтаксис:
G
Функция:
Перемещает курсор на начало строки с номером linenumber. Если аргумент line number не задан, то курсор перемещается на начало последней строки файла. Для определения номера текущей строки нажмите Ctrl-G.

Column (Колонка):
|
Синтаксис:
|
Функция:
Перемещает курсор в текущей строке в позицию с номером column. Если этот аргумент не задан, то курсор перемещается в первую позицию текущей строки.

Word Forward (Перемещение вперед на слово):
w, W.
Синтаксис:
w
W
Функция:
Перемещает курсор вперед на начало следующего слова. Команда 'w' ищет слово, определенное как строку буквенно-числовых символов, разделенных пунктуацией или пустым пространством (например, метка табуляции, символ новой строки или пробел). Команда 'W' ищет слово, определенное как строку непустых символов.

Back Word (Перемещение назад на слово):
b, B.
Синтаксис:
b
B
Функция:
Перемещает курсор назад на начало текущего слова. Команда 'b' ищет слово, определенное как строку буквенно-числовых символов, разделенных пунктуацией или пустым пространством (например, метки табуляции, символы новой строки или пробелы). Команда 'B' ищет слово, определенное как строку непустых символов. Если курсор уже находится внутри слова, то он перемещается назад, на начало этого слова.

End (Конец):
e, E.
Синтаксис:
e
E
Функция:
Перемещает курсор в конец слова. Команда 'e' перемещает курсор на последний символ слова, где слово определено как строка буквенно-числовых символов, разделенных пунктуацией или пустым пространством (например, метки табуляции, символы новой строки или пробелы). Команда 'E' перемещает курсор на последний символ слова, где слово определено как строка непустых символов. Если курсор уже находится внутри слова, то он перемещается на конец этого слова.

Sentence (Предложение):
(, ).
Синтаксис:
(
)
Функция:
Перемещает курсор в начало (левая скобка) или в конец предложения (правая скобка). Предложение определено как последовательность символов, заканчивающаяся точкой (.), знаком вопроса (?) или восклицательным знаком (!) и следующими за ними двумя пробелами или символами новой строки. Предложение начинается с первого непустого символа, за которым следует все предложение. Предложение также ограничено параграфом или разделителями разделов. Смотрите ниже.

Paragraph (Параграф):
{, }.
Синтаксис:
{
}
Функция:
Перемещает курсор на начало ({) или конец (}) параграфа. Параграф определен опцией paragraph. По умолчанию параграфы разделены макросами команды nroff - '.IP', '.LP', '.P', '.QP', '.bp'. Параграфы также начинаются после пустых строк.

Section (Раздел):
[[, ]].
Синтаксис:
[[
]]
Функция:
Перемещает курсор на начало ([[) или конец (]]) раздела. Раздел определен опцией section. По умолчанию разделы разделены макросами команды nroff - '.NH', '.SH'. Разделы также начинаются с символов "прогон страницы" (Ctrl-L) и со строк, начинающихся со знака ({).

Match Delimiter (Согласующий разделитель):
%.
Синтаксис:
%
Функция:
Перемещает курсор на согласующий разделитель, которым могут быть круглая, операторная или фигурная скобки. Это очень удобно при согласовании пар вложенных круглых, операторных и фигурных скобок.

Home (Возврат на исходное место):
H.
Синтаксис:
[offset] H
Функция:
Перемещает курсор в верхний левый угол экрана. Используйте эту команду для быстрого перемещения наверх экрана. Если задан параметр offset, то курсор возвращается на (offset-1)-линий от вершины экрана. Необходимо отметить, что команда 'dH' уничтожает все строки от текущей строки до верхней строки, показанной на экране.

Middle Screen (Середина экрана):
M.
Синтаксис:
M
Функция:
Перемещает курсор на начало средней линии экрана. Используйте эту команду для быстрого перемещения курсора в середину экрана сверху или снизу экрана. Необходимо отметить, что команда 'dM' удаляет все строки, от текущей до выбранной командой 'M'.

Lower Screen (Низ экрана):
L.
Синтаксис:
[offset] L
Функция:
Перемещает курсор на нижнюю строку экрана. Используйте эту команду для быстрого перемещения в нижнюю часть экрана. Если задан параметр offset, то курсор возвращается на (offset-1)-линий от самого низа экрана. Необходимо отметить, что команда 'dL' уничтожает все линии, от текущей до нижней линии, показанной на экране.

Previous Context (Предыдущий контекст):
", ".
Синтаксис:
"
'character (символ)
"
'character (символ)
Функция:
Перемещает курсор на предыдущий контекст или на контекст, отмеченный командой 'm'. Если одиночная кавычка или обратная кавычка сдвоена, то курсор перемещается на предыдущий контекст. Если после такой же кавычки задан одиночный символ, то курсор перемещается в место расположения указанной кавычки, как определенной командой 'm'. Предыдущий контекст - это место в файле последнего несвязанного (nonrelative) перемещения курсора. Одиночная кавычка (') используется для перемещения на начало начало строки, представляющей предыдущий контекст. Обратная кавычка (') используется для перемещения к предыдущему контексту внутри строки.

КОМАНДЫ ЭКРАНА
Команды экрана не являются командами управления перемещением курсора и не могут использоваться в командах удаления как разграничители объектов текста. Однако команды экрана осуществляют перемещение текста и очень удобны для страничной организации или "прокрутки" информации из файла на экране дисплея. Эти команды описаны ниже.

Scroll (Прокрутка):
Ctrl-U, Ctrl-D.
Синтаксис:
[size] Ctrl-U
[size] Ctrl-D
Функция:
"Прокручивает" экран на половину окна вверх (Ctrl-U) или вниз (Ctrl-D). Если задан аргумент size, то производится прогон на (size)-строк. Это значение запоминается для всех последующих операций "прокрутки".

Page (Разбиение на страницы):
Ctrl-F, Ctrl-B.
Синтаксис:
Ctrl-F
Ctrl-B
Функция:
Постранично листает экран вперед и назад. Если возможно, то между страницами сохраняются две неразрывные строки. Предварительно заданный счетчик указывает число страниц, на которое надо передвинуть вперед или назад.

Status (Состояние):
Ctrl-G.
Синтаксис:
Bell
Ctrl-G
Функция:
Высвечивает состояние редактора vi в строке состояния. Это показывает вам имя редактируемого файла, был ли он изменен, номер текущей строки, число строк в файле и процент файла (в строках), предшествующий месту нахождения курсора.

Zero Screen (Обнуление экрана):
z
Синтаксис:
[linenumber]z[size]RETURN
[linenumber]z[size].
[linenumber]z[size]
Функция:
Перерисовывает содержимое экрана дисплея с текущей строки, расположенной или "обнуленной" (zeroed) в верхней части, в середине или в нижней части экрана, соответственно. Если вы задаете аргумент size, то число высвечиваемых линий равно size. Если задан стоящий впереди аргумент linenumber, то строка с номером linenumber размещается вверху экрана. Если последний аргумент - RETURN, то текущая строка размещается вверху экрана. Если последний аргумент - (.), то текущая строка размещается в середине экрана. Если последний аргумент - (-), то текущая строка размещается внизу экрана.

Redraw (Перерисовка):
Ctrl-R, Ctrl-L.
Синтаксис:
Ctrl-R
Ctrl-L
Функция:
Перерисовывает содержимое экрана. Используйте эту команду для стирания любых системных сообщений, которые могут накладываться на информацию, содержащуюся на вашем экране. Необходимо отметить, что системные сообщения не влияют на редактируемый вами файл.

ВСТАВКА ТЕКСТА
Команды вставки текста всегда переводят вас в режим вставки. Выход из режима вставки всегда осуществляется нажатием клавиши ESC. Следующие команды вставки являются "чистыми" командами вставки; при их применении текст не уничтожается. Эти команды отличаются от команд модификации текста - изменения, замещения и подстановки, которые сначала удаляют, а затем вставляют текст за одну операцию.

Insert (Вставить):
i, I.
Синтаксис:
i[text]ESC
I[text]ESC
Функция:
Вставляет текст text в буфер редактирования. Команда 'i' переводит вас в режим вставки. Текст вставляется перед символом, расположенным под курсором. Для вставки новой строки нажмите RETURN. Для выхода из режима вставки нажмите ESC. Команда 'I' также переводит вас в режим вставки, но начинает вставлять текст с начала текущей строки, а не перед курсором.

Append (Присоединить):
a, A.
Синтаксис:
a[text]ESC
A[text]ESC
Функция:
Присоединяет текст text к содержимому буфера редактирования. Команда 'a' работает точно также, как команда 'i', только вставка текста начинается после курсора, а не перед ним. Это является одной из возможностей добавления текста в конец строки. Команда 'A' начинает вставку текста в конце текущей строки, а не после курсора.

Open New Line (Открыть новую строку):
o, O.
Синтаксис:
o[text]ESC
O[text]ESC
Функция:
Открывает новую строку и вставляет текст. Команда 'o' открывает новую строку под текущей строкой, команда 'O' открывает новую строку над текущей строкой. После того, как новая строка открыта, обе команды работают аналогично команде 'I'.

УДАЛЕНИЕ ТЕКСТА
Большинство команд удаления текста используют в качестве оператора выполнения клавишу 'D'. Этот оператор удаляет текстовые объекты, ограниченные курсором и командой перемещения курсора. Удаленный текст всегда продолжает храниться в буфере. Команды удаления описаны ниже.

Delete Character (Удалить символ):
x, X.
Синтаксис:
x
X
Функция:
Удаляет символ. Команда 'x' удаляет символ, находящийся под курсором. При заданном впереди счетчике count удаляется (count)-символов вправо от символа, стоящего под курсором. Это быстрый и легкий способ удалить несколько символов. Команда 'X' удаляет символ, расположенный перед курсором. При заданном впереди счетчике count удаляется (count)-символов в обратном направлении, начиная с символа, стоящего перед курсором.

Delete (Удалить):
d, D.
Синтаксис:
d cursor-movement
dd
D
Функция:
УУдаляет текстовый объект. Команда 'd' в качестве аргумента берет cursor-movement (перемещение курсора). Если cursor-movement - внутристрочная команда, то производится удаление от курсора до конца текстового объекта, ограниченного аргументом cursor-movement. Удаление в прямом направлении (вперед) удаляет символ, расположенный под курсором; удаление в обратном направлении (назад) не выполняется. Если cursor-movement - многострочная команда, то удаление производится с текущей строки, включая ее саму, до текстового объекта, ограниченного аргументом cursor-movement.

Команда 'dd' удаляет целые строки. Команда 'D' удаляет все от позиции курсора, включая ее, до конца текущей строки.

Удаленный текст автоматически заносится в стек буферов, пронумерованных от 1 до 9. Самый последний удаленный текст также размещается в специальном буфере удаления, который имеет логический номер 0. Этот специальный буфер является буфером по умолчанию для всех команд 'put' (поместить), используя двойные кавычки (") для указания номера буфера для команд удаления, помещения и "выдергивания". Доступ к буферам с 1 по 9-й может быть организован командами 'p','P' (поместить) с присоединением двойных кавычек к номеру буфера. Например, команда:


	"4p

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

МОДИФИКАЦИЯ ТЕКСТА
Команды модификации текста, все вызывают замену одного текста другим. Это означает, что некоторый текст, вероятно, будет удален. Все команды модификации текста могут быть отменены командой 'u'.

Undo (Уничтожить сделанное):
u, U.
Синтаксис:
u
U
Функция:
Уничтожает результат последней команды вставки или удаления. Команда 'u' уничтожает результат последней команды вставки или удаления. Это означает, что после выполнения команды вставки команда 'u' удаляет вставленный текст, а после команды удаления - вставляет текст обратно. В целях уничтожения все команды модификации текста рассматриваются как выполняюшие вставку. Команда 'U' восстанавливает текущую строку в ее первоначальное состояние, прежде чем она была отредактирована, независимо от того, сколько раз она редактировалась с того момента, когда вы перешли на нее.

Repeate (Повторить):
.
Синтаксис:
.
Функция:
Повторяет последнюю команду вставки или удаления. Существует специальный случай для повтора команд 'p' и 'P'. Когда эти команды стоят перед именем буфера удаления, следующая команда 'u' высвечивает содержимое буфера удаления.

Change (Изменить):
c, C.
Синтаксис:
c cursor-movement text ESC
C text ESC
cc text ESC
Функция:
Изменяет текстовый объект и заменяет его на текст text. Текст вставляется, как по команде 'i'. Знак доллара ($) отмечает степень изменения. Команда 'c' изменяет произвольно выбранный текстовый атрибут, ограниченный курсором и аргументом cursor-movement. Команды 'C' и 'cc' обрабатывают строки целиком и по выполняемым функциям идеинтичны.

Replace (Заменить):
r, R.
Синтаксис:
r char
R text ESC
Функция:
Заменяет символ или строку на char или text. Используйте 'r' для замены одиночного символа, а 'R' - для замены всей строки. Счетчик count обеспечивает (count)-кратную вставку текста.

Substitute (Подставить):
s, S.
Синтаксис:
s text ESC
S text ESC
Функция:
Замещает текущий символ или текущую строку текстом text. Используйте команду 's' для замены одиночного символа новым текстом. Используйте команду 'S' для замены текущей строки новым текстом. Если впереди задан счетчик count, то текст вставляется (count)-раз вместо заменяемого символа или строки, в зависимости от того, какая команда используется.

Filter (Фильтрация):
!
Синтаксис:
! cursor-movement cmd RETURN
Функция:
Фильтрует текстовый объект, ограниченный курсором и аргументом cursor-movement, посредством какой-либо команды cmd системы XENIX. Например, следующая команда сортирует все строки, расположенные между курсором и нижней часть экрана, заменяя отсортированные строки другими, определенными строками:

	!L sort

Как часть команды cmd могут быть включены аргументы и метасимволы shell; однако стандартный ввод и вывод всегда связаны с текстовым объектом, над которым выполняется фильтрация.

Join Lines (Объединить строки):
J.
Синтаксис:
J
Функция:
Объединяет текущую строку со следующей строкой. Если задан счетчик count, то объединяется (count)-строк.

Shift (Сдвинуть):
<, >.
Синтаксис:
>[cursor-movement]
<[cursor-movement]
>>
<<
Функция:
Сдвигает текст вправо (>) или влево (<). Текст сдвигается на количество позиций, определяемое значением shiftwidth, которое обычно равно восьми пропускам. Обе команды, > и <, сдвигают все строки в текстовом объекте, ограниченные курсором и аргументом cursor-movement. Команды >> и << выполняют действие над целыми строками. Все версии команды могут использовать стоящий впереди счетчик для увеличения числа объектов, над которыми выполняется операция.

ПЕРЕМЕЩЕНИЕ ТЕКСТА
Команды перемещения текста перемещают его в/из буферов, поименованных от 'a' до 'z' и из буферов удаления с номерами от 1 до 9. Эти команды или "выдергивают" текст из буфера редактирования и помещают его в определенный буфер, или "помещают" текст в буфер редактирования из поименованного буфера или из буфера удаления. По умолчанию текст помещается и извлекается из "безымянного" буфера, в котором также размещается последний удаленный текст. Таким образом, совершенно резонно удалить текст, затем передвинуть ваш курсор в то место, куда вы хотите вставить удаленный текст, и после этого поместить текст обратно в буфер редактирования, в новое место, с помощью команды 'p'/'P'.

Поименованные буферы наиболее удобны для сохранения дорожки нескольких частей текста, которую вы хотите иметь постоянно наготове для более позднего доступа к этим текстам, или их перемещения и переразмещения. Эти буферы поименованы буквами от 'a' до 'z'. Для ссылки в команде на один из этих бууферов (или на один из буферов удаления) используйте знак кавычки. Например, для извлечения строки из файла в буфер 'a' наберите "ayy. Для того, чтобы поместить этот текст обратно в файл, наберите "ap.

Если вы удаляете текст в буфере с именем 'A', а не 'a', то текст присоединяется к содержимому буфера. Необходимо отметить, что содержимое поименованных буферов не разрушается при переключении файлов. Поэтому вы должны удалить или извлечь текст в буфер, выбрать новый файл и затем выполнить команду 'put'. Содержимое буферов теряется при выходе из редактора, поэтому будьте осторожны.

Put (Поместить):
p, P.
Синтаксис:
["alphanumeric]p
["alphanumeric]P
Функция:
Помещает текст из буфера в буфер редактирования. Если имя буфера-источника не указано, то текст выбирается из "безымянного" буфера. Команда 'p' помещает текст под текущей строкой или после курсора, в зависимости от того, содержит буфер полную строку или нет. Команда 'P' помещает текст или над текущей строкой, или перед курсором, в зависимости от того, содержит буфер неполную строку или нет.

Yank (Извлечь):
y, Y.
Синтаксис:
["letter]y cursor-movement
["letter]yy
["letter]Y
Функция:
Копирует текст из буфера редактирования в поименованный буфер. Если имя буфера не указано, то текст помещается в "безымянный" буфер. Если используется строчная буква letter, то текст добавляется в буфер, не переписывая и не разрушая предыдущее содержимое. Когда в качестве аргумента используется cursor-movement, то извлекается ограниченный текстовый объект. Команды 'Y' и 'yy' извлекают одну строку, или, если задан счетчик, несколько строк.

ПОИСК
Команды поиска осуществляют поиск текста, соответствующего заданному регулярному выражению и находящегося в буфере редактирования, в прямом или обратном направлении.

Search (Найти):
/, ?
Синтаксис:
/[pattern]/[offset]RETURN
/[pattern]RETURN
?[pattern]?[offset]RETURN
?[pattern]RETURN
Функция:
Осуществляет поиск текста, соответствующего шаблону pattern, в прямом (/) или обратном (?) направлении. Строка является действительным регулярным выражением. Если шаблон pattern не задан, то для поиска используется последнее используемое значение pattern. После второго разделителя может быть задан аргумент offset, определяющий начало строки, относительно строки, в которой был найден шаблон pattern. Например,

	/word/

находит начало строки, непосредственно предшествующей строке, содержащей слово "word". Другая команда:


	/word/+2

находит начало строки, стоящей на две строки дальше от той строки, которая содержит слово "word". Смотрите также опции ignorecase и magic.

Next String (Следующая строка):
n, N.
Синтаксис:
n
N
Функция:
Повторяет последнюю команду поиска. КОманда 'n' повторяет поиск в том же направлении, что и последняя команда поиска. Команда 'N' повторяет поиск в направлении, противоположном направлению последней команды поиска.

Finf Character (Найти символ):
f, F.
Синтаксис:
f char
F char
;
,
Функция:
Находит символ char в текущей строке. Команда 'f' выполняет поиск в прямом направлении, команда 'F' - в обратном. Знак (;) повторяет поиск последнего символа. Запятая (,) меняет направление поиска на противоположное.

To Character (Перейти к символу):
t, T.
Синтаксис:
t char
T char
;
,
Функция:
Помещает курсор над символом char. Знак (;) повторяет поиск последнего символа. Знак (,) меняет направление поиска на обратное.

Mаrk (Отметить):
m
Синтаксис:
m letter
Функция:
Отмечает место в файле, где находится буква letter. Вы можете переместиться к этой отметке при помощи команды 'to mark', описанной ниже. Это часто удобно использовать для создания метки, перемещения курсора от этой метки в необходимом направлении и затем удаления от курсора до метки 'a' с помощью команды d'a.

To Mark (Перейти на метку):
', '.
Синтаксис:
'letter
'letter
Функция:
Перемещает курсор на метку letter. Эта команда позволяет вам переместиться к месту расположения метки. Метки обозначаются одиночными строчными буквами алфавита. Прежде чем вы сможете переместиться к метке, вам необходимо сначала создать ее с помощью команды 'm'. Знак (') перемещает вас непосредственно в позицию расположения метки внутри строки; знак (') перемещает вас на начало строки, содержащей метку. Необходимо отметить, что эти команды являются также разрешенными командами перемещения курсора.

КОМАНДЫ ВЫХОДА И ПЕРЕКЛЮЧЕНИЯ
Существует несколько команд, которые используются для переключения режима команды vi и для выхода из редактора. Эти команды описаны ниже.

ex Escape (Переключить на режим 'ex'):
':'
Синтаксис:
:
Функция:
Вводит режим переключения в 'ex' для выполнения команды редактора ex. В строке состояния появляется двоеточие (:) как подсказка-указание для ввода ex-команды. Затем вы можете ввести ex-команду, закончить ее символами RETURN или ESC, после чего эта команда выполнится. Затем вам предложат нажать клавишу RETURN для возврата в режим команды vi. При вводе ex-команды или при ее выполнении вы можете нажать клавишу INTERRUPT для прекращения того, что вы собирались делать, и для возврата в режим команды vi.

Exit Editor (Выход из редактора):
ZZ
Синтаксис:
ZZ
Функция:
Осуществляет выход из режима команды vi и записывает редактируемый файл, если были сделаны какие-либо изменения. При этом вы возвращаетесь в тот интерпретатор shell, из которого был запущен редактор vi.

Quit to ex (Возврат в режим 'ex'):
Q
Синтаксис:
Q
Функция:
Вводит режим редактора ex. Когда вы сделайте это, то будете редактировать тот же файл. Вы можете вернуться в режим редактора vi, набрав команду vi в редакторе ex.

КОМАНДЫ РЕДАКТОРА EX
Ввод двоеточия (:) при нахождении в режиме команды выдает подсказку-указание (:) в строке состояния. Это подсказка для ввода команды, доступной в строковом редакторе ex. В основном, ex-команды позволяют вам записывать в/читать из файлов, переключать на shell или менять редактируемые файлы.

Большинство этих команд выполняет действия, которые оказывают влияние на "текущий" по умолчанию файл. Текущим обычно считается файл, который вы выбрали при запуске редактора vi, хотя текущий файл может быть изменен командой file(f) или командой next(n). По основным характеристикам эти команды совпадают с аналогичными командами редактора ex. Все подобные команды редактора ex прекращаются по нажатию клавиш RETURN или ESC. В наших примерах мы будем использовать RETURN. Ввод команды заканчивается нажатием INTERRUPT.

СТРУКТУРА КОМАНДЫ
В качестве имен большинства ex-команд используются английские слова, а доступной для использования аббревиатурой являются начальные буквы этих слов. В описаниях обслуживаются только аббревиатуры как наиболее часто используемая форма записи команды. В пользу часто используемых команд решается проблема неопределенности аббревиатур. Например, для команды substitute в качестве аббревиатуры можно использовать 's', в то время как наиболее короткой доступной формой записи команды set является 'se'.

Большинство команд использует стоящие впереди адреса, определяющие строки, над которыми необходимо выполнять действие. Ряд команд также может содержать следующий за ними счетчик count, показывающий число строк, которые захватываются при вызове команды. Числа count при необходимости округляются в сторону меньшего значения. Таким образом, команда '10p' высвечивает десятую строку в буфере, а команда 'move 5' перемещает текущую строку за строку с номером 5.

Некоторые команды также используют другую информацию или параметры, размещенные после имени команды. В качестве примеров можно привести имена опций в команде set, например, set number, имя файла в команде edit, регулярное выражение в команде substitute, или адрес назначения для команды copy. Например:


	1,5 copy 25

Ряд команд имеет варианты. Разная форма команды вызывается указанием восклицательного знака (?) сразу за именем команды. Некоторые из вариантов, назначаемых по умолчанию, могут контролироваться с помощью опций; в этом случае восклицательный знак отменяет назначение, принятое по умолчанию.

Дополнительно к этому, большое число команд использует флаги, включая символы 'p' и 'l'. Эти два символа должны стоять после пробела или метки табуляции. В таком случае, команда, обозначенная этими символами, выполняется после того, как выполнится команда. Т.к. редактор ex высвечивает обновленную текущую строку после каждого обновления, необходимость в использовании 'p' возникает редко. С этими флагами может быть задано любое число знаков '+' и '-'. Если они используются, то перед выполнением команды печати к значению текущей строки добавляется определенное смещение.

Большинство команд, изменяющих содержимое буфера редактирования, обеспечивает обратную связь, если число изменений превышает предел, заданный параметром report option. Эта обратная связь помогает обнаружить нежелательные большие изменения таким образом, что они затем могут быть легко и быстро отменены командой undo. После выполнения команд с глобальным эффектом вы будете проинформированы, если суммарный объем изменений в нескольких строках, расположенных в буфере, превысит заданный предел во время выполнения этой команды.

АДРЕСОВАНИЕ КОМАНДЫ
Следующие обозначения определяют синтаксис адресования строк в ex-командах:

. (точка)
Текущая строка. Большинство команд представляет текущую строку как ппоследнюю строку, которую они обрабатывали. Текущая строка для большинства команд является адресом по умолчанию, поэтому знак точки редко используется в качестве адреса.

n
n-строка в буфере редактирования; строки пронумерованы последовательно, начиная с 1.

$
Последняя строка в буфере.

%
Аббревиатура для "1,$"; определяет желаемый буфер.

+n или -n
Смещение 'n' относительно текущей строки буфера. Формы записи '.+3', '+3', '+++' идеинтичны. Если текущая строка имеет номер 100, то приведенные записи указывают на строку с номером 103.

/pattern/ или ?pattern?
Сканирует текст вперед или назад, соответственно, в поиске регулярного выражения, заданного шаблоном pattern. Сканирование ведется обычно до конца буфера. Если вы хотите только распечатать следующую строку, содержащую pattern, хвостовые знаки (/) и (?) могут быть опущены. Если параметр pattern пропущен или пустой, то выделяется строка, соответствующая последнему определенному регулярному выражению. Формы RETURN и ??RETURN выполняют сканирование, используя последнее указанное регулярное выражение. После замещения RETURN и ??RETURN будут выполнять сканирование, используя это замещенное регулярное выражение.

" или 'x
Перед каждым независимым перемещением знака точки (.), определяющего текущую строку, предыдущая строка отмечается меткой, роль которого обычно выполняет символ ("). Это облегчает ссылку или возврат на этот предыдущий контекст. Метки устанавливаются командой 'm' редактора vi, используя одиночную строчную букву в качестве имени метки. На отмеченную строку позже можно сослаться с помощью записи 'x, где x - имя метки.

Адреса команд состоят из серии адресов, разделенных знаками (,) или (;). Такие адресные списки сравниваются слева направо. Если адрес разделен знаком (;), то знак текущей строки (.) устанавливается в значение предыдущего адресного выражения, прежде чем будет интерпретирован следующий адрес. Если задано больше адресов, чем требуется команде, то, по крайней мере, один или два последних адреса игнорируются. ЕСли команда имеет два адреса, то первая адресуемая строка должна предшествовать второй строке в буфере. В списке адресов допускается спецификация пустого адреса; в этом случае по умолчанию принимается знак текущей строки (.). Таким образом, ",100" эквивалентно ".,100". Если перед командой, не требующей адреса, он все же задан, то это считается ошибкой.

ФОРМАТ КОМАНДЫ
Для всех ex-команд используется следующий формат:


	[address][command][!][parameters][count][flags]

	[адрес][команда][!][параметры][счетчик][флаги]

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

КОМАНДЫ СПИСКА АРГУМЕНТОВ
Команды списка аргументов позволяют вам работать с набором файлов посредством запоминания списка имен файлов, которые определяются при активизации редактора vi. Команда args позволяет вам проверить этот список. Команда file дает вам информацию о текущем файле. Команда n(next) позволяет вам либо редактировать следующий файл из списка аргументов, либо изменить список. Команда rewind позволяет вам перезапустить редактирование файлов в списке. Все эти команды описаны ниже:

args
Высвечиваются элементы списка аргументов, при этом текущий аргумент заключен в квадратные скобки. Например, список может выглядеть следующим образом: file1 file2 [file3] file4 file5. Текущим является файл file3.

f
Высвечивает имя текущего файла, независимо от того, был ли он модифицирован с момента последней команды write (или файл доступен только по чтению), номер текущей строки, число строк в буфере и уже отредактированную часть содержимого буфера в процентах. В редких случаях, когда текущий файл помечен как "[Not edited]" (не редактируется), об этом также сообщается; в таких случаях вы должны использовать команду 'w!' для записи в файл, т.к. редактор не уверен, что команда 'w' не разрушит файл, не относящийся к текущему содержимому буфера.

f file
Текущее имя файла заменяется на имя file, которое подразумевается как "[Not edited]".

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

n!
Этот вариант подавляет предупреждения о модификациях, не записанных в буфер, отвергая необратимо любые изменения, которые могли быть выполнены.

n[+command] filelist
Указанный список файлов filelist расширяется, и результирующий список заменяет текущий список аргументов; затем редактируется первый файл из нового списка. Если задана команда command (она не должна содержать пробелов), то она выполняется после редактирования первого такого файла.

rew
Порядок аргументов в списке меняется на обратный, и редактируется первый по новому порядку файл.

rew!
Порядок аргументов в списке меняется на обратный, и подавляются любые изменения, сделанные в текущем файле.

Если вы используйте интерпретатор shell языка "Си" (C-Shell) и устанавливаете переменную prompt для вывода подсказки-указания prompt), требуемой для работы с неинтерактивными интерпретаторами shell, то при использовании вами выше приведенных команд prompt рассматривается как имя файла. Это может привести к возникновению неожиданных ситуаций. Чтобы избежать их, используйте значение prompt, назначаемое по умолчанию, какое определено в файле /usr/lib/mkuser/mkuser.cshrc.

КОМАНДЫ РЕДАКТИРОВАНИЯ
Для редактирования файла, отличного от редактируемого в настоящее время, вы часто будете использовать один из вариантов команды 'e'.

Отметим, что в последующем изложении имя текущего файла всегда запоминается редактором vi и помечается знаком (%). Имя предыдущего файла в буфере редактирования отмечено знаком (#).

e file
Используется для начала редактирования нового файла. Редактор сначала проверяет, был ли модифицирован буфер с момента использования последней команды 'w'. Если это было сделано, то выдается предупреждение, и команда прерывается. Иначе, команда удаляет желаемое содержимое буфера редактирования, делает указанный файл текущим и высвечивает новое имя файла. После проверки, что этот файл действителен (т.е. не является двоичным файлом, каталогом или устройством), редактор читает файл в свой буфер. Если чтение файла выполнено без ошибок, в строке состояния появляется число прочитанных строк и символов. Если файле встречаются какие-либо символы, не соответствующие коду ASCII, то они лишаются своих старших битов, которые определяют несоответствие коду ASCII, а все пустые символы подавляются. Если никакая из перечисленных ошибок не возникает, то файл считается отредактированным. Если последняя строка входного файла пропускает хвостовой символ новой строки, то она подавляется и об этом выдается сообщение. Текущей строкой изначально считается первая строка файла.

e! file
Такой вызов подавляет сообщение о модификациях, которые были сделаны и не записаны из буфера редактирования, вызывая, тем самым, подавление всех изменений, которые были выполнены перед редактированием нового файла.

e +n file
Заставляет редактор начать редактирование с n-строки. Аргумент 'n' может быть также командой редактора, не содержащей пробелы, например, +/pattern.

Ctrl-^
Это сокращенный эквивалент ":e #RETURN", который возвращает к предыдущей позиции в последнем редактируемом файле. Если вы не хотите записывать файл, вам нужно использовать запись вида ":e! #RETURN".

КОМАНДЫ ЗАПИСИ
Команды записи позволяют вам переписывать весь ваш буфер редактирования или его часть в текущий или какой-либо другой файл. Эти команды перечислены ниже:

w file
Переписывает сделанные изменения обратно в файл file, высвечивая количество переписанных строк и символов. Обычно параметр file пропускается, и буфер переписывается в текущий файл. Если имя file определено то текст переписывается в этот файл. Редактор осуществляет запись в файл, только если это текущий файл и он редактируется, или если файл не существует. В других случаях для записи вы должны задать команду 'w' в измененной форме - 'w!'. Если файл не существует, то он создается. Имя текущего файла меняется, если только оно отлично от текущего; текущая строка никогда не изменяется.Если при записи текущего или редактируемого файла возникает ошибка, то редактор выдает сообщение: No write since last change (С момента последнего изменения запись не производилась), даже если буфер не был предварительно модифицирован.

w >> file
Добавляет содержимое буфера к концу существующего файла. Предыдущее содержимое файла не разрушается.

w! name
Подавляет проверку обычной команды write и осуществляет запись в любой файл, который разрешен со стороны системы.

w! command
Записывает определенные строки в команду command. Обратите внимание на различие между командой "w! file", которая подавляет проверку, и командой "w! cmd", которая осуществляет запись в команду. Выходная информация этой команды высвечивается на экране и в буфер редактирования не вставляется.

КОМАНДЫ ЧТЕНИЯ
Команды чтения позволяют вам читать текст в ваш буфер редактирования с любого места. Текст, который вы читаете, должен состоять, по крайней мере, из одной строки, или быть либо файлом, либо входной информацией команды.

r file
Помещает копию текста из заданного файла в буфер редактирования после определенной строки. Если файл не задан, то используется текущее имя файла. Текущее имя файла не меняется, пока его нет; в этом случае файл принимает текущее имя. Если буфер файла пустой, то это трактуется как команда 'e'.

Адрес 0 разрешен для этой команды, и он вызывает чтение файла с начала буфера. Когда команда 'r' заканчивается успешно, то выдается статистика подобно той, которая сопровождает выполнение команды 'e'. После команды 'r' текущей считается последняя прочитанная строка.

r! command
Читает входную информацию команды command в буфер после определенной строки. Пробел или метка табуляции перед знаком (!) обязательны.

КОМАНДЫ ОКОНЧАНИЯ РАБОТЫ
Существует несколько путей выхода из редактора vi. Некоторые прерывают сеанс редактирования, другие переписывают содержимое буфера редактирования перед выходом, третьи предупреждают вас, если вы решили выйти без переписывания буфера редактирования. Все эти способы описаны ниже:

q
Осуществляет выход из редактора vi. Автоматическая запись из буфера редактирования в файл не производится. Однако, если с момента последней команды 'w' были сделаны изменения, то vi выдает предупреждающее сообщение, и выход из редактора не осуществляется. vi также выдает диагностику, если в списке аргументов остались имена еще неотредактированных файлов. Обычно вы хотите сохранить все ваши изменения; для этого вам следует набрать команду 'w'. Если вы захотите отвергнуть их, то набериите команду 'q!'.

q!
Осуществляет выход из редактора, отвергая изменения в буфере без предупреждения.

wq name
Подобно последовательному выполнению команды 'w', затем 'q'.

wq! name
Подавляет проверку, обычно выполняемую перед командой 'w'. Например, если вы владеете файлом, но не имеете разрешения на запись в него, команда 'wq!' позволит вам изменить содержимое.

x name
Если были сделаны какие-либо изменения, и они не переписывались, то переписывает буфер и затем осуществляет выход из редактора.

ГЛОБАЛЬНЫЕ КОМАНДЫ И КОМАНДЫ ЗАМЕЩЕНИЯ
Глобальные команды и команды замещения позволяют вам выполнять сложные изменения в файле с помощью одной команды. Опытный пользователь vi должен уметь работать с этими командами.

g/pattern/cmds
Команда 'g' имеет две отдельные фазы. В первой фазе в буфере редактирования отмечается каждая строка, соответствующая шаблону pattern. Затем заданный список команд выполняется с текущей строкой; знак (.) изначально устанавливается в каждой отмеченной строке.

Список команд состоит из команд, оставшихся в текущей входной строке, и может продолжать увеличение строк с помощью завершения, по крайней мере, последней такой строки знаком (\). Такая многострочная опция не будет работать из пределов vi; чтобы выполнить эту операцию, вам необходимо перейти в режим 'ex'. Если параметр cmds (или хвостовой разделитель(/)) пропущен, высвечивается каждая строка, соответствующая шаблону pattern. Сама команда 'q' не может быть указана в списке команд cmds. При выполнении глобальной команды опции autoprint и autoident подавляются, и значение опции report временно очень большое, в отличие от обычного ее значения. В конце, перед началом глобальной команды метка контекста (') или (') устанавливается в значение текущей строки (.) и не меняется во время выполнения данной команды.

Следующие глобальные команды, большинство которых - команды замещения, охватывают наиболее часто встречающиеся потребности, свойственные глобальным командам:

g/s1/p
Печатает все строки, содержащие строку s1.

g/s1/s//s2
Замещает первое вхождение s1 во всех строках, содержащих ее, на подстроку s2.

g/s1/s//s2/g
Заменяет все вхождения s1 на s2. Это распространяется также на многократное вхождение s1 в одной строке.

g/s1/s//s2/gp
Работает аналогично предыдущей команде, дополнительно выводя все измененные строки.

g/s1/s//s2/gc
Приглашает вас подтвердить каждое замещение s1 на s2. Для положительного ответа нажмите 'Y', для отрицательного - любую другую клавишу.

g/s0/s/s1/s2/g
Отмечает все линии, содержащие строку s0, и затем только для них заменяет все вхождения s1 на s2.

g!/pattern/cmds
Запускает команды cmds в каждой строке, не соответствующей шаблону pattern.

g/^/s// /g
Вставляет пробелы в начале каждой строки файла.

s/pattern/repl/options
В каждой указанной линии первое вхождение текста, соответствующее регулярному выражению pattern, заменяется текстом repl. Если применяется индикатор опции confirm-'c', то перед каждым замещением заменяемая линия печатается на экране с вставкой, отмеченной символом (^). По нажатию 'Y' замена выполняется; любое другое нажатие замены не вызывает. После команды 's' текущей является последняя замененная строка.

v/pattern/cmds
Синоним команды 'q!', запускающий указанные команды cmds в каждой строке, не соответствующей шаблону pattern.

КОМАНДЫ ПЕРЕМЕЩЕНИЯ ТЕКСТА
Команды перемещения текста в большой степени могут быть заменены командами, доступными в редакторе vi. Однако, очень удобны следующие две команды:

co addr flags
Копия указанных линий размещается после адреса addr, которым может быть 0. Знак текущей строки (.) адресует на последнюю строку копии.

[range]m addr
Команда 'm' перемещает строки, определенные параметром range, в позицию после строки, заданной аргументом addr. Например, m+ меняет меняет текущую строку со следующей строкой, т.к. по умолчанию range указывает на текущую строку. Первая из перемещенных строк становится текущей.

КОМАНДЫ ПЕРЕКЛЮЧЕНИЯ В SHELL
Часто у вас возникает необходимость выйти из редактора и выполнить обычные команды системы XENIX. Также у вас может возникнуть необходимость изменить вас рабочий каталог, чтобы ваше редактирование не влияло на целостность другого рабочего каталога. Ниже описаны необходимые для этого операции:

cd directory
Указанный каталог directory становится вашим текущим каталогом. Если каталог не определен, то в качестве имени целевого каталога используется текущее значение опции home. После выполнения команды 'cd' текущий файл не рассматривается как уже отредактированный, поэтому запись в файлы, существовавшие до этого, по прежнему допустима.

sh
Создается новый shell. В этом shell вы можете вызывать любое количество команд. Для возврата в vi нажмите Ctrl-D.

!command
Остаток линии после знака (!) посылается в shell для выполнения. Внутри текста команды command символы '%' и '#' расширяются как имена текущего файла и последнего редактируемого файла, а символ '!' заменяется на текст предыдущей команды. Таким образом, в частности, '!!' повторяет последнее такое переключение в shell. Если выполняется любое такое расширение, то расширенная строка повторяется на экране. Текущая строка этой команды не изменяется.

Если с момента последнего изменения в буфере редактирования перезапись отсутствовала (т.е. "[No write]"), то перед выполнением команды в качестве предупреждения выдается диагностика. Когда команда выполнится, высвечивается знак (!).

Если вы используйте интерпретатор shell языка "Си" (C-Shell) и устанавливаете переменную prompt для вывода подсказки-указания prompt), требуемой для работы с неинтерактивными интерпретаторами shell, то при использовании вами выше приведенных команд prompt рассматривается как имя файла. Это может привести к возникновению неожиданных ситуаций. Чтобы избежать их, используйте значение prompt, назначаемое по умолчанию, какое определено в файле /usr/lib/mkuser/mkuser.cshrc.

ДРУГИЕ КОМАНДЫ
Следующие описания команд объясняют, как использовать разнообразные ex-команды, которые не входят ни в одну из выше перечисленных категорий:

abbr
Преобразовывает первый аргумент в следующую за ним строку. Например, команда ":abbr rainbow yellow green blue red" преобразовывает "rainbow" в "yellow green blue red". Преобразования можно отключить с помощью команды unabbreviate: :una rainbow.

map, map!
Преобразовывает любой символ или escape-последовательность в существующую последовательность команд. Символы, преобразованные командой map, работают и в режиме команды, и в режиме вставки, в то время как символы, преобразованные командой map!, работают только в режиме команды. Символы, преобразованные командой map!, не могут быть возвращены в исходное состояние командой unmap.

nu
Высвечивает каждую указанную строку со стоящим впереди номером строки в буфере. Текущей строкой считается последняя высвеченная строка. Для задания автоматической нумерации линии в буфере установите опцию number.

preserve
Текущий буфер редактирования сохраняется как в случае внезапного выхода системы из строя. ЭТА КОМАНДА ПРЕДНАЗНАЧЕНА ДЛЯ ИСПОЛЬЗОВАНИЯ В СЛУЧАЕ ОПАСНОСТИ, когда выполнение команды 'w' привело к ошибочной ситуации, и вы не знаете, как вам сохранить все сделанное ранее.

=
Высвечивает линейный номер адресуемой линии.

recover file
Восстанавливает файл из системной области сохранения. Система сохраняет копию буфера редактирования, если только вы сделали изменения в файле, и работа системы была нарушена, или если вы выполняете команду preserve. Когда вы используете команду preserve, вас оповестят по электронной почте о том, что файл был сохранен.

set argument
Без аргументов argument команда set высвечивает те опции, чье значение изменилось с установленного по умолчанию; с аргументом all эта команда высвечивает все значения опций. Задание за именем опции знака (?) вызывает показ текущего значения этой опции. Нет необходимости использовать знак (?), если опция не является булевским значением. Для задания значений, являющихся опциями переключения, используйте запись вида: set option, а для для их выключения: set nooption. Строковые и числовые опции задаются следующим образом: set option=value. Для команды set может быть задано более одной опции; все они обрабатываются слева направо. Значения option могут устанавливаться автоматически с помощью переменной среды EXINIT. Для более детальной информации смотрите команду environ(5).

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

Подобно этому, если вы нажимаете Ctrl-], то vi осуществляет поиск слова, непосредственно следующего за курсором. Это эквивалентно выполнению следующих действий: набирается команда ':tag', затем искомое слово, нажимается клавиша ENTER. Файл признаков (тегов - tegs) обычно создается такими программами как ctags, и состоит из набора линий с тремя полями, разделенными пробелами или метками табуляции. Первое поле задает имя тега, второе поле - имя файла, где расположен тег, и третье - определяет режим адресования, который будет использоваться редактором для поиска данного тега. Это поле обычно является контекстуальной разверткой, использующей шаблон /pattern/, чтобы быть невосприимчивым к минимальным изменениям в файле. Такие развертки всегда выполняются, как если бы была установлена опция nomagic. Имена тегов в файле тегов должны быть отсортированы в алфавитном порядке. Существует ряд опций, которые могут использоваться для установки рабочей среды vi. Они могут быть установлены ex-командой set или при редактировании, или непосредственно сразу за вызовом vi в файле его установки .exrc .

unmap
Возвращает любые символы или escape-последовательности, преобразованные командой map, в исходное состояние.

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

Каждый раз, при своем вызове редактор vi читает команду из файла с именем .exrc, который находится в вашем собственном каталоге. Этот файл обычно устанавливает предопределенные пользователем опции таким образом, что нет необходимости устанавливать их вручную каждый раз при вызове vi. Каждая из опций детально описана ниже.

ОПЦИИ
Существует только два вида опций: опции переключения и строковые опции. Опции переключения - 'on' (включить) и 'off' (выключить). Переключение отменяется использованием слова 'no' перед именем опции в команде set. Строковые опции - это строки символов, являющиеся назначаемыми значениями в форме option = value (опция = значение). В линии может быть определено несколько опций. Опции редактора vi описаны ниже:

autoindent, ai
по умолчанию: noai
Может быть использована для облегчения подготовки текста структурированной программы. Для каждой линии, созданной операцией присоединения, изменения, вставки, открытия или замещения, vi просматривает предыдущую линию, чтобы определить и вставить соответствующее количество отступов. Для возврата курсора на предыдущую метку табуляции нажмите Ctrl-D. Метки табуляции, следующие в обратном направлении, определены как многократная опция shiftwigth. Вы не можете переместиться назад на абзац, кроме как по нажатию Ctrl-D.

Специально обрабатываемой в этом режиме является линия без символов, добавленных к ней, которая превращается в линию, полностью заполненную пробелами (пропуски, обеспечиваемые для autoindent, отвергаются). Также, специально обрабатываемыми для данного режима являются строки, начинающиеся с символа (^) непосредственно сопровождаемые символом Ctrl-D. Это вызывает перенаправление ввода на начало линии, но сохраняет предыдущий отступ для следующей линии. Подобным образом, 'O' с последующим немедленным символом Ctrl-D переустанавливает курсор на начало без сохранения предыдущего отступа. В глобальных командах опция autoindent не встречается.

autoprint, ap
по умолчанию: ap
Вызывает высвечивание текущей линии после каждой ex-команды copy, move или substitute. Это вызывает тот же самый эффект, что и использование символа 'p' в конце каждой такой команды. Autoprint подавляется в глобальных командах, и применяется только к последней команде в строке.

autowrite, aw
по умолчанию: noaw
Вызывает автоматическое переписывание содержимого буфера в текущий файл, если вы его модифицировали, когда даете одну из команд next, rewind, tag, !, Ctrl-^ (переключить файлы) или Ctrl-] (перевести тег).

beautify, bf
по умолчанию: nobeautify
Вызывает при вводе подавление всех управляющих символов, кроме меток табуляции, символов новой строки и прогона страницы. При первом подавлении пробела регистрируется предупреждение. Опция beautify не применяется для ввода команды.

directory, dir
по умолчанию: dir=/tmp
Определяет каталог, в котором vi размещает файл буфера редактирования. Если каталог не имеет разрешения на запись, то редактор будет немедленно остановлен в случае неудачи при записи в файл буфера.

edcompatible
по умолчанию: noedcompatible
Вызывает запоминание факта наличия или отсутствия суффиксов 'g' и 'c' в командах замещения, а также включение их с помощью повтора суффиксов. Суффикс 'r' вызывает замещение подобно команде (~), в отличие от команды (&).

errorbells, eb
по умолчанию: noeb
Перед сообщением об ошибке выдается звонок. Если возможно, вместо звонка редактор всегда выводит сообщение об ошибке в инверсном видеорежиме.

hardtabs, ht
по умолчанию: ht=8
Задает границы, в которых установлены метки табуляции для аппаратуры терминала или в которых система расширяет метки табуляции.

ignorecase, ic
по умолчанию: noic
Преобразовывает все прописные символы в тексте в строчные в соответствующем регулярном выражении. ПРи этом, в регулярном выражении производится замена всех прописных символов на строчные, за исключением символов, стоящих в квадратных скобках.

lisp
по умолчанию: nolisp
autoindent делает отступ, соответствующий коду LISP, а команды ( ), { }, [[ и ]] модифицируются, чтобы иметь смысл для LISP.

list
по умолчанию: nolist
Высвечивает все напечатанные строки вместе с метками табуляции и символами конца строки.

magic
по умолчанию: magic
Если установлено значение nomagic, то количество метасимволов в регулярном выражении значительно снижается, только символы (^) и ($) имеют специальное значение. В дополнение к этому метасимволы (~) и (&) в замещаемых шаблонах трактуются как обычные символы. Все нормальные метасимволы могут быть сделаны типа magic, когда перед значением nomagic стоит знак (\).

mesg
по умолчанию: nomesg
Значение nomesg вызывает подавление разрешения записи в терминале, пока вы находитесь в визуальном режиме. Это предохраняет вас от пользователей, выполняющих команду write (запись) системы XENIX на ваш экран в то время, когда вы выполняете редактирование.

number, n
по умолчанию: nonumber
Вызывает печать всех выходных линий вместе с их номерами.

open
по умолчанию: open
Если выполнена установка noopen, то из 'ex' запрещены команды open и visual. Такая установка сделана в целях избежать недоразумений, происходящих в результате случайного входа в открытый или визуальный режим.

optimize, opt
по умолчанию: optimize
Вывод текста на экран сопровождается установкой терминала таким образом, что не выполняется автоматически возврат каретки при высвечивании более чем одной выводимой линии, что позволяет значительно увеличить скорость вывода на терминал без адресуемых курсоров, когда печатается текст со стоящим впереди пустым пространством.

paragraphs, para
по умолчанию: para=IPLPPPQPPTPbp
Определяет ограничители параграфа для операций { и }. Парой символов в значении опции являются имена макросов команды nroff, которые начинают параграф.

prompt
по умолчанию: prompt
Ввод в режим 'ex' сопровождается указанием-подсказкой (:). Если вход в режим команды 'ex' выполняется по команде 'Q', и при этом установлено значение noprompt, то символ (:) в строке состояния отсутствует.

redraw
по умолчанию: noredraw
Редактор работает "как-бы" (за счет большого объема выводимой информации) на "интеллектуальном" терминале, хотя используется простой терминал. Данный режим очень удобен только при большой скорости работы.

remap
по умолчанию: remap
Если установлено значение 'on', то преобразованные символы повторно обрабатываются, пока не изменились. Например, если 'o' преобразовано в 'O', а 'O' в 'I', то, если установлено remap, то 'o' преобразуется в 'I', а при установке noremap - в 'O'.

report
по умолчанию: report = 5
Определяет порог обратной связи из команды. Любая команда, которая модифицирует большое число линий, чем было определено, в качестве обратной связи передаст число этих изменений. Для глобальных команд и команд уничтожения (undo) суммарное изменение в ряде линий, размещенных в буфере, представлено в конце команды. Такое оповещение подавляется при команде 'g' в индивидуальных выполняемых командах.

scroll
по умолчанию: scroll = 1/2 окна
Определяет число логических линий, "прокрученных" к моменту, когда в режиме команды на входе терминала был принят сигнал Ctrl-D, а также число линий, высвечиваемых командой 'z' в режиме команды (удвоенное значение scroll).

section
по умолчанию: section = SHNHH HU
Определяет макрос раздела для операций [[ и ]]. Пара символов в значении опции является именами макросов команды nroff, которые начинают параграф.

shell, sh
по умолчанию: shell = /bin/sh
Задает путь к интерпретатору shell, разветвляющемуся для команды переключения в shell - (!), а также командой shell. По умолчанию берется значение из переменной среды SHELL, если она присутствует.

shiftwigth, sw
по умолчанию: sw = 8
Задает ширину программной расстановки меток табуляции, используемой при инверсной табуляции с помощью Ctrl-D, когда для присоединения текста используется autoindent, или командами сдвига.

showmatch, sm
по умолчанию: nosm
Когда нажаты клавиши ) или }, перемещает курсор на одну секунду на соответствующий символ ( или {, если этот символ присутсвует на экране.

showmode
по умолчанию: noshowmode
Вызывает появление сообщения "INPUT MODE" (РЕЖИМ ВВОДА) в нижнем правом углу экрана, если включен режим вставки.

slowopen
по умолчанию: noslowopen
При команде вставки вводит задержку при модификации экрана.

tabstop, ts
по умолчанию: ts = 8
Редактор расширяет метки табуляции во входном файле по n-границе в целях, необходимых для дисплея.

taglength, tl
по умолчанию: tl = 0
Первые n-символов в имени тега имеют значение, остальные символы игнорируются. Нулевое значение (по умолчанию) указывает на необходимость обработки всех символов.

tags
по умолчанию: tags = tags/usr/lib/tags
Путь к файлам, используемым как файлы тегов для команды tag. Требуемый тег ищется во всех определенных файлах, последовательно. По умолчанию, поиск файлов с именем tag осуществляется в текущем каталоге и в каталоге /usr/lib.

term
по умолчанию: значение переменной TERM
Тип терминала выходного устройства.

terse
по умолчанию: noterse
Для опытного пользователя выдает сокращенную информацию об ошибках.

timeout, to
по умолчанию: noto
Отменяет 1-секундный предел времени для команд map (преобразования символов).

warn
по умолчанию: warn
Предупреждает, если было сообщение "[No write since last change]" перед командой переключения в shell - (!).

window
по умолчанию: window = зависимость от скорости
Определяет число линий в текстовом окне. По умолчанию 8 для малых скоростей (600 бод и менее), 16 - для средней скорости (1200 бод), и полный экран (минус одна строка) для высоких скоростей.

w300, w1200, w9600
Это не является действительной опцией, но устанавливает параметр window (смотрите выше), если скорость низкая (300), средняя (1200) или высокая (9600).

wrapscan,ws
по умолчанию: ws
Поиски, использующие в качестве адреса регулярное выражение, будут продолжаться до конца файла.

wrapmargin, wm
по умолчанию: wm = 0
Определяет предел рабочего поля для автоматической вставки новых линий при вводе текста. Нулевое значение определяет нулевой предел.

writeany, wa
по умолчанию: nowa
Отвергает проверки, обычно выполняемые перед командой write, позволяя осуществлять запись в любой файл, разрешенный системным механизмом записи.

РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ
Регулярное выражение определяет набор строк, состоящих из символов. Член этого набора строк называется "заменяемым" на регулярное выражение. vi запоминает два предыдущих выражения: предыдущее регулярное выражение, используемое в команде замещения, и предыдущее регулярное выражение, используемое где-нибудь еще, на которое ссылаются как на предыдущее регулярное выражение для сканирования. На предыдущее регулярное выражение ссылка может осуществляться через пустое регулярное выражение: например, "//" или "??".

Регулярное выражение, допускаемое для обработки редактором vi, составляется одним из двух путей, в зависимости от установки опции magic. Используемая командами vi и ex по умолчанию установка magic дает доступ к мощному набору метасимволов, используемых в регулярном выражении. Недостатком magic является то, что пользователь должен помнить все символы magic и перед ними ставить знак (\), чтобы использовать их как "обычные" символы. С опцией nomagic регулярные выражения значительно упрощаются, т.к. в них используется только два метасимвола. Обеспечивается возможность применения других метасимволов через использование знака (\) перед имеющимися в данный момент обычными символами. Необходимо отметить, что знак (\) всегда является метасимволом. В данном описании подразумевается опция magic. С опцией nomagic специальными символами являются только знак (^) в начале регулярного выражения, знак ($) в конце регулярного выражения и знак (\). Знаки (~) и (&) теряют свое специальное значение, относящееся к заменяемому шаблону замещения.

Для составления регулярных выражений в режиме magic используются следующие основные конструкции:

char Обычный символ соответствует самому себе. Обычными могут быть любые символы, кроме знака (^) в начале линии, знака ($) в конце линии, знака (*) как любого символа, отличного от первого, и любого из следующих символов: ".", "\", "[", "~". Если эти символы должны трактоваться как обычные, перед ними должен стоять символ (\).
^ Cтоящий в начале шаблона, указывает на то, чтобы соответствие достигло цели только в начале строки.
$ Cтоящий в конце шаблона, указывает на то, чтобы соответствие достигло цели только в конце строки. Преобразовывает любой одиночный символ, кроме символа новой строки.
\< Вызывает преобразование только в начале слова "word", т.е. либо в начале линии или перед буквой, цифрой или символом подчеркивания, или после символа, не являющегося ни одним из перечисленных.
\> Действие, схожее с "\<", только преобразует конец слова "word", т.е. либо в конце линии, либо перед символом, не являющимся буквой, цифрой или символом подчеркивания.
[string] Преобразует любой одиночный символ в класс, определяемый строкой string. Большинство символов в string определяют сами себя. Пара символов, разделенных знаком (-) в string, определяет набор символов между указанными строчными и прописными ограничениями, т.е. "[a-z]" трактуется, что регулярное выражение преобразовывает любую строчную букву. Если первым символом в строке string является (^), то конструкция преобразует те символы, которые иначе не преобразовывались. Т.е. "[^a-z]" преобразует все, кроме строчной буквы и символа новой строки. Чтобы разместить в строке string любой из символов "^", "[", "-", они должны иметь перед собой знак (\).

Объединение двух регулярных выражений сначала преобразовывает левое регулярное выражение и затем самую длинную строку, которая может быть опознана как регулярное выражение. Первая часть этого нового выражения преобразует первое регулярное выражение, а вторая часть - второе регулярное выражение.

Любой из одиночных символов, соответствующий регулярным выражениям, упомянутым выше, может иметь за собой знак ( ) для формирования регулярного выражения, которое соответствует определенному (от нуля и более) числу установленных вхождений символов, замененных предварительно установленным регулярным выражением. Знак (~) может использоваться в регулярном выражении для преобразования текста, который определил заменяемую часть последней команды 's'. Регулярное выражение может стоять между последовательностями "\(" и "\)", чтобы запомнить текст, замененный этим выражением. Этот текст может быть позже вставлен в замещаемый текст при помощи следующего указания /digit, где digit перечисляет набор запомненных регулярных выражений. Базовыми метасимволами для шаблона замены являются (&) и (~); когда установлен nomagic, они задаются как "\&" и "\~". Каждый экземпляр (&) заменяется символами, соответствующими регулярному выражению. В шаблоне замены знак (~) устанавливается для текста предыдущего шаблона замены.

Другие метапоследовательности, возможные в шаблоне замены, вводятся символом (\). Последовательность "\n" заменяется текстом, соответствующим n-му регулярному подвыражению, выделенному знаками "\(" и "\)". При вложенности, присутствуют подвыражения, ограниченные круглыми скобками, а значение "n" определяется числом вхождений "\(", начиная слева. Последовательности "\u" и "\l" вызывают преобразование следуемых сразу за ними символов в прописные или строчные, если эти символы буквы. Последовательности "\U" и "\L", каждая, включают режим такого преобразования, пока не встретится последовательность "\E" или "\e", или пока не будет достигнут конец шаблона замены.

РАЗРЕШЕНИЕ
Эта утилита была разработана в Калифорнийском университете, г. Беркли, и разрешена к использованию.

ЗАМЕЧАНИЯ
Программа /usr/lib/ex3.7preserve может быть использована для восстановления файлов в буфере vi, которые были потеряны в результате аварии системы. Программа осуществляет поиск файлов буфера vi в каталоге /tmp и помещает их в каталог /usr/preserve. Владелец может найти эти файлы с помощью опции '-r'.

Программа /usr/lib/ex3.7preserve должна быть размещена в файле запуска системы /etc/rc, перед командой, которая очищает каталог /tmp. Для дополнительной информации о файле /etc/rc посмотрите "Руководство системного администратора системы XENIX" (XENIX Sytem Administrator's Guide).