Vim: 231 Comandos Chave
Observe que qualquer ^ que precede um caractere significa que você deve manter o controle enquanto digita esse caractere
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
Etapas para que você possa executar isso também!
- Copie a linha no Vim
- Digite
:s/\^V/<Ctrl-V><Ctrl-V>/g
e pressione enter (os dois s devem fornecer um ^ V azul)
- Digite
:s/\^R/<Ctrl-V><Ctrl-R>/g
e pressione enter (você deve ver azul ^ Rs agora)
- Digite
:s/\^X/<Ctrl-V><Ctrl-X>/g
e pressione enter (você verá azul ^ Xs agora)
- Digite
:s/\^O/<Ctrl-V><Ctrl-O>/g
e pressione enter
- Digite
:s/\^A/<Ctrl-V><Ctrl-A>/g
e pressione enter
- Digite
:s/\^\[/<Ctrl-V><Ctrl-[>/g
e pressione enter (este comando é um pouco diferente porque eu precisava escapar do [)
- Digite
0"yy$
. O comando agora está armazenado no registro y
- Configure a entrada em uma linha e execute com
@y
Se alguém souber uma maneira melhor de compartilhar o comando, entre em contato. Eu sei que isso é demorado, mas é o melhor que eu poderia fazer.
Entrada / Saída
A sequência de entrada deve estar sozinha em qualquer linha do arquivo. 1 0 0 4 3 0 0 0 7
A saída simplesmente substituirá a sequência de entrada 1 2 3 4 3 4 5 6 7
Explicação
Algoritmo
- Comece com um número diferente de zero, verifique se não é o último número
- Encontre o próximo número diferente de zero
- Pegue a diferença deles. Se a resposta for negativa, você deve diminuir para reparar o intervalo, caso contrário, aumentar para reparar o intervalo.
- Volte para o primeiro caractere e substitua cada zero aumentando / diminuindo o número anterior.
- Repita até chegar ao último caractere
Macros usadas
@e - Verifique se há fim. O último número terá um e anexado a ele. Se o número sob o cursor tiver um e no final, exclua ee interrompa a execução. Caso contrário, inicie um ciclo de interpolação com @b.
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b - Inicia o ciclo de interpolação. Salve o número sob o cursor para uma operação de subtração (@s) e encontre o próximo termo diferente de zero (@f)
mayiwo^R"^V^X ^["sy0dd`a@f
@s - Armazena o comando de subtração para usar em @d. É simplesmente (val)^X
onde (val)
está o número no início da etapa de interpolação. Isso é definido pelo comando @b.
@f - Encontre o próximo termo diferente de zero. Escreva o valor atual no registro sem nome, depois escreva @f @d
na próxima linha e execute @z. Isso repetirá esse comando se o número for zero e executará @d se não for.
wmbyiwo@f @d^[@z
@z - Execução condicional se o registro sem nome for 0. Este comando espera dois comandos em uma nova linha no formato command1 command2
. Se o registro sem nome for 0, command1
é executado, caso contrário, command2
é executado. Observe que nenhum dos comandos pode conter espaços.
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t - Registro de comando temporário. Armazena vários comandos por um curto período de tempo antes de executá-los. Usado principalmente nas instruções if.
@d - Determina a direção da interpolação. Subtrai o primeiro número da sequência do número sob o cursor (usando @s). Se o resultado for negativo, a interpolação deve diminuir, para que ^ X seja salvo em @a. Caso contrário, devemos incrementar para que ^ A seja salvo em @a. Depois que isso for salvo, volte para o início desse ciclo de interpolação e execute @i para realmente interpolar
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a - Armazena ^A
ou ^X
aumenta ou diminui durante a etapa de interpolação. Isso é definido pelo comando @d.
@i - Interpolar. Copie o número no local atual para @x e passe para o próximo número. Se esse número for zero, substitua-o por @x e execute @a para modificá-lo corretamente para cima ou para baixo e repita este comando. Se o número não for zero, chegamos ao final desse ciclo de interpolação. Um novo deve ser iniciado com esse número como o início; portanto, execute @e para verificar o final e execute novamente.
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x - Registro de armazenamento temporário. Usado no comando interpolar (@i)
Quebrando as teclas digitadas
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
nosso programa pode ter outro valor, comonull
?