我希望能够在 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
一开始就应该够了。