Esse voodoo de registro vim louco (incremento de registros alfa) é possível dentro de uma macro?

3

Eu tenho 4 linhas.

foo ["bar"]
baz ["k"]
daskhfkjhadsfj ["askfjhfjdsh"]
dfjhafkjhfha ["skkksks"]

Gostaria de fazer uma macro que pegue a palavra e a coloque em um registrador, mas quero que o registro seja incrementado. por exemplo:

f"l"ayf"j0
f"l"byf"j0
f"l"cyf"j0
f"l"dyf"j0

Existe uma maneira de fazer esse comando ser feito de tal forma que os registradores autoincrementem, para depois colá-los:

jjjj
f"ap   
j
f"bp

Estou ciente da numeração de registros e yi "- gostaria de usar isso com registradores alfa. Também estou ciente de que uma colisão pode ocorrer com meu registro escolhido: Você pode assumir que minha macro será gravada em z e eu quero usar, digamos, af para registradores usados.

Você pode sugerir uma maneira de conseguir isso usando uma macro?

    
por Arima 01.02.2013 / 17:10

1 resposta

2

Com uma macro ? Talvez. Com duas macros, claro!

Primeiro, alguma configuração:

:set nrformats=alpha
:let @y="\"a"

E agora alguns loucos Vim registram o vodu:

qzf"l@yyf"Go Esc "yp ^ A 0"yy$dd ^ O j0q

A estratégia é usar uma macro ( y ) para rastrear qual registro usar em seguida e modificá-lo usando a outra macro.

  • f"l@yyf" é do original, só que usei @y no lugar de "a . Estamos usando a macro y para digitar "a em vez de digitá-la diretamente.
  • Go Esc "yp vai para o final do arquivo, adiciona uma nova linha lá e cola o conteúdo do registro y .
  • ^ A incrementa a letra sob o cursor. Se fosse a , agora é b . Nós definimos nrformats=alpha antes para que isso funcionasse com letras.
  • 0"yy$ yanks o texto atualizado de volta para o registro y .
  • dd ^ O limpa nossa linha de rascunho e volta para onde estávamos antes, e
  • j0 é o resto do seu original.
por 07.02.2013 / 01:07

Tags