GitHub - bkad/CamelCaseMotion: A vim script to provide CamelCase motion through...
source link: https://github.com/bkad/CamelCaseMotion
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
CamelCaseMotion.vim
Created By Ingo Karkat
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:
call camelcasemotion#CreateMotionMappings('<leader>')
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:
map <silent> w <Plug>CamelCaseMotion_w map <silent> b <Plug>CamelCaseMotion_b map <silent> e <Plug>CamelCaseMotion_e map <silent> ge <Plug>CamelCaseMotion_ge sunmap w sunmap b sunmap e sunmap ge
EXAMPLE: Map iw, 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
EXAMPLE: Map insert mode motions:
imap <silent> <S-Left> <C-o><Plug>CamelCaseMotion_b imap <silent> <S-Right> <C-o><Plug>CamelCaseMotion_w
Most commonly motions are <leader>w
, <leader>b
and <leader>e
, all of which can
be used in normal mode, operator-pending mode (cp. :help operator
), and visual
mode. For example, type bc<leader>w
to change 'Camel' in 'CamelCase' to
something else.
The <leader>
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:
:let mapleader
If you get an error, you are still using the default (\
). If you wish to
define a new mapleader, try:
:let mapleader = "your_new_mapleader_string"
Drop the :
if you are defining the mapleader in your vimrc. For more
information about mapleader, check out:
: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 by Anthony Van Ham.
Installation
If you are running Vim 8.0 or greater, add this repo to your packpath (See :h packages
). Otherwise try
Vundle or pathogen.
Dependencies
Requires Vim 7.0 or higher.
Alternatives
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK