Vim: 231 kluczowych poleceń
Zauważ, że każde ^ poprzedzające znak oznacza, że powinieneś zachować kontrolę podczas pisania tego znaku
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
Kroki, abyś mógł to uruchomić!
- Skopiuj linię do Vima
- Wpisz
:s/\^V/<Ctrl-V><Ctrl-V>/g
i naciśnij enter (dwa s powinny dać ci niebieskie ^ V)
- Wpisz
:s/\^R/<Ctrl-V><Ctrl-R>/g
i naciśnij klawisz Enter (teraz powinieneś zobaczyć niebieski ^ Rs)
- Wpisz
:s/\^X/<Ctrl-V><Ctrl-X>/g
i naciśnij klawisz Enter (teraz powinieneś zobaczyć niebieski ^ Xs)
- Wpisz
:s/\^O/<Ctrl-V><Ctrl-O>/g
i naciśnij enter
- Wpisz
:s/\^A/<Ctrl-V><Ctrl-A>/g
i naciśnij enter
- Wpisz
:s/\^\[/<Ctrl-V><Ctrl-[>/g
i naciśnij klawisz Enter (to polecenie jest nieco inne, ponieważ musiałem uciec przed [)
- Wpisz
0"yy$
. Polecenie jest teraz przechowywane w rejestrze y
- Skonfiguruj dane wejściowe w linii i uruchom z
@y
Jeśli ktoś zna lepszy sposób udostępniania polecenia, daj mi znać. Wiem, że to jest długie, ale najlepsze, co mogłem wymyślić.
Wejście wyjście
Łańcuch wejściowy powinien być sam w dowolnym wierszu pliku. 1 0 0 4 3 0 0 0 7
Dane wyjściowe po prostu nadpisują ciąg wejściowy 1 2 3 4 3 4 5 6 7
Wyjaśnienie
Algorytm
- Zacznij od niezerowej liczby, upewnij się, że nie jest to ostatni numer
- Znajdź następny niezerowy numer
- Weź ich różnicę. Jeśli odpowiedź jest przecząca, należy zmniejszyć wartość, aby naprawić zakres, w przeciwnym razie należy zwiększyć wartość, aby naprawić zakres.
- Wróć do pierwszego znaku i zamień każde zero, zwiększając / zmniejszając poprzedni numer.
- Powtarzaj, aż dojdziesz do ostatniej postaci
Makra używane
@e - Sprawdź koniec. Do ostatniego numeru zostanie dołączony e. Jeśli liczba pod kursorem ma na końcu e, usuń e i zatrzymaj wykonywanie. W przeciwnym razie rozpocznij cykl interpolacji za pomocą @b.
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b - Rozpocznij cykl interpolacji. Zapisz liczbę pod kursorem dla operacji odejmowania (@s), a następnie znajdź następny niezerowy termin (@f)
mayiwo^R"^V^X ^["sy0dd`a@f
@s - Przechowuje polecenie odejmowania do użycia w @d. To jest po prostu (val)^X
gdzie (val)
jest liczba na początku kroku interpolacji. Ustawia się to za pomocą polecenia @b.
@f - Znajdź następny niezerowy termin. Zapisz bieżącą wartość do rejestru bez nazwy, następnie napisz @f @d
w następnym wierszu, a następnie uruchom @z. Powtórzy to polecenie, jeśli liczba jest zerem, i wykona @d, jeśli nie jest.
wmbyiwo@f @d^[@z
@z - warunkowe wykonanie, jeśli rejestr bez nazwy ma wartość 0. To polecenie oczekuje dwóch poleceń w nowym wierszu w formacie command1 command2
. Jeśli rejestr bez nazwy ma wartość 0, command1
jest wykonywany, w przeciwnym razie command2
jest wykonywany. Zauważ, że żadne polecenie nie może zawierać spacji.
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t - Tymczasowy rejestr poleceń. Przechowuje różne polecenia przez krótki czas przed ich wykonaniem. Używany głównie w instrukcjach if.
@d - Określ kierunek interpolacji. Odejmuje pierwszą liczbę w sekwencji od liczby pod kursorem (używając @s). Jeśli wynik jest ujemny, interpolacja musi zostać zmniejszona, aby ^ X zostało zapisane w @a. W przeciwnym razie powinniśmy zwiększyć, aby ^ A zostało zapisane w @a. Po zapisaniu, wróć na początek tego cyklu interpolacji i uruchom @i, aby faktycznie interpolować
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a - Zapisanie albo ^A
lub ^X
zwiększać lub zmniejszać w czasie etapu interpolacji. Ustawia się to za pomocą polecenia @d.
@i - Interpoluj. Skopiuj numer z bieżącej lokalizacji do @x i przejdź do następnego numeru. Jeśli liczba ta wynosi zero, zamień ją na @x i uruchom @a, aby poprawnie ją zmienić w górę lub w dół, a następnie powtórz to polecenie. Jeśli liczba nie jest zerem, osiągnęliśmy koniec tego cyklu interpolacji. Nowy należy rozpocząć od tego numeru na początku, więc uruchom @e, aby sprawdzić koniec i uruchom ponownie.
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x - Rejestr tymczasowego przechowywania. Używany w poleceniu interpolacji (@i)
Rozbijanie naciśnięć klawiszy
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
nasz program może przyjąć inną wartość, na przykładnull
?