camelcasemotion : Motion through CamelCaseWords and underscore_notation.
| script karma |
Rating 116/41,
Downloaded by 1587 |
| created by |
| Ingo Karkat |
| |
| script type |
| utility |
| |
| description |
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 ',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 script 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.
USAGE
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
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]:
script_31337_path_and_na[m]e_without_extension_11
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 vimtip #1016 by Anthony Van Ham. |
| |
| install details |
INSTALLATION
This script is packaged as a vimball. If you have the "gunzip" decompressor
in your PATH, simply edit the *.vba.gz package in Vim; otherwise, decompress
the archive first, e.g. using WinZip. Inside Vim, install by sourcing the
vimball or via the :UseVimball command.
vim camelcasemotion.vba.gz
:so %
To uninstall, use the :RmVimball command.
DEPENDENCIES
- Requires Vim 7.0 or higher.
CONFIGURATION
If you want to use different mappings, map your keys to the
<Plug>CamelCaseMotion_? mapping targets _before_ sourcing this script (e.g. in
your .vimrc).
EXAMPLE: Replace the default 'w', 'b' and 'e' mappings instead of defining
additional mappings',w', ',b' and ',e':
map <silent> w <Plug>CamelCaseMotion_w
map <silent> b <Plug>CamelCaseMotion_b
map <silent> e <Plug>CamelCaseMotion_e
sunmap w
sunmap b
sunmap e
EXAMPLE: Replace default 'iw' text-object and define 'ib' and 'ie' motions:
omap <silent> iw <Plug>CamelCaseMotion_iw
xmap <silent> iw <Plug>CamelCaseMotion_iw
omap <silent> ib <Plug>CamelCaseMotion_ib
xmap <silent> ib <Plug>CamelCaseMotion_ib
omap <silent> ie <Plug>CamelCaseMotion_ie
xmap <silent> ie <Plug>CamelCaseMotion_ie |
| |
script versions (upload new version)
Click on the package to download.
| camelcasemotion.vba.gz |
1.50 |
2009-05-05 |
7.0 |
Ingo Karkat |
- Do not create mappings for select mode; according to|Select-mode|, printable
character commands should delete the selection and insert the typed
characters. Now using :xmap to only target visual mode.
- Moved functions from plugin to separate autoload script.
- Split off documentation into separate help file. Now packaging as VimBall. |
| camelcasemotion.vim |
1.40.017 |
2008-05-19 |
7.0 |
Ingo Karkat |
BF: Now using :normal! to be independent from any user mappings. Thanks to Neil Walker for the patch. |
| camelcasemotion.vim |
1.40.016 |
2008-04-28 |
7.0 |
Ingo Karkat |
BF: Wrong forward motion stop at the second digit if a word starts with multiple numbers (e.g. 1234.56789). Thanks to Wasim Ahmed for reporting this. |
| camelcasemotion.vim |
1.40.015 |
2008-04-24 |
7.0 |
Ingo Karkat |
ENH: Added inner "word" text objects 'i,w' etc. that work analoguous to the built-in 'iw' text object. Thanks to David Kotchan for this suggestion. |
| camelcasemotion.vim |
1.30.014 |
2008-04-20 |
7.0 |
Ingo Karkat |
The motions now also stop at non-keyword boundaries, just like the regular motions. This has no effect inside a CamelCaseWord or inside underscore_notation, but it makes the motions behave like the regular motions (which is important if you replace the default motions). Thanks to Mun Johl for reporting this. |
| camelcasemotion.vim |
1.30.013 |
2008-04-09 |
7.0 |
Ingo Karkat |
Allowing users to use mappings different than ,w ,b ,e by defining <Plug>CamelCaseMotion_? target mappings. This can even be used to replace the default 'w', 'b' and 'e' mappings, as suggested by Mun Johl.
Now requires VIM 7.0 or higher. |
| camelcasemotion.vim |
1.20.012 |
2007-06-06 |
6.0 |
Ingo Karkat |
BF: Corrected motions through mixed CamelCase_and_UnderScore words by re-ordering and narrowing the search patterns. |
| camelcasemotion.vim |
1.20.011 |
2007-06-02 |
6.0 |
Ingo Karkat |
Thanks again to Joseph Barker for discussing the complicated visual mode mapping on the vim-dev mailing list and coming up with a great simplification. |
| camelcasemotion.vim |
1.20.010 |
2007-05-30 |
6.0 |
Ingo Karkat |
ENH: The visual mode motions now also (mostly) work with the (default) setting 'set selection=inclusive' / 'behave xterm', instead of selecting one character too much. So far, you had to 'set selection=exclusive' / 'behave mswin'. |
| camelcasemotion.vim |
1.10.009 |
2007-05-30 |
6.0 |
Ingo Karkat |
Incorporated major improvements and simplifications done by Joseph Barker:
Operator-pending and visual mode motions now accept [count] of more than 9.
Visual selections can now be extended from either end.
Instead of misusing the :[range], the special variable v:count1 is used. Custom commands are not needed anymore.
Operator-pending and visual mode mappings are now generic: There's only a single mapping for ,w that can be repeated, rather than having a separate mapping for 1,w 2,w 3,w ...
BF: The operator-pending and visual mode ,e mapping doesn't work properly when it reaches the end of line; the final character of the moved-over "word" remains. Fixed this problem unless the "word" is at the very end of the buffer.
BF: Degenerate CamelCaseWords that consist of only a single uppercase letter (e.g. "P" in "MapPRoblem") are skipped by all motions. Thanks to Joseph Barker for reporting this.
BF: In CamelCaseWords that consist of uppercase letters followed by decimals (e.g. "MyUPPER123Problem", the uppercase "word" is skipped by all motions. |
| camelcasemotion.vim |
1.00.007 |
2007-05-22 |
6.0 |
Ingo Karkat |
Initial upload |
|