Como posso formatar argumentos / hashes Ruby no Vim?

0

Gostaria de poder formatar facilmente o código Ruby a partir do Vim.

Se eu tiver um método com um argumento hash

foobar(foo: "FOO", bar: "BAR")

Como posso transformá-lo em

foobar(
    foo: "FOO",
    bar: "BAR"
)

Ou, se eu tiver um hash normal

foobar = { foo: "FOO", bar: "BAR" }

Para isso

foobar = {
    foo: "FOO",
    bar: "BAR"
}

Como posso conseguir isso com o Vim? Preciso de um plugin de algum tipo?

    
por jordelver 01.10.2013 / 17:00

2 respostas

6

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

Acerte @q sobre foobar(foo: "FOO", bar: "BAR") para obter:

foobar(
    foo: "FOO",
    bar: "BAR"
)

e mais de foobar = { foo: "FOO", bar: "BAR" } para obter:

foobar = {
    foo: "FOO",
    bar: "BAR"
}

EDITAR

Embora seja mais provável que essa macro seja salva nas sessões, é muito fácil sobrescrevê-la. Felizmente, é muito fácil convertê-lo em um mapeamento e mantê-lo em seu ~/.vimrc :

nnoremap <F6> $v%lohc<CR><CR><Up><C-r>"<Esc>:s/,/,\r/g<CR>:'[,']norm ==<CR>
    
por 01.10.2013 / 22:55
1

A resposta do @romainl é muito completa.

Mas se você é novo no vim, eu recomendo que apenas atue on-line para reformatar (em todos os lugares) e, em seguida, no modo normal:

:s/,/,\r/g

Deve ser o suficiente no começo.

    
por 02.10.2013 / 17:39

Tags