# Reform [![Join the chat at https://gitter.im/Suor/sublime-reform](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Suor/sublime-reform?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) This thing enables you to move through and reform your code like magic. At least it aims to do it :) Here is a list of supported commands: Command | Key* | Description ----------------- | ------------ | --------------------------------------------------------------- find_word_up | ctrl+up | Jump to previous occurrence of a word at cursor find_word_down | ctrl+down | Jump to next occurrence of a word at cursor def_up | alt+up | Jump to previous function or class declaration def_down | alt+down | Jump to next function or class declaration smart_up | alt+[ | Jump to previous declaration or block2 smart_down | alt+] | Jump to next declaration or block2 move_word_right | ctrl+alt+/ | Swap word at cursor with a next one move_word_left | ctrl+alt+. | Swap word at cursor with a previous one move_block_up | ctrl+alt+; | Swap block with a previous one move_block_down | ctrl+alt+' | Swap block with a next one expand_next_word | alt+d | Expand selection to next word matching one at cursor1 select_scope_words| alt+shift+d | Select words in function scope matching word at cursor1,3 select_scope_up | ctrl+shift+; | Select block2/function/class at cursor, select enclosing one on next hit3 select_scope_down | ctrl+shift+' | Undo last select_scope_up delete_block | ctrl+alt+d | Delete block at cursor with appropriate adjusting empty lines extract_expr | alt+enter | Extract selected expression into an assignment4 inline_expr | alt+= | Inline variable defined on line at cursor * Current key bindings are very experimental, especially on OS X.
1 Matches only whole words, case-sensitive, comments and strings are skipped.
2 Block is a adjacent commented lines or a blob of text surrounded with empty lines.
3 Works for python, js, plain text. Tries to work for other languages.
4 Works for python, js, ruby, php (and any languages with no keyword to define var).
## Installation - [Install Package Control](https://sublime.wbond.net/installation). - Bring up the Command Palette with Ctrl+Shift+p (Cmd+Shift+p on OS X). - Select "Package Control: Install Package" (it'll take a few seconds). - Select or type in "Reform" when the list appears. ## TODO I have plans. Here is a list if you want to help and looking where to start: - Move functions up and down. - Better select words in scope: expand to next scope on subsequent hit, autodetect name scope. - Break long lines. - Break long strings, several variants including switching to multiline separators. - Reform dicts (object literals) from one-line to multi-line and back. - Same for calls, calls with keyword arguments, array literals. - Reform multiline list, set, dict comprehensions and generator expressions. - Align =, =>, :, \ and other punctuation - Switch brackets, parentheses, whatever. - Move blocks respecting functions. Also, support for more programming languages for language-dependent commands will help.