如何在emacs中为indent-region添加赋值和散列的智能对齐?

Lor*_*ren 2 ruby emacs elisp code-formatting

当我有代码时:

a = 1
foo = 2
Run Code Online (Sandbox Code Playgroud)

我想让它看起来像:

a   = 1
foo = 2
Run Code Online (Sandbox Code Playgroud)

我可以使用这里定义的align-to-equals函数:

Emacs热键对齐等号

通过选择区域并运行该功能.我可以通过将函数定义中的'='更改为'=>来更改函数以用于哈希,并具有:

bar = { :a => 1,
 :foo => 2 }
Run Code Online (Sandbox Code Playgroud)

转换为:

bar = { :a   => 1,
        :foo => 2 }
Run Code Online (Sandbox Code Playgroud)

当我选择整个缓冲区并运行缩进区域时,我希望对所有代码执行此对齐.但我希望它能够智能地完成 - 不要将缓冲区中的每一个'='与最右边的'='对齐,而是将它用于赋值块和单个散列文字.

编辑:澄清这最后一​​部分,说我有以下缓冲区:

a = 1
foo = 2

some_other_code

def fn
  bar = { :a => 1,
   :foo => 2 }
end
Run Code Online (Sandbox Code Playgroud)

我想做'Cx h'(选择整个缓冲区),'MC- \'(缩进区域),看起来像这样:

a   = 1
foo = 2

some_other_code

def fn
  bar = { :a   => 1,
          :foo => 2 }
end
Run Code Online (Sandbox Code Playgroud)

vpi*_*833 8

试试M-x align-regexp =.对其他人也一样.