Vim: 231 commandes clés
Notez que tout ^ précédant un caractère signifie que vous devez garder le contrôle tout en tapant ce caractère
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
Étapes pour que vous puissiez exécuter cela aussi!
- Copiez la ligne dans Vim
- Tapez
:s/\^V/<Ctrl-V><Ctrl-V>/g
et appuyez sur Entrée (les deux s devraient vous donner un ^ V bleu)
- Tapez
:s/\^R/<Ctrl-V><Ctrl-R>/g
et appuyez sur Entrée (vous devriez voir bleu ^ Rs maintenant)
- Tapez
:s/\^X/<Ctrl-V><Ctrl-X>/g
et appuyez sur Entrée (vous devriez voir des ^ Xs bleus maintenant)
- Tapez
:s/\^O/<Ctrl-V><Ctrl-O>/g
et appuyez sur Entrée
- Tapez
:s/\^A/<Ctrl-V><Ctrl-A>/g
et appuyez sur Entrée
- Tapez
:s/\^\[/<Ctrl-V><Ctrl-[>/g
et appuyez sur Entrée (cette commande est légèrement différente car j'avais besoin d'échapper au [)
- Tapez
0"yy$
. La commande est maintenant stockée dans le registre y
- Configurer l'entrée sur une ligne et exécuter avec
@y
Si quelqu'un connaît une meilleure façon de partager la commande, faites-le moi savoir. Je sais que c'est long, mais c'est le mieux que j'ai pu trouver.
Entrée sortie
La chaîne d'entrée doit être seule sur n'importe quelle ligne du fichier. 1 0 0 4 3 0 0 0 7
La sortie remplacera simplement la chaîne d'entrée 1 2 3 4 3 4 5 6 7
Explication
Algorithme
- Commencez avec un nombre différent de zéro, assurez-vous que ce n'est pas le dernier nombre
- Trouver le prochain nombre non nul
- Prenez leur différence. Si la réponse est négative, vous devez décrémenter pour réparer la plage, sinon, incrémenter pour réparer la plage.
- Revenez au premier caractère et remplacez chaque zéro en incrémentant / décrémentant le nombre précédent.
- Répétez jusqu'à ce que vous arriviez au dernier caractère
Macros utilisées
@e - Vérifiez la fin. Le dernier numéro sera accompagné d'un e. Si le nombre sous le curseur a un e à la fin, supprimez le e et arrêtez l'exécution. Sinon, démarrez un cycle d'interpolation avec @b.
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b - Commence le cycle d'interpolation. Enregistrez le nombre sous le curseur pour une opération de soustraction (@s) puis recherchez le terme non nul suivant (@f)
mayiwo^R"^V^X ^["sy0dd`a@f
@s - Stocke la commande de soustraction à utiliser dans @d. C'est simplement (val)^X
où (val)
est le nombre au début de l'étape d'interpolation. Ceci est défini par la commande @b.
@f - Trouver le prochain terme non nul. Écrivez la valeur actuelle dans le registre sans nom, puis écrivez @f @d
sur la ligne suivante, puis exécutez @z. Cela répétera cette commande si le nombre est un zéro et exécutera @d s'il ne l'est pas.
wmbyiwo@f @d^[@z
@z - Exécution conditionnelle si le registre sans nom est 0. Cette commande attend deux commandes sur une nouvelle ligne au format command1 command2
. Si le registre sans nom est 0, command1
est exécuté, sinon command2
est exécuté. Notez qu'aucune commande ne peut contenir d'espace.
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t - Registre de commande temporaire. Stocke diverses commandes pendant une courte période avant de les exécuter. Utilisé principalement dans les instructions if.
@d - Détermine la direction d'interpolation. Soustrait le premier nombre de la séquence du nombre sous le curseur (en utilisant @s). Si le résultat est négatif, l'interpolation doit diminuer afin que ^ X soit enregistré dans @a. Sinon, nous devons incrémenter pour que ^ A soit enregistré dans @a. Une fois que cela est enregistré, revenez au début de ce cycle d'interpolation et exécutez @i pour réellement interpoler
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a - Stocke ^A
ou ^X
pour incrémenter ou décrémenter pendant l'étape d'interpolation. Ceci est défini par la commande @d.
@i - Interpoler. Copiez le numéro de l'emplacement actuel dans @x et passez au numéro suivant. Si ce nombre est nul, remplacez-le par @x et exécutez @a pour le modifier correctement vers le haut ou vers le bas, puis répétez cette commande. Si le nombre n'est pas un zéro, nous avons atteint la fin de ce cycle d'interpolation. Un nouveau doit être démarré avec ce numéro comme début, donc exécutez @e pour vérifier la fin et recommencez.
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x - Registre de stockage temporaire. Utilisé dans la commande interpoler (@i)
Décomposer les frappes
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
notre programme peut-il prendre une autre valeur telle quenull
?