Emacs的ruby-mode在括号内缩进太多怎么办?

15

请原谅我对Emacs的新手问题,但有人知道如何解决吗?在用Emacs编写ruby代码时,它会以正确的级别缩进(即2个空格)所有关键字,如defclassmodulebegin等。但是,在将参数列表跨多行分隔时,它会缩进到一个看似随机的位置,例如第40列左右。

我一直在阅读有关Emacs制表符设置的资料,但似乎只是在打转而没有得到我正在寻找的信息,因此我想在这里问问。

这里是光标放置在参数列表中的屏幕截图。我尝试了在花括号内缩进(例如块或哈希),那样做可以正常工作,问题出在括号上。

Bug

3个回答

16

http://compgroups.net/comp.emacs/Ruby-mode-indentation-of-continuation-lines

(setq ruby-deep-indent-paren nil)

或者暂时地,在当前的会话中:

M-x set-variable RET ruby-deep-indent-paren RET nil RET

在括号内,它现在会像其他地方一样缩进。 但是在我上面发布的情况下仍存在一个次要的错误。 它比我想要的缩进了2个空格,因为我将其与({的组合混淆了。


2
仍有一个小缺陷:右括号/方括号仍然与内容对齐,而不是与打开列表的表达式对齐。 - mcandre
@mcandre,你最终解决了那个问题吗? - user240438
不好意思,我一旦找到解决方法就会立即发布。 - mcandre
在为一个单独的stackoverflow问题研究实际的Ruby规范时,我偶然发现了@mcandre。我猜我们都在搜索缩进和括号的内容,但并不是关于“方法参数”的确切内容:https://dev59.com/xGsz5IYBdhLWcg3wWmUy - user240438

1

ruby-deep-indent-paren和相关变量对我没有影响,因为ruby-use-smiet。将两者都设置为nil似乎也没有帮助:-(

但是切换到enh-ruby-mode后,它可以工作!

  • enh-ruby-deep-indent-paren设置为nil会产生影响。
  • enh-ruby-bounce-deep-indent设置为t允许我再次按Tab键在样式之间切换!

0

基本上它试图将参数在多行括号参数列表中对齐,例如:

function_call (arg1,
               arg2);

ruby-deep-indent-paren设置为nil,如上所述,会将混合花括号的行为更改为令人讨厌的双重缩进,例如:
if (cond) then
  do_stuff
end
function_call (&proc {
    do_stuff
  })

排版的问题真的让我困扰。我修改了Mats原始的ruby-mode.el代码,试图更合理地缩进。但是我无论如何都无法清理它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接