git clone 'git://'


Smart Shift

Smart Shift is a minor mode for conveniently shift the line/region to the left/right by the current major mode indentation width or shift line/region backwardly/forwardly by lines.



Once you have setup Melpa you can use package-install command to install. The package name is smart-shift.


(add-to-list 'load-path "/path/to/smart-shift")
(require 'smart-shift)
(global-smart-shift-mode 1)


Smart Shift will infer the indentation level of current major mode, if none of major modes listed below match, use the tab-width as default.

It can also be set to a number explictly.

(setq smart-shift-indentation-level 2)

Or, for some major mode we haven't support, add following snippets to your config file. Test it and send a PR. lisp (eval-after-load 'your-major-mode '(progn (add-to-list 'smart-shift-mode-alist '(major-mode-or-derived-mode . customize-base-offset))))

Supported major modes

Interactive commands

Command | Keybinding | Description ———————|————|——————————————————– smart-shift-left | C-C <left> | Shift the line or region ARG times to the left. smart-shift-right | C-C <right> | Shift the line or region ARG times to the right. smart-shift-up | C-C <up> | Shift the line or region ARG lines backwardly. smart-shift-down | C-C <down> | Shift the line or region ARG lines forwardly.

After invoking smart-shift-<arrow> the first time, you can simply hit the <arrow> key to continuously shift, respectively.

If you use the key-chord like me. I strongly recommend you add the following snippets:

(key-chord-define-global "<<" 'smart-shift-left)
(key-chord-define-global ">>" 'smart-shift-right)


Forks and pull requests are welcome!