如何在 Vim 中格式化 Ruby 参数/哈希?

如何在 Vim 中格式化 Ruby 参数/哈希?

我希望能够在 Vim 内部轻松格式化 Ruby 代码。

如果我有一个带有哈希参数的方法

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

我怎样才能把它变成

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

或者,如果我有一个普通哈希

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

进入这个

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

我该如何使用 Vim 实现这一点?我需要某种插件吗?

答案1

以下宏在两种情况下均有效:

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

击中@q可获得foobar(foo: "FOO", bar: "BAR")

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

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

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

编辑

虽然这个宏很可能跨会话保存,但很容易被覆盖。幸运的是,可以很容易地将其转换为映射并将其保存在您的~/.vimrc

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

答案2

@romainl 的回答很完整。

但是如果你是 vim 新手,我建议只进入你想要重新格式化的行(其上的所有地方),然后进入正常模式:

:s/,/,\r/g

一开始就应该够了。

相关内容