CamelCaseMotion.vim ==================== Created By [Ingo Karkat](https://github.com/inkarkat) Description ----------- Vim provides many built-in motions, e.g. to move to the next word, or end of the current word. Most programming languages use either CamelCase ("anIdentifier") or underscore_notation ("an_identifier") naming conventions for identifiers. The best way to navigate inside those identifiers using Vim built-in motions is the [count]f{char} motion, i.e. f{uppercase-char} or f_, respectively. But we can make this easier: This script defines motions similar to `w`, `b`, `e` which do not move word-wise (forward/backward), but Camel-wise; i.e. to word boundaries and uppercase letters. The motions also work on underscore notation, where words are delimited by underscore ('_') characters. From here on, both CamelCase and underscore_notation entities are referred to as "words" (in double quotes). Just like with the regular motions, a [count] can be prepended to move over multiple "words" at once. Outside of "words" (e.g. in non-keyword characters like / or ;), the new motions move just like the regular motions. Vim provides a built-in `iw` text object called 'inner word', which works in operator-pending and visual mode. Analog to that, this script defines inner "word" motions which select the "word" (or multiple "words" if a [count] is given) where the cursor is located. Usage ====== To use the default mappings, add the following to your vimrc: ```vim call camelcasemotion#CreateMotionMappings('') ``` If you want to use different mappings, map your keys to the CamelCaseMotion_? mapping targets your vimrc). EXAMPLE: Map to w, b and e mappings: ```vim map w CamelCaseMotion_w map b CamelCaseMotion_b map e CamelCaseMotion_e map ge CamelCaseMotion_ge sunmap w sunmap b sunmap e sunmap ge ``` EXAMPLE: Map iw, ib and ie motions: ```vim omap iw CamelCaseMotion_iw xmap iw CamelCaseMotion_iw omap ib CamelCaseMotion_ib xmap ib CamelCaseMotion_ib omap ie CamelCaseMotion_ie xmap ie CamelCaseMotion_ie ``` Most commonly motions are `w`, `b` and `e`, all of which can be used in normal mode, operator-pending mode (cp. `:help operator`), and visual mode. For example, type `bcw` to change 'Camel' in 'CamelCase' to something else. The `` string is defined with the `mapleader` variable in vim, and defaults to the backslash character (`\`). Therefore, the motions defined by this plugin would resolve to `\w`, `\b` and `\e`. Some vim users prefer to use the comma key (`,`), which you may have already defined in your vimrc. To check your current mapleader, execute: ```vim :let mapleader ``` If you get an error, you are still using the default (`\`). If you wish to define a new mapleader, try: ```vim :let mapleader = "your_new_mapleader_string" ``` Drop the `:` if you are defining the mapleader in your vimrc. For more information about mapleader, check out: ```vim :help mapleader ``` Motions Example --------------- Given the following CamelCase identifiers in a source code fragment: ``` set Script31337PathAndNameWithoutExtension11=%~dpn0 set Script31337PathANDNameWITHOUTExtension11=%~dpn0 ``` and the corresponding identifiers in underscore_notation: ``` set script_31337_path_and_name_without_extension_11=%~dpn0 set SCRIPT_31337_PATH_AND_NAME_WITHOUT_EXTENSION_11=%~dpn0 ``` w moves to ([x] is cursor position): [s]et, [s]cript, [3]1337, [p]ath, [a]nd, [n]ame, [w]ithout, [e]xtension, [1]1, [d]pn0, dpn[0], [s]et b moves to: [d]pn0, [1]1, [e]xtension, [w]ithout, ... e moves to: se[t], scrip[t], 3133[7], pat[h], an[d], nam[e], withou[t], extensio[n], 1[1], dpn[0] Inner Motions Example --------------------- Given the following identifier, with the cursor positioned at [x]: ``` script_31337_path_and_na[m]e_without_extension_11 ``` v3iw selects script_31337_path_and_[name_without_extension_]11 v3ib selects script_31337_[path_and_name]_without_extension_11 v3ie selects script_31337_path_and_[name_without_extension]_11 Instead of visual mode, you can also use c3iw to change, d3iw to delete, gU3iw to upper-case, and so on. Source ------ Based on [Moving through camel case words](http://vim.wikia.com/wiki/Moving_through_camel_case_words) by Anthony Van Ham. Installation ------------ If you're using [Vundle](https://github.com/VundleVim/Vundle.vim), just add `Plugin 'bkad/CamelCaseMotion'` to your .vimrc and run `:PluginInstall`. If you're using [pathogen](https://github.com/tpope/vim-pathogen), add this repo to your bundle directory. Dependencies ------------ Requires Vim 7.0 or higher.