Vim: 231 comandos clave
Tenga en cuenta que cualquier ^ que precede a un carácter significa que debe mantener el control mientras escribe ese carácter
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
¡Pasos para que puedas ejecutar esto también!
- Copia la línea en Vim
- Escriba
:s/\^V/<Ctrl-V><Ctrl-V>/gy presione Intro (los dos s deberían darle un ^ V azul)
- Escriba
:s/\^R/<Ctrl-V><Ctrl-R>/gy presione Intro (debería ver azul ^ Rs ahora)
- Escriba
:s/\^X/<Ctrl-V><Ctrl-X>/gy presione Intro (debería ver las ^ Xs azules ahora)
- Escribe
:s/\^O/<Ctrl-V><Ctrl-O>/gy presiona enter
- Escribe
:s/\^A/<Ctrl-V><Ctrl-A>/gy presiona enter
- Escriba
:s/\^\[/<Ctrl-V><Ctrl-[>/gy presione Intro (este comando es ligeramente diferente porque necesitaba escapar del [)
- Tipo
0"yy$. El comando ahora está almacenado en el registro y
- Configure la entrada en una línea y corra con
@y
Si alguien conoce una mejor manera de compartir el comando, hágamelo saber. Sé que esto es largo, pero es lo mejor que se me ocurrió.
De entrada y salida
La cadena de entrada debe estar sola en cualquier línea del archivo. 1 0 0 4 3 0 0 0 7
La salida simplemente sobrescribirá la cadena de entrada 1 2 3 4 3 4 5 6 7
Explicación
Algoritmo
- Comience en un número distinto de cero, asegúrese de que no sea el último número
- Encuentra el siguiente número distinto de cero
- Toma su diferencia. Si la respuesta es negativa, debe disminuir para reparar el rango; de lo contrario, incremente para reparar el rango.
- Regrese al primer carácter y reemplace cada cero incrementando / decrementando el número anterior.
- Repita hasta llegar al último personaje.
Macros utilizadas
@e: compruebe el final. El último número tendrá una e adjunta. Si el número debajo del cursor tiene una e al final, elimine la e y detenga la ejecución. De lo contrario, comience un ciclo de interpolación con @b.
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b - Comienza el ciclo de interpolación. Guarde el número debajo del cursor para una operación de resta (@s) y luego encuentre el siguiente término distinto de cero (@f)
mayiwo^R"^V^X ^["sy0dd`a@f
@s: almacena el comando de resta para usar en @d. Es simplemente (val)^Xdónde (val)está el número al comienzo del paso de interpolación. Esto se establece mediante el comando @b.
@f - Encuentra el siguiente término distinto de cero. Escriba el valor actual en el registro sin nombre, luego escriba @f @den la línea siguiente y luego ejecute @z. Esto repetirá este comando si el número es cero y ejecutará @d si no lo es.
wmbyiwo@f @d^[@z
@z: ejecución condicional si el registro sin nombre es 0. Este comando espera dos comandos en una nueva línea en el formato command1 command2. Si el registro sin nombre es 0, command1se ejecuta, de lo contrario command2se ejecuta. Tenga en cuenta que ninguno de los comandos puede tener espacios.
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t: registro de comando temporal. Almacena varios comandos por un corto tiempo antes de ejecutarlos. Se usa principalmente en declaraciones if.
@d: determina la dirección de interpolación. Resta el primer número de la secuencia del número debajo del cursor (usando @s). Si el resultado es negativo, la interpolación debe disminuir para que ^ X se guarde en @a. De lo contrario, deberíamos incrementar para que ^ A se guarde en @a. Una vez guardado esto, retroceda al comienzo de este ciclo de interpolación y ejecute @i para interpolar realmente
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a: almacena ^Ao ^Xpara incrementar o disminuir durante el paso de interpolación. Esto se establece mediante el comando @d.
@i - Interpolar. Copie el número en la ubicación actual a @x y pase al siguiente número. Si ese número es cero, reemplácelo con @x y ejecute @a para modificarlo correctamente hacia arriba o hacia abajo, luego repita este comando. Si el número no es cero, hemos llegado al final de este ciclo de interpolación. Se debe comenzar uno nuevo con este número como principio, así que ejecute @e para verificar el final y vuelva a ejecutar.
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x: registro de almacenamiento temporal. Utilizado en el comando interpolar (@i)
Desglosando las pulsaciones del teclado
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
0puede nuestro programa tomar otro valor comonull?