elvis

Клон редактора с графическим интерфейсом (UNIX)

Синтаксис:

elvis [опции]... [+команда] файл...

Опции:

-c команда
Начать правку с выполнения этой команды ex.
-e
Выполнить запуск в командном режиме ex.
-f
Принудительно открыть нестандартные файлы (каталоги или специальные файлы устройств). По умолчанию утилита elvis отклоняет попытки открытия нестандартных файлов.
-i
Выполнить запуск в режиме ввода.
-m [файл]
Сканировать файл на наличие ошибок и установить курсор у номера проблемной строки. Если файл не указан, используется errlist.
-R
Установить режим "только для чтения" для предотвращения случайной перезаписи файлов.
-t тег
Начать правку с указанного тега.
-v
Выполнить запуск в визуальном командном режиме.
+команда
Начать правку с выполнения этой команды ex.
файл
Путь к редактируемому файлу.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:

Утилита elvis представляет собой интерактивный полноэкранный редактор, совместимый с редактором ОС Unix/POSIX vi. Утилита vi в ЗОСРВ «Нейтрино» является ссылкой на утилиту elvis.

В утилите elvis произведенные изменения помещаются в буфер, а их запись в файл выполняется только по запросу. Поскольку для хранения используется временный файл, утилита elvis позволяет вносить изменения в файлы, размер которых превышает объем памяти, доступный на компьютере, на котором она выполняется.

Предусмотрены два основных командных режима:

Предусмотрена возможность переключения между режимами. При этом большую часть времени, вероятно, будет использоваться визуальный командный режим. Это режим, в котором обычно запускается утилита elvis.

В визуальном режиме весь экран заполняется строками текста из изменяемого файла (кроме последней строки экрана, зарезервированной для отображения статуса). Текст можно просматривать и перемещать в пределах файла. Каждое нажатие клавиши интерпретируется как визуальная команда. Набираемый текст в файл не вставляется, он рассматривается как часть команды. Для вставки текста сначала следует указать команду "вставки текста" (см. раздел "Вставка текста").

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

Возможности утилиты elvis описаны в следующих разделах:

Визуальный режим
Режим ввода
Операторы
Особые случаи
Именованные буферы
Команды перемещения
Перемещение курсора
Выделение
Теги
Вставка текста
Режим ввода
Удаление, копирование, вставка
Фильтры
Сдвиг текста
Прочие команды
Поиск
Глобальные команды и команды подстановки
Отмена и возвращение
Команды управления экраном
Запись файлов
Правка других файлов
Чтение данных из файла
Выход из утилиты elvis
Переключение на командный интерпретатор
Макросы
Сокращения
Опции
Команды группы ex

Визуальный режим

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

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

Режим ввода

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

A, C, I, O, R, S, a, c, i, o, s


Note: Визуальный командный режим очень похож на режим ввода текста. Для определения текущего режима следует нажать клавишу Esc. Если утилита elvis воспроизводит звуковой сигнал, текущим является визуальный командный режим. Если утилита elvis не воспроизводит звуковой сигнал, это означает, что при нажатии клавиши Esc выполнен переход в визуальный командный режим, до этого использовался режим ввода. Так или иначе, после нажатия клавиши Esc утилита elvis переходит в состояние ожидания команды.

Операторы

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

оператор<объект>

оператор может принимать следующие значения:

c
Изменить
d
Удалить
y
Копировать
>
Выполнить сдвиг вправо
<
Выполнить сдвиг влево
!
Применить фильтр

Для одного оператора объект не используется:

p
Вставить

Операнд объект определяет область текста, к которой применяется оператор. В качестве значения объект может использоваться любая команда перемещения или поиск по шаблону. (См. "Команды перемещения".) Таким образом, это позволяет оценить возможности операторов. Утилиту elvis можно использовать для работы со словами, предложениями, диапазонами в соответствии с указанным шаблоном, с любым диапазоном, определенном с помощью операнда объект.

В случае ввода команды перемещения в качестве операнда можно дополнительно указать значение счетчика [n] для расширения действия операнда (например, d2w для удаления двух следующих слов). Если значение счетчика не установлено, для него обычно используется значение по умолчанию 1.

Особые случаи

Операторы часто используются для работы со строками. Для простоты несколько специальных форм этих команд используются только для работы со строковыми объектами. Далее в списке представлен синтаксис, предусмотренный для этих специальных форм. Следует отметить, что значение счетчика является необязательным и его следует указывать перед оператором (в отличие от ранее приведенного формата):

[n]cc
Изменить n строк.
[n]dd
Удалить n строк.
[n]Y
[n]yy
Копировать n строк.
[n]<<
Сдвинуть n строк влево.
[n]>>
Сдвинуть n строк вправо.

Именованные буферы

