(setq ruby-deep-indent-paren-style nil)とすると下記のようにインデントできます。
SuperLongClassName.super_long_name_method( hoge: 'fuga', foo: 'bar', baka: 'aho' )おお!すばらしい…かと思ったら閉じ括弧が微妙ですね。ぐぐったらこんな設定を見つけました。
リンク先の通りなんだけども、何やっているのかメモっとく
;; defadviceで既存のインデント関数ruby-indent-lineに対する追加処理を定義する ;; after -> 既存の関数の処理の後に実行される ;; unindent-closing-paren -> このアドバイスの名前 ;; activate -> このアドバイスがすぐに有効になる (defadvice ruby-indent-line (after unindent-closing-paren activate) (let ((column (current-column)) indent offset) (save-excursion ;; ポイント(カーソル)をインデントの位置に移動する (back-to-indentation) ;; syntax-ppssはparserの状態を表すリストを返す ;; 1番目の要素は括弧の深さ、2番目の要素は一番内側の開始括弧の位置を表す (let ((state (syntax-ppss))) ;; ポイントの初期状態とインデントの位置との差をoffsetとする (setq offset (- column (current-column))) ;; ポイントの位置の文字が')'で括弧の中にある場合 (when (and (eq (char-after) ?\)) (not (zerop (car state)))) ;; 一番内側の'('に移動 (goto-char (cadr state)) ;; インデント幅を取得 (setq indent (current-indentation))))) (when indent ;; インデントする (indent-line-to indent) ;; オフセットが存在する場合、その分だけポイントを移動する ;; つまり、インデント修正後のポイントのあるべき場所に戻る (when (> offset 0) (forward-char offset)))))
つまり、関数呼び出しの閉じ括弧がある行の場合、開始括弧の位置のインデント幅を取得して、同じ幅だけインデントしているということか