一部のメジャーモードでは思ったようにインデントを整えてくれないことがありますね。
indent
の逆、outdent
,dedent
というものが標準関数に見つからなかったので以下を試してみます。
割り当てキーバインドはShift+TAB
にします。
(defun my-outdent-dwim ()
(interactive)
(let* ((x-times (or current-prefix-arg 1))
(offset (- (* c-basic-offset x-times))))
(if mark-active
(indent-rigidly
(save-excursion (goto-char (region-beginning)) (point-at-bol))
(save-excursion (goto-char (region-end)) (point-at-eol))
offset)
(indent-rigidly (point-at-bol) (point-at-eol) offset))))
(global-set-key (kbd "<S-tab>") 'my-outdent-dwim)
- 範囲選択があり: 範囲全体のインデントを1つ戻す
- 範囲選択がなし: 現在行のインデントを1つ戻す
C-u NUM S-TAB
のように数字の引数を与えることでNUM
分インデントを下げます。
-
C-u 3 S-TAB
: インデントを3レベル分戻す
補足
indent-rigidly
はC-x TAB
に標準で割り当てられています。
面倒ですがC-u -4 C-x TAB
とすることで同じような効果が得られます。