A macro a seguir funciona nos dois casos:
qq " start recording in register q
$ " jump to the last character on the line, a ) or a }
v% " select from here to the opening ( or {, inclusive
loh " shrink the selection
c " remove selection and enter insert mode
<CR><CR><Up> " open the (){} and put the cursor in between
<C-r>" " insert the content of default register
<Esc> " go back to normal mode
:s/,/,\r/g<CR> " replace every , with itself followed by a newline
:'[,']norm == " format the whole thing
q " stop recording
Bata @q
mais foobar(foo: "FOO", bar: "BAR")
para obter:
foobar(
foo: "FOO",
bar: "BAR"
)
e mais foobar = { foo: "FOO", bar: "BAR" }
para começar:
foobar = {
foo: "FOO",
bar: "BAR"
}
EDITAR
Embora seja mais provável que essa macro seja salva entre sessões, é muito fácil sobrescrevê-la. Felizmente, é muito fácil convertê-lo em um mapeamento e mantê-lo na sua ~/.vimrc
:
nnoremap <F6> $v%lohc<CR><CR><Up><C-r>"<Esc>:s/,/,\r/g<CR>:'[,']norm ==<CR>
<CR><CR>k
deveria ser<CR><CR><Up>
, porque ainda estamos no modo de inserção nesse ponto. O mapeamento no último bloco de código tem o erro corrigido.