diff options
author | Josh Rahm <rahm@google.com> | 2025-04-09 03:08:14 +0000 |
---|---|---|
committer | Josh Rahm <rahm@google.com> | 2025-04-09 03:08:14 +0000 |
commit | 94de573c7f05582cb2ab6e2a7cb81cca31ba6453 (patch) | |
tree | f857df98b5ac5cc69310c5be2ae49310e01f0064 | |
parent | 434fe773449e7bcaa7a233c02f06033188f51b79 (diff) | |
download | fieldmarshal.vim-94de573c7f05582cb2ab6e2a7cb81cca31ba6453.tar.gz fieldmarshal.vim-94de573c7f05582cb2ab6e2a7cb81cca31ba6453.tar.bz2 fieldmarshal.vim-94de573c7f05582cb2ab6e2a7cb81cca31ba6453.zip |
-rw-r--r-- | autoload/fall.vim | 44 | ||||
-rw-r--r-- | plugin/fall.vim | 8 |
2 files changed, 52 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 diff --git a/plugin/fall.vim b/plugin/fall.vim index 8de1780..a3eb2c5 100644 --- a/plugin/fall.vim +++ b/plugin/fall.vim @@ -35,6 +35,14 @@ vnoremap <silent> ii <cmd>exec "normal! " \ . "kO" \ . fall#fall('k', '^\s*$') . 'j' <cr> +" Selects "vertical words" +vnoremap <expr> <silent> iv fall#visual_vertical_word("jk", '\k') +onoremap <silent> iv <cmd>exec "normal! V" . fall#visual_vertical_word("jk", '\k')<cr> + +" Selects "vertical WORDS" +vnoremap <expr> <silent> iV fall#visual_vertical_word("jk", '\S') +onoremap <silent> iV <cmd>exec "normal! V" . fall#visual_vertical_word("jk", '\S')<cr> + vnoremap <expr> <silent> ic fall#visual_same_character("jk") onoremap <silent> ic <cmd>exec "normal! V" . fall#visual_same_character("jk")<cr> |