diff options
Diffstat (limited to 'autoload')
-rw-r--r-- | autoload/fall.vim | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/autoload/fall.vim b/autoload/fall.vim index feccc1a..ac54ba0 100644 --- a/autoload/fall.vim +++ b/autoload/fall.vim @@ -114,3 +114,47 @@ function! fall#visual_same_character(dir) return expr endfunction + +function! fall#visual_vertical_word(dir, def_class) + let start_line = line(".") + let line = start_line + let column = col(".") + + let start_char = matchstr(getline(line), '\%' . column . 'c.') + if (start_char =~# '\s') + let class = '\s' + elseif (start_char =~# a:def_class) + let class = a:def_class + else + return "" + endif + + let expr = "" + + if a:dir =~ 'k' + while line > 1 + let line -= 1 + if ! (matchstr(getline(line), '\%' . column . 'c.') =~# class) + break + endif + let expr .= 'k' + endwhile + endif + + if a:dir == 'jk' + let expr .= 'o' + let line = start_line + endif + + if a:dir =~ 'j' + while line <= line("$") + let line += 1 + if ! (matchstr(getline(line), '\%' . column . 'c.') =~# class) + break + endif + let expr .= 'j' + endwhile + endif + + return expr +endfunction |