-
Notifications
You must be signed in to change notification settings - Fork 15
OLC: ED editor (obsolete)
Kit Oliynyk edited this page Oct 13, 2021
·
1 revision
Это новый(*) текстовый редактор, который используется теперь вместо устаревшего
OLCшного. Синтаксис позаимствован из стандартного юниксового строчного редактора
ed
, потому многим, привыкшим к командной строке vim
, будет удобно.
Примечание 'новым' этот редактор был на момент написания руководства в 2004м году. Сейчас гораздо удобнее использовать команду
вебредактор
в веб-клиенте, подробности здесь.
- Коментарии к этой доке
- Строковый редактор
- Режим ввода команд
- адрес
- имя_команды
- (+1) "безымянная" команда .
- (.,.)p напечатать блок.
- (.,.)n листинг.
- (.,.)d[рег] удалить блок определяемый диапазоном адресов.
- (.)a добавить текст, после указанного адреса.
- (.)i добавить текст, до указанного адреса.
- (.,.)c[рег] объединяет в себе две команды "d" и "i".
- (.)m<метка> пометить позицию.
- (.)k<метка> синоним команды "m".
- (.,+1)j Объединить строки блока.
- (.,.)!<стр> Выполнить "внешнюю" команду стр.
- (.,.)Y[рег] Копировать (yank).
- (.)P[рег] Вставить содержимое регистра рег после указанного адреса.
- (.,.)s[парам] Найти и заменить подстроку в указанном диапазоном адресов блоке.
- u Откат.
- q Завершить редактирование.
- Режим построчного ввода
- Режим ввода команд
<bubu> |
в этом месте обязательно должен присутствовать bubu . если ничего не написать на этом месте, то будет ошибка. |
[bubu] |
bubu можно не писать, что тогда будет - читать в коментариях к этой конструкции. |
(bubu) |
если не написать ничего, то работать будет так, будто написано bubu . |
(.,.)p
означает, что команда p
это то же самое что и .,.p
Следующие обозначения используются при описании синтаксиса команд
Регулярное выражение (regular expression). Используется для поиска по шаблону.
Как правильно шаблоны писать в этой доке не описывается.
Обозначается одним символом. Метка. Используется для запоминания адресов строк.
Регистр обозначается одим символом. Содержит блок строк.
Используется для копирования блоков.
Последовательность цифр от 0 до 9.
Представляет собой десятичное число в традиционной записи
Редактор может быть в двух состояниях (режимах).
В первом вводятся команды, во втором построчно вводится текст.
Состояние редактора отображается в промпте.
При старте редактор находится в режиме ввода команд.
В командном режиме промпт состоит из символа :
(двоеточие).
Команды редактора имеют следующий общий синтаксис:
[адрес[,адрес]]имя_команды[параметры]
адрес можно считать номером строки в редактируемом тексте.
Указать адрес можно указать одним из следующих способом:
<число> |
порядковый номер строки в редактируемом тексте, начиная с 1. |
. |
текущая строка. |
+<число> |
порядковый номер строки, начиная с текущей. (+1 - следующая строка, +2 - после-следующая, и т.д.) |
-<число> |
порядковый номер строки в обратную сторону, начиная с текущей. (-1 - предыдущая строка, -2 - пред-предыдущая, и т.д.) |
$ |
последняя строка |
'<метка> |
строка помеченная символом метка |
/<рег.выр>/ |
следующая строка, найденная регулярным выражениием рег.выр . Поиск начинается со следующей за текущей строки. |
?<рег.выр>? |
предыдущая строка, найденная регулярным выражением рег.выр . Поиск начинается с предыдущей строки, относительно текущей. |
<рег.выр>
пустое, оно считается равным последнему
используемому. Если адрес указываемый с помощью символов /
, или ?
единственный, а используемая команда безымянна (см ниже список комад),
второй символ /
, или ?
указывать не обязательно. То есть, строка
содержащая только символ /
- правильная команда редактора и означает
найти, показать и сделать текущей следующую строку удовлетворяющую последнему указанному регулярному выражению.
Кроме этого, над адресами действуют арифметические операции +
(плюс) и
-
(минус). Это значит, что если адрес
это выражение определенное
любым из указанных выше правил, то выражение <адрес>+<число>
и
<адрес>-<число>
- тоже правильный адрес строки. То есть, выражение
$-1
означает предпоследнюю строку в редактируемом тексте, а
/test/+1
- следующую за содержащей слово test строку.
Многие команды могут оперировать с блоком строк.
В этом случае такой команде можно передавать два адреса:
первый - адрес первой строки блока и второй - адрес последней строки блока.
Для краткости пару адресов 1,$
(весь текст с первой строки по последнюю)
можно обозначить символом %
(процент).
Команда - один символ.
Вот список всех команд и объяснение значений их параметров. В скобках
перед именем команды указано значение по умолчанию для адресов,
передаваемых команде. Плюсы и двоеточия в примерах обозначают текущий
промпт. Писать их не надо. Строки не начинающиеся с символов промпта
отражают вывод редактора. Их тоже не надо писать.
принимает единственный адрес, печатает строку по этому адресу и делает ее текущей.
Так, к примеру, команда /test означает
найти, показать и сделать текущей строку, содержащую слово test.
Как указано в скобках, если этой команде не передать
ядрес явно, используется адрес следующей за текущей
строкой. То есть, если просто давить enter
, можно
построчно листать содержимое.
Принимает в параметры два адреса - начало и конец блока, который необходимо напечатать.
Последняя напечатанная строка становится текущей.
Если адреса не указывать, команда p напечатает текущую строку, что и
соответствует блоку, определяемуму парой адресов .,.
.
аналог комнды p
, с тем исключением, что команда n
предваряет каждую печатаемую строку ее номером, относительно
начала редактируемого текста.
Содержимое
удаленного блока сохраняется в регистре рег
. Если рег
не указан, используется регистр поумолчанию. Строка
следующая за последней удаленной становится текущей.
Аналогично p
, если не указывать адресов, удаляет текущую
строку.
Пример:
Еще пример см. ниже. Эта команда переводит редактор в режим построчного ввода (см. начало этого хелпа). Чтоб завершить ввод добавляемого текста, введите строку состоящую из одной точки. Последняя добавленная строка становится текущей. Пример: Пускай текст содержит:: 1d -- удалить первую строку.
Выполним:1 2 3
Тепер текст выглядит так:: $a - добавить текст после последней строки. + bebe - добавляем строку bebe + mumu - добавляем строку mumu + . - конец ввода
Аналог команды1 2 3 bebe mumu
a
с тем отличием, что введенный текст вставляется не после, а перед указанным адресом.
Пример:
Пускай текст содержит:
Выполним:1 2 3
Тепер текст выглядит так:: $i - вставить текст перед последней строкой. + bebe - добавляем строку bebe + mumu - добавляем строку mumu + . - конец ввода
Команде1 2 bebe mumu 3
d
передаются те же адреса, что и c
, а i
- следующая строка за последней удаленной.
Удаленный текст запоминается в регистре рег
, как и в команде d
.
Таким образом, команда c
заменяет переданный ей блок на введенный пользователем
в режиме построчного ввода. Последняя добавленная строка становится текущей.
Пример:
Присваивает метке: %c - заменить весь редактируемый текст на ... + meme - строку meme ... + . - и все.
символ
указанный команде адрес. Адрес текущей строки не модифицируется.
Пример: Пускай текст содержит:
Выполним:0 >>bu<< 8 7 <<bu>> 5
Заменяет в блоке переводы строки на пробелы. Склеенная строка становится текущей. Пример: Пускай редактируемый текст содржит:: 1 - показать и перейти к первой строке 0 : /bu - поиском вперед найти, показать и сделать текущей строку содержащую bu >>bu<< : mq - присвоить текущей строке метку q : / - продолжить поиск bu со следующей строки <<bu>> : 'q,.d - удалить строки начиная с >>bu<< и заканчивая <<bu>>
Выполним:9 8 7 6 5 4
Текст после выполнения команды:: /8/,/6/j - склеить строки начиная со втрой и кончая четвертой
Внешней команде передется в парамаетры содержимое блока определяемого диапазоном адресов. Результат выполнения вставляется на место указанного блока. Для фени (редактор, вызываемый методом персонажа edit( ))9 8 7 6 5 4
стр
интерпретируется как выражение языка фени.
На момент вычисления выражения контекст содержит переменные
ch
(персонаж, выполняющий команду редактора) и text
(строка, содержащая исходный вариант блока). Результат
вычисления выражения используется как результат выполнения
внешней команды.
Для тексового редактора вызванного из OLC существует только
две специфические внешние команды. Как видно из примеров, имена этих команд можно сокращать.
Все остальные варианты стр
обрабатываются как обычные игровые команды,
блок при этом не модифицируется.
Форматирует абзац текста по ширине.
Команде justify можно передать два параметра:
# | значение | по умолчанию |
1 | количество пробелов в начале абзаца | 8 |
2 | ширина абзаца в символах | 70 |
Пример:%!j 4 20 - отформатировать весь текст по ширине в 20 символов с отступом из 4х пробелов.
Запомнить в регистре%!s - показать как будет выглядеть весь текст с учетом цветов.
рег
содержимое блока, указанного диапазоном адресов.
Последняя скопированная строка блока становится текущей.
Пример: Пускай текст содердит:
Выполним:ляляляля { бубубубу бебебебе } ляляляля ляляляля
Последняя вставленная строка становится текущей. Пример:: /{/,/}/Y - запоминаем в регистре поумолчанию все строки между открывающей и закрывающей фигурной скобкой, включая строки со скобками.
Параметр начинается с символа-разделителя и состоит из трех частей, разделенных одним и тем же символом. Так: $P - вставить содержимое регистра поумолчанию в конец редактируемого текста.
s/aa/bb/
то же самое что и s%aa%bb%
.
Первая часть параметра - регулярное выражение (определяет что именно надо заменить).
Вторая часть - то, на что необходимо заменить текст,
удовлетворяющий регулярному выражению из первой части.
Треья часть содержит флаги, состоящие из последовательности символов:
p | печатать каждую замену на экран |
g | заменять все вхождения регулярного выражения в строку, а не только первое. |
Еще пример: Пускай текст содердит:: %s/да/нет/g -- заменить во всем тексте "да" на "нет"
Выполним:ляляляля { бубубубу бебебебе } ляляляля ляляляля
Текст после выполнения команды:: /{/+1,/}/-1s/^/ / -- в каждой строке после {, но до } добавить в начало четыре пробела.
Отменяет изменения сделанные предыдущей командой. Число хранимых изменений не ограничено. То есть, в любой момент можно вернуться к начальному варианту редактируемого текста. В режиме построчного ввода промпт состоит из символаляляляля { бубубубу бебебебе } ляляляля ляляляля
+
(плюс).
Вводимый текст будет как есть добавлен в редактируемый буфер.
Вернуться в комманднай режим из режима построчного ввода (завершить построчный ввод текста)
можно введя строку состоящую из ровно одно символа .
(точка).