Motion through CamelCaseWords and underscore_notation.
Clone or download
Ingo Karkat and vim-scripts Version 1.52
- FIX: Correct forward-to-end motion over lowercase part in "lowerCamel". Found this by chance in GitHub fork by Kevin Lee (bkad).
- BUG: Correct wrong stop on second letter of ACRONYM at the beginning of a word "AXBCText".
- The motion functionality is automatically tested via a runVimTests (vimscript #2565) test suite.
Latest commit 8db17bd Nov 11, 2011
Failed to load latest commit information.
autoload Version 1.52 Nov 16, 2011
doc Version 1.52 Nov 16, 2011
plugin Version 1.52 Nov 16, 2011
README Version 1.52 Nov 16, 2011


This is a mirror of

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 plugin defines motions ',w', ',b' and ',e' (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 plugin defines inner
"word" motions 'i,w', 'i,b' and 'i,e', which select the "word" (or multiple
"words" if a [count] is given) where the cursor is located. 

Use the new motions',w',',b' and ',e' in normal mode, operator-pending mode (cp.
:help operator), and visual mode. For example, type 'bc,w' to change 'Camel' in
'CamelCase' to something else. 

EXAMPLE: motions
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

,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]

EXAMPLE: inner motions
Given the following identifier, with the cursor positioned at [x]:

v3i,w selects script_31337_path_and_[name_without_extension_]11
v3i,b selects script_31337_[path_and_name]_without_extension_11
v3i,e selects script_31337_path_and_[name_without_extension]_11
Instead of visual mode, you can also use c3i,w to change, d3i,w to delete,
gU3i,w to upper-case, and so on. 

Source: Based on by
Anthony Van Ham.