Giter VIP home page Giter VIP logo

camelcasemotion's Introduction

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:

let g:camelcasemotion_key = '<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

camelcasemotion's People

Contributors

bkad avatar jean avatar chronial avatar ktonga avatar henrik avatar yjyao avatar samstokes avatar shougo avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.