Vim: 231 Ключові команди
Зауважте, що будь-який ^, що передує символу, означає, що ви повинні тримати контроль під час введення цього символу
mbomayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0wmbyiwo@f @d^V^[@z ^["fc0"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0dd`bAe^[0@e
Кроки, щоб і ви могли це запустити!
- Скопіюйте рядок у Vim
- Введіть
:s/\^V/<Ctrl-V><Ctrl-V>/g
і натисніть клавішу Enter (два s повинні дати вам синій ^ V)
- Введіть
:s/\^R/<Ctrl-V><Ctrl-R>/g
і натисніть клавішу Enter (ви повинні побачити синій ^ Rs зараз)
- Введіть
:s/\^X/<Ctrl-V><Ctrl-X>/g
і натисніть клавішу Enter (ви повинні побачити синій ^ Xs зараз)
- Введіть
:s/\^O/<Ctrl-V><Ctrl-O>/g
і натисніть клавішу Enter
- Введіть
:s/\^A/<Ctrl-V><Ctrl-A>/g
і натисніть клавішу Enter
- Введіть
:s/\^\[/<Ctrl-V><Ctrl-[>/g
і натисніть клавішу Enter (ця команда дещо відрізняється, тому що мені потрібно було вийти з [)
- Тип
0"yy$
. Команда тепер зберігається в реєстрі y
- Налаштуйте вхід на лінії та почніть з
@y
Якщо хтось знає кращий спосіб поділити команду, будь ласка, дайте мені знати. Я знаю, що це довго, але це найкраще, що я міг придумати.
Введення-виведення
Рядок введення повинен бути один у будь-якому рядку файлу. 1 0 0 4 3 0 0 0 7
Вихід буде просто перезаписати рядок введення 1 2 3 4 3 4 5 6 7
Пояснення
Алгоритм
- Почніть з ненульового числа, переконайтесь, що це не останнє число
- Знайдіть наступне ненульове число
- Візьміть їх різницю. Якщо відповідь негативна, вам слід декремент для відновлення діапазону, інакше прирощення для відновлення дальності.
- Поверніться до першого символу та замініть кожен нуль, збільшуючи / зменшуючи попереднє число.
- Повторюйте, поки не доберетеся до останнього символу
Використовувані макроси
@e - Перевірте кінець. Останній номер буде доданий до нього e. Якщо число під курсором має e в кінці, видаліть e і зупиніть виконання. В іншому випадку розпочніть інтерполяційний цикл з @b.
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b - Почніть цикл інтерполяції. Збережіть число під курсором для операції віднімання (@s) і знайдіть наступний ненульовий доданок (@f)
mayiwo^R"^V^X ^["sy0dd`a@f
@s - Зберігає команду віднімання для використання в @d. Просто (val)^X
де (val)
знаходиться число на початку кроку інтерполяції. Це встановлюється командою @b.
@f - Знайдіть наступний ненульовий доданок. Запишіть поточне значення в безіменний реєстр, потім напишіть @f @d
у наступному рядку та запустіть @z. Це повторить цю команду, якщо число дорівнює нулю, і виконайте @d, якщо це не так.
wmbyiwo@f @d^[@z
@z - Умовно виконати, якщо неназваний регістр дорівнює 0. Ця команда очікує двох команд у новому рядку у форматі command1 command2
. Якщо реєстр без назви - 0, command1
виконується, інакше command2
виконується. Зауважте, що жодна команда не може містити в ній пробілів.
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t - Тимчасовий регістр команд. Зберігає різні команди протягом короткого часу перед їх виконанням. В основному використовується в операторах if.
@d - Визначте напрям інтерполяції. Віднімає перше число в послідовності з числа під курсором (використовуючи @s). Якщо результат негативний, інтерполяція повинна зменшуватися, тому ^ X зберігається в @a. В іншому випадку ми повинні збільшуватися, тому ^ A зберігається в @a. Коли це буде збережено, поверніться до початку цього інтерполяційного циклу та запустіть @i, щоб насправді інтерполювати
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a - Зберігає ^A
або ^X
збільшення або зменшення протягом кроку інтерполяції. Це встановлюється командою @d.
@i - Інтерполят. Скопіюйте номер у поточному місці на @x та перейдіть до наступного номера. Якщо це число дорівнює нулю, замініть його на @x і запустіть @a, щоб правильно змінити його вгору або вниз, повторіть цю команду. Якщо число не дорівнює нулю, ми дійшли до кінця цього інтерполяційного циклу. З цього номера слід почати нове з початком, тому запустіть @e, щоб перевірити його до кінця, і запустіть ще раз.
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x - Реєстр тимчасового зберігання. Використовується в команді інтерполяту (@i)
Порушення натискань клавіш
mbo :Set b mark to current position and open a new line below to write macros
mayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0 :Write to @b and reset line
yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0 :Write to @d and reset line
mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0 :Write to @e and reset line
wmbyiwo@f @d^V^[@z ^["fc0 :Write to @f and reset line
"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0 :Write to @i and reset line
IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0 :Write to @z and reset line
dd`b :Delete this line and move cursor back to original line
Ae^[ :Append an e to the last number
0@e :Move to the beginning of the line and run
0
може наша програма прийняти інше значення, таке якnull
?