При копировании, удалении, изменении, сдвиге или фильтрации текста утилита elvis сохраняет обрабатываемый диапазон в отдельном буфере без имени для вырезанного объекта. Впоследствии его можно извлечь с помощью команды вставки p. Кроме того, для утилиты elvis предусмотрено 26 именованных буферов (с a по z), которые можно использовать для сохранения текстовых блоков во время сеанса правки. Эти буферы часто используются для перемещения текста при внесении изменений в несколько файлов.

Для определения буфера для вырезанного объекта, в котором требуется сохранить измененный диапазон текста, для операторов можно использовать префиксы от "a до "z в соответствии с указанным выше форматом (в примерах далее префикс представлен как "<a-z>):

"<a-z>оператор< объект>
Стандартные случаи.
"<a-z>[n]оператор
Особые случаи.

В случае использования прописных букв для обозначения именованных буферов объекты добавляются в буфер:

"<A-Z>оператор<объект>
Стандартные случаи.
"<A-Z>[n]оператор
Особые случаи.

Команды перемещения

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

Команды перемещения применяются к следующим текстовым объектам:

Символ
Отдельный символ.
Предложение
Текстовая последовательность, оканчивающаяся одним из следующих символов, за которым следуют два пробела или символ новой строки: . ! ?
Абзац
Абзац начинается после пустой строки или с места, где находится любая из пар символов, определенных с помощью опции :set pa=.
Раздел
Раздел начинается с места, где находится любая из пар символов, определенных с помощью опции :set se=.

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

Для перемещения курсора можно использовать клавиши курсора на клавиатуре. Также можно использовать клавиши H, J, K и L.

[n]j
[n]клавиша со стрелкой вниз
[n]Ctrl-J
[n]Ctrl-N
Переместить на n строк вниз (вперед).
[n]k
[n]клавиша со стрелкой вверх
[n]Ctrl-P
Переместить на n строк вверх (назад).
[n]l
[n]клавиша со стрелкой вправо
[n]клавиша пробела
Переместить на n символов вправо.
[n]h
[n]клавиша со стрелкой влево
[n]клавиша возврата на позицию
Переместить на n символов влево.
[n]-
Переместить в обратном направлении к первому символу, не являющемуся пробелом, в n-й строке.
[n]+
Переместить в прямом направлении к первому символу, не являющемуся пробелом, в n-й строке.
[n]$
Переместить в конец строки.
^
Переместить в начало первого слова в строке.
0
Переместить к левой границе (к первому символу, не являющемуся пробелом) текущей строки.
[n]|
Переместить к столбцу, указанному в значении n.
[n]w
Переместить в начало следующего слова.
[n]W
Переместить в начало следующего слова, которое следует за пробельным символом.
[n]b
Переместить к предыдущему слову.
[n]B
Переместить к предыдущему слову, отделенному пробельным символом.
[n]e
Переместить в конец слова.
[n]E
Переместить в конец слова, отделенного пробельным символом.
[n]G
Переместить к указанной строке (по умолчанию для отдельной команды G – к последней строке файла).
[n]f<символ>
Переместить (в прямом направлении) к месту n-го вхождения символа символ в текущей строке. Курсор помещается на соответствующий символ.
[n]F<символ>
Переместить (в обратном направлении) к месту n-го вхождения символа в текущей строке. Курсор помещается на соответствующий символ.
[n]t<символ>
Переместить (в прямом направлении) к месту n-го вхождения символа символ в текущей строке. Курсор помещается непосредственно перед подходящим символом.
[n]T<символ>
Переместить (в обратном направлении) к месту n-го вхождения символа в текущей строке. Курсор помещается непосредственно перед подходящим символом.
[n];
Повторить предыдущую команду f, F, t или T, в том же направлении.
[n],
Повторить предыдущую команду f, F, t или T с поиском в противоположном направлении.
%
Переместить к соответствующим круглым скобкам, квадратным скобкам или фигурным скобкам, т.е. ( ) [ ] { }
[n])
Переместить в начало следующего предложения.
[n](
Переместить в начало текущего предложения.
[n]<фигурная скобка>
} – переместить в начало следующего абзаца. { – переместить в начало текущего абзаца.
[n]]]
Переместить в начало следующего раздела.
[n][[
Переместить в начало текущего раздела.
[n]H
Переместить в верхнюю левую позицию на экране. Если указано значение n, то курсор перемещается в начало строки, расположенной на n строк за пределами верхней границы экрана.
[n]L
Переместить в начало последней строки на экране. Если указано значение n, то курсор перемещается в начало строки, расположенной на n выше нижней границы экрана.
M
Переместить в начало строки, расположенной посередине экрана.

Выделение

m<a-z>
Отметить текущую позицию с помощью символа <a-z>.
'<a-z>
Переместить в начало отмеченной строки.
`<a-z>
Переместить в точную позицию, отмеченную символом <a-z>.
''
Переместить курсор назад в начало строки, в которой он находился перед последним "неотносительным" перемещением.
``
Переместить курсор назад в точную позицию, в которой он находился перед последним неотносительным перемещением.

Теги


Note: Возможность включения тегов в команды изменения, копирования, вставки, удаления, сдвига и фильтрации в качестве операндов <объект> не предусмотрена.

:ta тег
Править файл, содержащий тег. Поместить рядом с тегом.
Ctrl-]
Слово, находящееся в позиции курсора, рассматривается как тег. Редактор выполняет поиск слова так же, как в случае выполнения команды :ta.

Вставка текста

Следующие команды обеспечивают переход в режим ввода, в котором введенный текст (до нажатия клавиши Esc) записывается в файл:

a
Добавить текст после текущей позиции курсора.
A
Добавить текст в конец текущей строки.
i
Вставить текст перед текущей позицией курсора.
I
Вставить текст в начало текущей строки.
o
Открыть новую строку под строкой, в которой находится курсор, и вставить в нее текст.
O
Открыть новую строку над строкой, в которой находится курсор, и вставить в нее текст.
c< объект>
Изменить текст между текущей позицией и позицией, указанной с помощью <объект> (операнд перемещения или шаблон). Дополнительно можно указать значение счетчика для повторения действия, определяемого операндом <объект> (например, для изменения двух следующих слов можно выполнить команду c2w).

Если область текста находится в пределах текущей строки, то в конце значения <объект> отображается символ $ для обозначения конца диапазона. В противном случае будет выполнено удаление текста в указанном диапазоне и переход в режим ввода. В пределах строки удаление указанного диапазона текста выполняется только после нажатия клавиши Enter.
[n]cc
Изменить n строк.
R
Заменить остальную часть строки текстом. Вместо удаления текста, как в случае команды изменения, перед переходом в режим вставки производится перезапись текущей строки до полной ее замены. При этом выполняется переход в режим ввода.
s
Заменить текущий символ текстом (сокращение команды cl).
S
Заменить текущую строку текстом (сокращение команды cc).

Режим ввода

В режиме ввода в текст в позицию курсора вставляются символы, введенные с помощью любых клавиш, за исключением следующих:

Esc
Ctrl - [
Выйти из режима ввода в командный режим.
INTR
Прервать выполнение (обычно Ctrl - C, см. описание stty).
erase
Ctrl - H
Удалить символ перед курсором.
Ctrl - W
Удалить последнее введенное слово.
Ctrl - A
Вставить копию последнего введенного текста.
Ctrl - D
Удалить один символ отступа.
Ctrl - L
Обновить экран.
Ctrl - M
Enter
Вставить символ новой строки.
Ctrl - P
Вставить содержимое буфера для вырезанного объекта.
Ctrl - R
Обновить экран (аналогично Ctrl - L).
Ctrl - T
Вставить символ отступа.
Ctrl - U
Вернуться на позицию в начало строки.
Ctrl - V
Вставить следующий символ, даже если он является специальным символом (например, при нажатии комбинации клавиш Ctrl - V Ctrl - L будет вставлен символ перевода страницы).

Удаление, копирование, вставка

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

Delete
Удалить указанный диапазон и поместить текст в буфер без имени или в именованный буфер, если он указан.
Yank
Создать копию указанного диапазона и поместить ее в буфер без имени или в именованный буфер, если он указан.
Put
Поместить содержимое буфера без имени или именованного буфера, если он указан, в новое местоположение.

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

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

Для копирования четырех следующих строк требуется выполнить команду копирования, например 4yy или y4j, перейти в новое местоположение и вставить текст с помощью команды p.

Для удаления четырех следующих строк используется команда 4dd или d4j.

Для перемещения четырех следующих строк требуется выполнить такую команду, как 4dd или d4j, а затем перейти в новое местоположение и вставить текст с помощью команды p или :pu.

Фильтры

С помощью команды фильтрации можно выбирать диапазоны текста, применять к ним любую из команд и вставлять выходные данные в файл. В соответствии с указанной командой выполняется фильтрация текста, находящегося в диапазоне от текущей строки до <объект> с разделителями, с заменой этим текстом указанного диапазона. Текст, находившийся в диапазоне до замены выходными данными, полученными в результате выполнения команды, сохраняется в буфере без имени или в именованном буфере, если он указан. В случае использования прописных букв утилита elvis добавляет текст в именованный буфер.

!<объект>команда
Удалить указанный текстовый объект и поместить его в буфер (без имени или именованный буфер, если он указан). Передать указанный диапазон текста в стандартный поток ввода команды и заменить его выходными данными, полученными в результате ее выполнения. При вводе данной команды приглашение на ввод команды ! не отображается, пока не будет задан <объект>.

Сдвиг текста

Операторы сдвига <и > обеспечивают сдвиг всех строк между текущей строкой и операндом <объект>. Сдвиг текста производится в соответствии со значением опции shiftwidth (см. далее). Предусмотрены следующие команды сдвига:

>< объект>
Сдвинуть <объект> вправо.
<<объект>
Сдвинуть <объект> влево.
[n]>>
Сдвинуть следующие n строк вправо.
[n]<<
Сдвинуть следующие n строк влево.


Note: Для оператора сдвига не предусмотрена поддержка префиксов именованного буфера.

Прочие команды

[n].
Повторить последнюю команду изменения текста n раз.
[n]r< символ>
Заменить текущий символ указанным символом символ.
D
Удалить до конца строки (сокращение команды d$).
[n]J
Объединить следующую и текущую строки.
:[x,y]j
Объединить все строки в указанном диапазоне.
[n]x
Удалить n символов справа, включая позицию курсора.
[n]X
Удалить n символов слева от курсора.
[n]~
Изменить регистр n следующих символов.
:[x,y]p
Отобразить текст в указанном диапазоне.
:[x,y]l
Отобразить текст в указанном диапазоне с маркерами табуляции и конца строки.
:[x,y]nu
Отобразить текст в указанном диапазоне с номерами строк.
:so файл
Считать и выполнить команды, содержащиеся в файле файл.
:ve
Отобразить данные о версии и дате компиляции утилиты elvis.

Поиск

Шаблон, используемый для поиска и подстановки, называется регулярным выражением. Притом, что большинство символов в поисковом запросе соответствуют самим себе, некоторые символы имеют специальное значение согласно данным в приведенной далее таблице. Для использования этих символов в поисковом выражении следует указывать перед ними обратную косую черту (\).

^
Найти совпадение для "начала строки".
$
Найти совпадение для "конца строки".
.
Найти совпадение с любым одиночным символом, за исключением символа новой строки.
\<
Найти совпадение с началом слова.
\>
Найти совпадение с концом слова.
[строка]
Найти совпадение с любым символом в строке строка.
[^строка]
Найти совпадение с любым отдельным символом, не входящим в строку строка.
[x-y]
Найти совпадение с любым символом между x и y (диапазон).
[^x-y]
Найти совпадение с любым символом, не находящимся между x и y (диапазон).
*
Найти совпадение с любыми повторяющимися символами.
\
Экранировать специальные символы.

Для поиска используются следующие команды:

/[шаблон]Enter
Найти шаблон в прямом направлении.
?[шаблон]Enter
Найти шаблон в обратном направлении.
/[шаблон]/{+|-}nEnter
Перейти на n-ную строку по отношению к строке, в которой был найден шаблон, в прямом направлении.
?[шаблон]?{+|-}nEnter
Перейти на n-ную строку по отношению к строке, в которой был найден шаблон, в обратном направлении.
/Enter
Повторить предыдущую команду поиска по шаблону в прямом направлении.
?Enter
Повторить предыдущую команду поиска по шаблону в обратном направлении.
n
Повторить предыдущую команду поиска по шаблону.
N
Повторить предыдущую команду поиска по шаблону в противоположном направлении.

Пример. Сопоставление с шаблонами fred1, fred2 или fred3:

/fred[1-3]

Поиск совпадения с шаблоном ZOSRV Neutrino в начале строки:

/^ZOSRV Neutrino

Поиск совпадения с шаблоном ZOSRV Neutrino в конце строки:

/ ZOSRV Neutrino$

Глобальные команды и команды подстановки

Глобальные команды и команды подстановки можно применять для диапазона строк. Диапазон можно указать в любой команде с элементами [x, y]. Первый элемент (x) указывает первую строку диапазона, а второй элемент (y) указывает последнюю строку. В качестве элементов диапазона можно указывать номера строк или любой из следующих специальных символов:

.
Текущая строка.
$
Последняя строка в файле.
%
Аналогично 1,$ (т.е. весь файл).
n
Относительное смещение от текущей строки.

В качестве элемента диапазона также можно указать шаблон:

/шаблон/

или отмеченное местоположение:

'<a-z>

Пример. Вывод строк, начиная со следующей строки, содержащей слово steve, до первой последующей пустой строки:

/steve,/^$/!lp

Команда подстановки

Команда подстановки обеспечивает замену текста, совпадающего с шаблоном, текстом для подстановки:

:[x,y]s/шаблон/текст_для_подстановки/[c][g][p]

Если ни один из модификаторов c, g или p не указан, эта команда заменяет текст в месте первого вхождения указанного шаблона. Это поведение можно изменить путем ввода любой комбинации этих трех модификаторов:

c
Отобразить приглашение перед заменой.
g
Заменить все найденные вхождения в строке.
p
Отобразить все строки, содержащие замененный текст.

Эта команда очень эффективна при использовании вместе с глобальной командой (см. далее).

Глобальная команда

Глобальная команда выполняет поиск строк, содержащих шаблон, в строках, соответствующих указанному диапазону, или во всем файле, если диапазон ([x, y]) не указан. Команда применяется ко всем строкам, совпадающим с шаблоном. Для глобальной команды предусмотрен следующий формат:

:[x,y]g/шаблон/команда
Выполнить команду команда для каждой строки, совпадающей с шаблоном шаблон.
:[x,y]g!/шаблон/команда
:[x,y]v/шаблон/команда
Выполнить команду команда для каждой строки, не совпадающей с шаблоном шаблон.

Команду подстановки и глобальную команду можно комбинировать с использованием следующего синтаксиса:

[x,y]g/шаблон/s//текст_для_подстановки/

Эта команда выполняет команду подстановки для каждого вхождения сопоставляемого шаблона в заданном диапазоне. Если указан пустой шаблон (т.е. //), то при выполнении команды подстановки для определения заменяемого текста будет использоваться текущий глобальный сопоставляемый шаблон.

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

[x,y]g!/шаблон/s//текст_для_подстановки/ [x,y]v/шаблон/s//текст_для_подстановки/

Пример. Замена слова fred словом barney в строках с 1 по 10:

1,10g/fred/s//barney

Поиск всех совпадений со словом mary, находящихся в начале строки, и отображения приглашения к подтверждению подстановки пользователем:

1,$g/^mary/s//dave/c

Отмена и возвращение

Иногда требуется отменить результат выполнения команды.

u
Отменить результат выполнения последней команды, повлекшей изменение содержимого буфера редактирования.
U
Отменить результаты всех команд изменения текста, выполненных для данной строки. Вернуть строку в исходное состояние.

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

"np
Извлечь n-ный ранее удаленный блок текста (1–9). Вставить за курсором.
"nP
Извлечь n-ный ранее удаленный блок текста (1–9). Вставить перед курсором.

При случайном выборе неверного буфера можно воспользоваться командой отмены для его очистки, после чего можно указать другой буфер. Кроме того, можно использовать именованные буферы (см. "Удаление, копирование, вставка"):

"<a-z>p
Извлечь содержимое именованного буфера. Вставить за курсором.
"<a-z>P
Извлечь содержимое именованного буфера. Вставить перед курсором.

Команды управления экраном

Предусмотрены следующие команды прокрутки:

[n]Ctrl - D
Выполнить прокрутку вниз на n строк (по умолчанию – половина страницы). Значение n сохраняется и используется по умолчанию.
[n]Ctrl - U
Выполнить прокрутку вверх на n строк (по умолчанию – половина страницы). Значение n сохраняется и используется по умолчанию.
[n]Pg Dn
[n]Ctrl - F
Перейти на n страниц вперед.
[n]Pg Up
[n]Ctrl - B
Перейти на n страниц назад.
[n]Ctrl - E
Выполнить прокрутку вниз на n строк.
[n]Ctrl - Y
Выполнить прокрутку вверх на n строк.

Перемещение текущей строки в другую позицию на экране с помощью прокрутки вперед/назад:

z.
Поместить строку в центре экрана.
z-
Поместить строку внизу экрана. Обновить экран.

Предусмотрены следующие команды управления отображением статуса:

Ctrl - G
:f
Отобразить строку статуса внизу экрана.

Запись файлов

Следующие команды выполняют запись данных в файл. Перед всеми командами w можно указать диапазон с помощью переменных [x, y]. Например, для записи в файл первых 6 строк следует ввести команду 1,6w.

:w
Записать изменения в текущий файл.
:w файл
Записать изменения в указанный файл.
:w >>файл
Добавить изменения в указанный файл.
:w! файл
Принудительно выполнить запись в указанный файл.
:wq
Записать данные в файл и завершить работу утилиты.
ZZ или :x
Завершить работу утилиты elvis. Если были внесены изменения, содержимое буфера редактирования записывается в файл.

Правка других файлов

:e файл Править файл.
:e!
Выполнить повторную правку текущего файла с игнорированием несохраненных изменений.
:e! файл
Править файл с игнорированием несохраненных изменений в текущем файле.
:e +n файл
Править файл, начиная со строки n.
:e #
Ctrl - ^
Вернуться на предыдущую позицию в последнем измененном файле.
:n
Править следующий файл в списке аргументов.
:n!
Править следующий файл с игнорированием несохраненных изменений в текущем файле.
:n аргументы
Использовать новый список указанных аргументов.
:args
Отобразить список файлов. Квадратные скобки [] обозначают текущий файл.
:rew
Перейти в начало списка файлов, выполнить повторную правку первого файла.
:rew!
Перейти в начало списка файлов, выполнить повторную правку первого файла с игнорированием любых несохраненных изменений в текущем файле.

См. также описание команды перемещения :ta (теги).

Чтение данных из файла

:r файл
Выполнить чтение данных файла файл, расположенных после курсора.
:nr файл
Выполнить чтение данных файла файл, расположенных после строки n.
:r !команда
Выполнить чтение выходных данных указанной команды.

Выход из утилиты elvis

ZZ или :x
Завершить работу утилиты elvis. Если были внесены изменения, содержимое буфера редактирования записывается в файл.
:wq
Записать данные в файл и завершить работу утилиты.
:q
Завершить работу утилиты elvis.
:q!
Завершить работу утилиты elvis с игнорированием любых несохраненных изменений.
:Q
Перейти в строчный редактор ex (для возврата следует ввести команду elvis).

Переключение на командный интерпретатор

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

:!команда
Выполнить отдельную команду и переключиться обратно в утилиту elvis.

Для выполнения более одной команды можно создать командный интерпретатор:

:sh
Запустить порожденный командный интерпретатор. Для возврата к утилите elvis можно нажать комбинацию клавиш Ctrl - D или ввести команду exit.

Макросы

Макросы обеспечивают возможность связывания отдельной клавиши с произвольным набором команд правки.

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

:map левая_часть правая_часть
Создать макрос.
:unmap левая_часть
Удалить макрос.
:map
Отобразить макросы.

Например, команда :map q :wqCtrl - VEnterEnter создает отображение q в последовательности :wqEnter. Нажатие комбинации клавиш Ctrl - V требуется для экранирования данных, веденных при первом нажатии клавиши Enter, а второе нажатие клавиши Enter завершает определение map.

Сокращения

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

Подстановка выполняется после ввода символа, не являющийся алфавитно-цифровым символом, для обозначения конца слова. При нажатии комбинации клавиш Ctrl - V перед вводом символа, не являющегося алфавитно-цифровым символом, утилита elvis подстановку не выполняет.

:ab сокращение текст_для_подстановки
Создать сокращение.
:ab
Отобразить сокращения.
:una сокращение
Отключить указанное сокращение.

Пример:

:ab woof mary had a little ram

Эта команда выполняет вставку текста "mary had a little ram" каждый раз при вводе слова "woof".

Опции

Опции можно устанавливать или проверять с помощью команды с двоеточием set. Значения опций влияют на выполнение последующих команд. Предусмотрено три типа опций:

Для вывода информации обо всех настройках опций используется

:set all

Для удобства для опций предусмотрены как длинные описательные имена, так и краткие имена (далее они указаны в круглых скобках), облегчающие ввод. Эти имена взаимозаменяемы.

autoindent(ai)
Значение по умолчанию – noai.

Если опция autoindent включена, то в начале каждой добавляемой строки вставляется такое же количество пробельных символов, как и в предыдущей строке. Если опция autoindent не установлена, добавляемые строки начинаются с нулевого столбца.
autoprint(ap)
Значение по умолчанию – ap.

Эта опция учитывается только в режиме ex. Если данная опция установлена, а курсор переместился на другую строку или в результате выполнения предыдущей команды произошло изменение файла, утилита elvis выводит текущую строку.
autowrite(aw)
Значение по умолчанию – noaw.

Если после внесения изменений в текущий файл производится попытка переключения на другой файл (например, с помощью команды :tag или :next...), утилита elvis обычно выводит сообщение об ошибке и отколняет попытку переключения. Если данная опция установлена, утилита elvis записывает измененную версию текущего файла и переключается на новый файл.
directory(dir)
Значение по умолчанию – dir="/tmp".

Утилита elvis сохраняет текст во временных файлах. Данная опция обеспечивает возможность определения каталога для хранения этих временных файлов. Значение по умолчанию – /tmp. Эту опцию можно устанавливать только в файле .exrc. После запуска утилиты elvis изменение каталога становится невозможным.

Note: Если используемый каталог /tmp находится на диске в оперативной памяти, то в случае перезагрузки системы восстановление невозможно.

edcompatible(ed)
Значение по умолчанию – noed.

Сохранить опции :s//.
errorbells(eb)
Значение по умолчанию – eb.

При выполнении пользователем некорректных действий утилита elvis обычно воспроизводит звуковой сигнал. Эта опция обеспечивает возможность отключения звукового сигнала.
ignorecase(ic)
Значение по умолчанию – noic.

Обычно при поиске текста утилита elvis различает прописные и строчные буквы. Если данная опция установлена, то прописные и строчные буквы рассматриваются как равнозначные.
list(li)
Значение по умолчанию – noli.

В режиме nolist (по умолчанию) утилита elvis обеспечивает "нормальное" отображение текста с преобразованием символов табуляции в соответствующее количество пробелов и т.д. Но иногда может потребоваться иное отображение символов табуляции. В режиме списка каждый символ табуляции отображается в виде символа ^I, а в конце каждой строки отображается символ $.
magic(ma)
Значение по умолчанию – ma.

Для поискового механизма в утилите elvis могут использоваться регулярные выражения, т.е. строки, содержащие некоторые символы со специальным значением. Обычно опция magic установлена, что обеспечивает возможность особой обработки таких символов. Если опция magic отключена (:set noma), то все символы, за исключением символов ^ и $, обрабатываются в обычном режиме. Символы ^ и $ сохраняют свое специальное значение вне зависимости от установки опции magic.
paragraphs(pa)
Значение по умолчанию – pa="PPppIPLPQP".

Команды { и } используются для перемещения курсора в прямом или обратном направлении с шагом в один абзац. Абзацы могут разделяться пустыми строками или начальной командой "точка" программы форматирования текстов. Для различных программ форматирования текстов предусмотрены различные команды "точка". Эта опция обеспечивает возможность конфигурирования утилиты elvis для работы с используемой программой форматирования текстов.

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

Значение опции paragraphs представляет собой строку, в которой каждая пара символов указывает одну из возможных форм команды обработки абзацев, используемой в программе форматирования текстов. Например, строки, начинающиеся с .IP, .LP или .PP, рассматриваются как новые абзацы.
readonly(ro)
Значение по умолчанию – noro.

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

В случае установки опции "только для чтения" утилита elvis не принимает полномочия на запись для любого изменяемого файла. Это удобно, если утилита elvis используется только для просмотра файлов без их изменения. Таким образом, случайное изменение файлов становится невозможным.

Обычно данная опция отключена, если не используется псевдоним view утилиты elvis, что аналогично использованию elvis с установленной опцией readonly.
report(re)
Значение по умолчанию – re=5.

Команды изменения, удаления и копирования могут одновременно применяться к нескольким строкам. При применении команд к нескольким строкам утилита elvis выводит сообщение с информацией о выполненной операции и количестве обработанных строк. Эта опция обеспечивает возможность определения количества строк. Значение по умолчанию – 5. Таким образом, в строке состояния отображается сообщение о любой команде, применяемой к 5 или более строкам.
scroll(sc)
Значение по умолчанию – sc=12.

Количество строк при прокрутке для комбинаций клавиш Ctrl - U и Ctrl - D. Обычно с помощью этих команд выполняется прокрутка вперед или назад на пол-экрана, но это значение можно изменить. Значение этой опции определяет количество строк, на которое выполняется прокрутка при использовании указанных клавиш. Кроме того, значение можно установить с помощью [n]Ctrl - D и [n]Ctrl - U.
sections(se)
Значение по умолчанию – sc="NHSHSSSEse".

Команды [[ и ]] используются для перемещения курсора в прямом или обратном направлении с шагом в один раздел. Границы разделов могут определяться с помощью символа { в столбце 1 (что является целесообразным при работе с исходным кодом на языке C) или с помощью команд "точка" программы форматирования текстов.

Эта опция позволяет конфигурировать утилиту elvis для работы с командой section подобно тому, как опция paragraphs позволяет настроить ее для работы с командой paragraphs программы форматирования текстов. Например, строки, начинающиеся с .SH или .NH, рассматриваются как новые разделы.
shell(sh)
Значение по умолчанию – sh="/bin/sh".

Эта опция определяет программу, используемую в качестве командного интерпретатора в случае запуска утилитой elvis экземпляра командного интерпретатора, созданного с помощью системного вызова fork() (например, для команд :! или :sh). Стандартное значение по умолчанию – /bin/sh. Но в случае установки переменной среды SHELL значение по умолчанию копируется из среды.
shiftwidth(sw)
Значение по умолчанию – sw=8.

Команды < и > используются для сдвига текста влево или вправо на одинаковое число столбцов. Опция shiftwidth определяет это число. Значение по умолчанию – 8 символов.
showmatch(sm)
Значение по умолчанию – nosm.

Если опция showmatch установлена, то в режиме ввода при каждом вводе символа ), } или ] утилита elvis незамедлительно перемещает курсор к соответствующей открывающей круглой или квадратной скобке.
showmode(smd)
Значение по умолчанию – nosmd.

В визуальном режиме невозможно определить текущий режим: визуальный командный режим или режим ввода/замены. Обычно опция showmode отключена и информация о текущем режиме не выводится. Если опция showmode установлена, то в правом нижнем углу экрана отображается сообщение с информацией о текущем режиме.
tabstop(ts)
Значение по умолчанию – ts=8.

Ширина символов табуляции.
term(te)
Значение по умолчанию – te="$TERM".

Эта опция, доступная только для чтения, отображает тип терминала, используемый утилитой elvis для терминала пользователя.
warn(wa)
Значение по умолчанию – wa.

Если в файл были внесены изменения, но он еще не записан на диск, утилита elvis обычно выводит предупреждение перед выполнением команды :!команда". В режиме nowarn вывод такого предупреждения не осуществляется.

Кроме того, обычно утилита elvis выводит сообщение после успешного выполнения поиска, завершившегося по достижении конца файла (EOF). Если установлена опция [no]warn, это предупреждение также отключено.
wrapmargin(wm)
Значение по умолчанию – wm=0.

Переносить длинные строки в режиме ввода. Обычно (если wrapmargin=0) утилита elvis допускает ввод очень длинных строк.

Но если для опции wrapmargin установлено значение, отличное от значения 0 (рекомендуемое значение wrapmargin=70), то длинные строки автоматически "переносятся" в месте переноса слова, если их размер превышает установленное для опции wrapmargin значение.
wrapscan(ws)
Значение по умолчанию – ws.

Обычно при поиске каких-либо данных утилита elvis находит их вне зависимости от их местоположения в файле. Утилита elvis начинает поиск с позиции курсора и продолжает его в прямом направлении. Если утилита elvis достигает конца файла (EOF) и не находит требуемых данных, то она переходит в начало файла для продолжения поиска со строки 1 до текущей строки.

Если опция wrapscan отключена (:se nows), то по достижении утилитой elvis конца файла (EOF) во время поиска поиск завершается и выводится соответствующее сообщение.


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

EXINIT="set ai aw" export EXINIT


Команды группы ex

Следующий список команд группы ex приведен только для ознакомления. Подробное описание операций, выполняемых с их помощью, выходит за рамки настоящего документа. Большая часть этих команд приведена в качестве альтернативы командам визуального режима, описанным в предыдущих разделах.

Для этих команд предусмотрен следующий общий формат:

:[x,y] команда параметр

[Префикс] Команда Краткая форма
abbrev сокращение текст ab
[строка] append a
args ar
[x[,y]] change c
[x[,y]] copy строка co
[x[,y]] delete ["именованный_буфер] d
edit[!] файл e
file f
[x[,y]] global /шаблон/команда/ g
[строка] insert i
[x[,y]] join j
[x[,y]] list l
map левая_часть правая_часть map
[x[,y]] move строка m
next[!] n
[x[,y]] number nu
[x[,y]] print p
[строка] put ["именованный_буфер] pu
quit[!] q
[строка] read файл | !команда r
rewind[!] rew
set [опция] se
shell sh
source файл so
[x[,y]] substitute /шаблон/текст/[c][g][p] s
tag ta
unabbrev сокращение una
undo u
unmap левая_сторона unm
version ve
visual vi
[x[,y]] write[!][[>>]файл] w
xit[!] x
[x[,y]] yank ["именованный_буфер] ya

Для следующих команд группы ex развернутая форма не предусмотрена:

Команда Форма
escape !команда
print next CR
lshift <
rshift >

Файлы:

/tmp/elv*
Во время правки текст сохраняется во временном файле в каталоге /tmp.
tags
База данных тегов, создаваемая утилитой ctags и используемая командой :tags и опцией -t.
$HOME/.exrc
При запуске содержимое этого файла выполняется как последовательность команд группы ex.

Переменные окружения:

LINES, COLUMNS
Переопределение значений размеров экрана, связанных с типом терминала.
EXINIT
Значения по умолчанию для параметров опции elvis. Если переменная определена, ее содержимое выполняется при запуске как последовательность команд группы ex.


Note: Для утилиты elvis необходимо указать переменную среды TERM для определения типа используемого терминала. Например, если работа утилиты elvis осуществляется в консоли, то для установки переменной TERM следует выполнить следующую команду:

export TERM=qansi

или

export TERM=qnx

в зависимости от режима, в котором работает консоль (QNX или ANSI).


Предостережения:

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

При работе в среде ЗОСРВ «Нейтрино» обязательно наличие каталога /tmp для хранения временных файлов. Для использования диска в оперативной памяти в качестве каталога /tmp следует выполнить следующую команду:

ln -sP /dev/shmem /tmp

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино», UNIX

В ЗОСРВ «Нейтрино» редакции 2020 утилита обновлена до текущего исходного кода, включая патчи безопасности

Тематические ссылки:

ped, sed, vi




Предыдущий раздел: Утилиты