From ad2326d0989bf2f2c3be83d9cd3b8edf260f10d6 Mon Sep 17 00:00:00 2001 From: Kevin Le Date: Mon, 27 Feb 2017 15:37:52 -0800 Subject: explode the regex to make it easier to document --- autoload/camelcasemotion.vim | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/autoload/camelcasemotion.vim b/autoload/camelcasemotion.vim index 9f3b598..6b6dd50 100644 --- a/autoload/camelcasemotion.vim +++ b/autoload/camelcasemotion.vim @@ -17,6 +17,30 @@ " file creation "- functions ------------------------------------------------------------------" + +let s:forward_to_end_list = [] +call add(s:forward_to_end_list, '\m\d\+') " number +call add(s:forward_to_end_list, '\u\+\ze\%(\u\l\|\d\)') " ALLCAPS followed by CamelCase or number +call add(s:forward_to_end_list, '\l\+\ze\%(\u\|\d\)') " lowercase followed by ALLCAPS +call add(s:forward_to_end_list, '\u\l\+') " CamelCase +call add(s:forward_to_end_list, '\%(\a\|\d\)\+\ze[-_]') " underscore_notation +call add(s:forward_to_end_list, '\%(\k\@!\S\)\+') " non-keyword +call add(s:forward_to_end_list, '\%([-_]\@!\k\)\+\>') " word +let s:forward_to_end = join(s:forward_to_end_list, '\|') + +let s:forward_to_next_list = [] +call add(s:forward_to_next_list, '\m\<\D') " word +call add(s:forward_to_next_list, '^$') " empty line +call add(s:forward_to_next_list, '\%(^\|\s\)\+\zs\k\@!\S') " non-keyword after whitespaces +call add(s:forward_to_next_list, '\>\<') " non-whitespace after word +call add(s:forward_to_next_list, '\d\+') " number +call add(s:forward_to_next_list, '\l\+\zs\%(\u\|\d\)') " lowercase followed by capital letter or number +call add(s:forward_to_next_list, '\u\+\zs\%(\u\l\|\d\)') " ALLCAPS followed by CamelCase or number +call add(s:forward_to_next_list, '\u\l\+') " CamelCase +call add(s:forward_to_next_list, '\u\@', 'W' . l:direction) + call search(s:forward_to_end, 'W' . l:direction) " Note: word must be defined as '\k\>'; '\>' on its own somehow " dominates over the previous branch. Plus, \k must exclude the " underscore, or a trailing one will be incorrectly moved over: @@ -65,7 +89,7 @@ function! s:Move(direction, count, mode) let l:direction = (a:direction == 'w' ? '' : a:direction) " word | empty line | non-keyword after whitespaces | non-whitespace after word | number | lowercase folowed by capital letter or number | ACRONYM followed by CamelCase or number | CamelCase | ACRONYM | underscore followed by ACRONYM, Camel, lowercase or number - call search( '\m\<\D\|^$\|\%(^\|\s\)\+\zs\k\@!\S\|\>\<\|\d\+\|\l\+\zs\%(\u\|\d\)\|\u\+\zs\%(\u\l\|\d\)\|\u\l\+\|\u\@