Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Version 1.83

- Use more canonical way of invoking the Funcrefs in CountJump#Motion#MakeBracketMotionWithJumpFunctions(); this will then also work with passed String function names.
- FIX: Need to save v:count1 before issuing the normal mode "gv" command.
- Minor: Make substitute() robust against 'ignorecase'.
- Add optional dependency to ingo-library (vimscript #4433).
- FIX: In text objects, when the end position is before the begin position, that's not a valid selection. Test for this and abort in that case.
- For linewise selections, always position the cursor at the start of the end line to be consistent with the built-in text objects, and to avoid complicating the search patterns when attempting to do this through them.
  • Loading branch information...
commit c2c7725dabb6936ec868dadab94e7bdf88b0e9da 1 parent 87ba8a4
Ingo Karkat authored committed
View
28 README
@@ -28,8 +28,10 @@ diff_movement (vimscript #3180): Movement over diff hunks with ]] etc.
fortunes_movement (vimscript #3181): Movement over email fortunes with ]] etc.
help_movement (vimscript #3179): Movement over Vim help sections with ]] etc.
mail_movement (vimscript #3182): Movement over email quotes with ]] etc.
-JumpToTrailingWhitespace (vimscript #3968): Motions to locate unwanted
- whitespace at the end of lines.
+diffwindow_movement: Movement over changes in a diff window.
+ (vimscript #3719)
+JumpToTrailingWhitespace: Motions to locate unwanted whitespace at the end of lines.
+ (vimscript #3968)
TaskMotion (vimscript #3990): Motions to task and TODO markers.
ConflictMotions (vimscript #3991): Motions to and inside SCM conflict markers.
vim_movement (vimscript #4002): Movement over Vim functions with ]m etc.
@@ -37,12 +39,18 @@ vbs_movement (vimscript #4003): Movement over VBScript classes /
functions / properties / subs with ]m etc.
dosbatch_movement (vimscript #4004): Movement over MSDOS batch file functions
/ labels with ]m etc.
+SameSyntaxMotion (vimscript #4338): Motions to the borders of the same syntax highlighting.
+JumpToVerticalOccurrence: Like f{char}, but searching the same
+ (vimscript #4841) screen column, not line.
RELATED WORKS
- motpat.vim (vimscript #3030) offers similar functions to setup motion
mappings, but no text objects (yet).
- textobj-user (vimscript #2100) has support for user-defined text objects via
regular expressions.
+- movealong.vim (vimscript #4691) provides a :Movealong command (and optional
+ mappings) that repeatedly executes a motion until a condition of a syntax,
+ pattern match, or arbitrary expression is met.
USAGE
The plugin defines several functions, which set up the appropriate mappings
@@ -64,7 +72,6 @@ This function sets up mappings starting with [ and ] for movement (with
optional [count]) relative to the current cursor position, but rely on four
passed jump functions instead of text patterns to do the movement.
-
CountJump#TextObject#MakeWithCountSearch( mapArgs, textObjectKey, types, selectionMode, patternToBegin, patternToEnd )
Defines a complete set of mappings for inner and/or outer text objects that
@@ -72,7 +79,6 @@ support an optional [count] and are driven by search patterns for the
beginning and end of a block. Outer text objects include the matched pattern
text, inner ones not. Selection can be characterwise, linewise or blockwise.
-
CountJump#TextObject#MakeWithJumpFunctions( mapArgs, textObjectKey, types, selectionMode, JumpToBegin, JumpToEnd )
This is a generalization of CountJump#TextObject#MakeWithCountSearch() that
@@ -81,7 +87,6 @@ useful if the check for a match is too complex for a single regular
expression, or if you need to adjust the match position depending on the
circumstances.
-
Often, a region can be defined as a block of continuous lines that all match a
certain pattern (or, even more generic, where a provided predicate function
returns a match position). The following functions aid in implementing
@@ -114,6 +119,14 @@ The inner text object comprises all lines of the region itself, while the
outer text object also includes all adjacent lines above and below which do
not themselves belong to a region.
+The custom Funcrefs for jumps and predicates of lines belonging to a range may
+be invoked multiple times until the CountJump function arrives at its
+destination. To help the Funcrefs to determine where in this sequence they
+are, an empty g:CountJump_Context dictionary is initialized at the start of
+each CountJump function. Funcrefs can put custom information (e.g. the
+particular comment prefix on the current line) in there and evaluate this in
+subsequent invocations.
+
EXAMPLE
Let's illustrate the usage by developing custom motions and text objects for
Pascal begin..end blocks.
@@ -124,19 +137,18 @@ it:
][ Go to [count] next end of a block.
[[ Go to [count] previous start of a block.
[] Go to [count] previous end of a block.
-
+>
call CountJump#Motion#MakeBracketMotion('<buffer>', '', '', '\c^begin\n\zs', '\c^.*\nend', 0)
The begin pattern positions the cursor on the beginning of the line following
the "begin" keyword, the end pattern on the beginning of the line
preceding the "end" keyword.
-
We want to select a block, either including or excluding the lines with the
begin..end keywords:
ib "inner block" text object, select [count] contents of
a block.
ab "a block" text object, select [count] blocks.
-
+>
call CountJump#TextObject#MakeWithCountSearch('<buffer>', 'b', 'ai', 'V', '\c^begin\n', '\c^end.*$')
If there is a filetype detection for Pascal files, we can simply put the
View
74 autoload/CountJump.vim
@@ -1,13 +1,23 @@
" CountJump.vim: Move to a buffer position via repeated jumps (or searches).
"
" DEPENDENCIES:
+" - ingo/motion/helper.vim autoload script (optional)
"
-" Copyright: (C) 2009-2012 Ingo Karkat
+" Copyright: (C) 2009-2014 Ingo Karkat
" The VIM LICENSE applies to this script; see ':help copyright'.
"
" Maintainer: Ingo Karkat <ingo@karkat.de>
"
" REVISION DATE REMARKS
+" 1.83.019 11-Jan-2014 Factor out special treatment for visual and
+" operator-pending motions to
+" ingo#motion#helper#AdditionalMovement(), but
+" keep internal fallback to keep the dependency to
+" ingo-library optional.
+" 1.83.018 14-Jun-2013 Minor: Make substitute() robust against
+" 'ignorecase'.
+" FIX: Need to save v:count1 before issuing the
+" normal mode "gv" command.
" 1.81.017 15-Oct-2012 BUG: Wrong variable scope for copied
" a:isBackward in
" CountJump#CountSearchWithWrapMessage().
@@ -144,7 +154,7 @@ function! CountJump#CountSearchWithWrapMessage( count, searchName, searchArgumen
" (i.e. search(..., 'c')), the flag must only be active on the very
" first iteration; otherwise, all subsequent iterations will just
" stay put at the current match.
- let l:searchArguments[1] = substitute(l:searchArguments[1], 'c', '', 'g')
+ let l:searchArguments[1] = substitute(l:searchArguments[1], '\Cc', '', 'g')
endif
" Note: No need to check s:searchArguments and 'wrapscan'; the wrapping
@@ -179,6 +189,30 @@ endfunction
function! CountJump#CountSearch( count, searchArguments )
return CountJump#CountSearchWithWrapMessage(a:count, '', a:searchArguments)
endfunction
+silent! call ingo#motion#helper#DoesNotExist() " Execute a function to force autoload.
+if exists('*ingo#motion#helper#AdditionalMovement')
+function! s:AdditionalMovement( isSpecialLastLineTreatment )
+ return ingo#motion#helper#AdditionalMovement(a:isSpecialLastLineTreatment)
+endfunction
+else
+function! s:AdditionalMovement( isSpecialLastLineTreatment )
+ let l:save_ww = &whichwrap
+ set whichwrap+=l
+ if a:isSpecialLastLineTreatment && line('.') == line('$') && &virtualedit !=# 'onemore' && &virtualedit !=# 'all'
+ " For the last line in the buffer, that still doesn't work in
+ " operator-pending mode, unless we can do virtual editing.
+ let l:save_ve = &virtualedit
+ set virtualedit=onemore
+ normal! l
+ augroup IngoLibraryTempVirtualEdit
+ execute 'autocmd! CursorMoved * set virtualedit=' . l:save_ve . ' | autocmd! IngoLibraryTempVirtualEdit'
+ augroup END
+ else
+ normal! l
+ endif
+ let &whichwrap = l:save_ww
+endfunction
+endif
function! CountJump#CountJumpWithWrapMessage( mode, searchName, ... )
"*******************************************************************************
"* PURPOSE:
@@ -206,12 +240,13 @@ function! CountJump#CountJumpWithWrapMessage( mode, searchName, ... )
" None.
"*******************************************************************************
let l:save_view = winsaveview()
+ let l:count = v:count1
if a:mode ==? 'v'
normal! gv
endif
- let l:matchPosition = CountJump#CountSearchWithWrapMessage(v:count1, a:searchName, a:000)
+ let l:matchPosition = CountJump#CountSearchWithWrapMessage(l:count, a:searchName, a:000)
if l:matchPosition != [0, 0]
" Add the original cursor position to the jump list.
call winrestview(l:save_view)
@@ -220,37 +255,12 @@ function! CountJump#CountJumpWithWrapMessage( mode, searchName, ... )
if a:mode ==# 'V' && &selection ==# 'exclusive' || a:mode ==# 'O'
" Special additional treatment for end patterns to end.
- " The difference between normal mode, operator-pending and visual
- " mode with 'selection' set to "exclusive" is that in the latter
- " two, the motion must go _past_ the final "word" character, so that
- " all characters of the "word" are selected. This is done by
- " appending a 'l' motion after the search for the next "word".
- "
- " The 'l' motion only works properly at the end of the line (i.e.
- " when the moved-over "word" is at the end of the line) when the 'l'
- " motion is allowed to move over to the next line. Thus, the 'l'
- " motion is added temporarily to the global 'whichwrap' setting.
- " Without this, the motion would leave out the last character in the
- " line.
- let l:save_ww = &whichwrap
- set whichwrap+=l
- if a:mode ==# 'O' && line('.') == line('$') && &virtualedit !=# 'onemore' && &virtualedit !=# 'all'
- " For the last line in the buffer, that still doesn't work in
- " operator-pending mode, unless we can do virtual editing.
- let l:save_ve = &virtualedit
- set virtualedit=onemore
- normal! l
- augroup TempVirtualEdit
- execute 'autocmd! CursorMoved * set virtualedit=' . l:save_ve . ' | autocmd! TempVirtualEdit'
- augroup END
- else
- normal! l
- endif
- let &whichwrap = l:save_ww
+ call s:AdditionalMovement(a:mode ==# 'O')
endif
endif
endfunction
function! CountJump#CountJump( mode, ... )
+ " See CountJump#CountJumpWithWrapMessage().
return call('CountJump#CountJumpWithWrapMessage', [a:mode, ''] + a:000)
endfunction
function! CountJump#JumpFunc( mode, JumpFunc, ... )
@@ -286,12 +296,13 @@ function! CountJump#JumpFunc( mode, JumpFunc, ... )
"*******************************************************************************
let l:save_view = winsaveview()
let l:originalPosition = getpos('.')
+ let l:count = v:count1
if a:mode ==? 'v'
normal! gv
endif
- call call(a:JumpFunc, [v:count1] + a:000)
+ call call(a:JumpFunc, [l:count] + a:000)
let l:matchPosition = getpos('.')
if l:matchPosition != l:originalPosition
" Add the original cursor position to the jump list.
@@ -411,6 +422,7 @@ function! CountJump#CountJumpFuncWithWrapMessage( count, searchName, isBackward,
return l:matchPosition
endfunction
function! CountJump#CountJumpFunc( count, SingleJumpFunc, ... )
+ " See CountJump#CountJumpFuncWithWrapMessage().
return call('CountJump#CountJumpFuncWithWrapMessage', [a:count, '', 0, a:SingleJumpFunc] + a:000)
endfunction
View
6 autoload/CountJump/Mappings.vim
@@ -2,12 +2,14 @@
"
" DEPENDENCIES:
"
-" Copyright: (C) 2012 Ingo Karkat
+" Copyright: (C) 2012-2013 Ingo Karkat
" The VIM LICENSE applies to this script; see ':help copyright'.
"
" Maintainer: Ingo Karkat <ingo@karkat.de>
"
" REVISION DATE REMARKS
+" 1.83.002 14-Jun-2013 Minor: Make substitute() robust against
+" 'ignorecase'.
" 1.60.001 27-Mar-2012 file creation
let s:save_cpo = &cpo
set cpo&vim
@@ -28,7 +30,7 @@ function! CountJump#Mappings#EscapeForFunctionName( text )
let l:text = a:text
" Strip off a <Plug> prefix.
- let l:text = substitute(l:text, '^<Plug>', '', '')
+ let l:text = substitute(l:text, '^\C<Plug>', '', '')
" Convert all non-alphabetical characters to their hex value to create a
" valid function name.
View
11 autoload/CountJump/Motion.vim
@@ -3,12 +3,17 @@
" DEPENDENCIES:
" - CountJump.vim, CountJump/Mappings.vim autoload scripts.
"
-" Copyright: (C) 2009-2012 Ingo Karkat
+" Copyright: (C) 2009-2014 Ingo Karkat
" The VIM LICENSE applies to this script; see ':help copyright'.
"
" Maintainer: Ingo Karkat <ingo@karkat.de>
"
" REVISION DATE REMARKS
+" 1.83.010 02-Jan-2014 Use more canonical way of invoking the Funcrefs
+" in
+" CountJump#Motion#MakeBracketMotionWithJumpFunctions();
+" this will then also work with passed String
+" function names.
" 1.81.009 16-Oct-2012 ENH: Add optional a:searchName argument to
" CountJump#Motion#MakeBracketMotion() to make
" searches wrap around when 'wrapscan' is set.
@@ -241,7 +246,7 @@ function! CountJump#Motion#MakeBracketMotionWithJumpFunctions( mapArgs, keyAfter
" Uppercase letters indicate special additional treatment for end
" jump to end.
" All Funcrefs should position the cursor to the appropriate position in the
-" current window.
+" current window. See also CountJump#CountJumpFuncWithWrapMessage().
" If no jump function is passed, the corresponding mappings are omitted.
" a:isEndJumpToEnd Flag that specifies whether a jump to the end of a block
@@ -283,7 +288,7 @@ function! CountJump#Motion#MakeBracketMotionWithJumpFunctions( mapArgs, keyAfter
for l:mode in l:mapModes
for l:data in l:dataset
execute escape(
- \ printf("%snoremap <silent> %s %s :<C-U>call %s(%s)<CR>",
+ \ printf("%snoremap <silent> %s %s :<C-u>call call(%s, [%s])<CR>",
\ (l:mode ==# 'v' ? 'x' : l:mode),
\ a:mapArgs,
\ l:data[1],
View
58 autoload/CountJump/Region/TextObject.vim
@@ -1,82 +1,84 @@
-" CountJump/Region/TextObject.vim: Create custom text objects via jumps over matching lines.
+" CountJump/Region/TextObject.vim: Create custom text objects via jumps over matching lines.
"
" DEPENDENCIES:
" - CountJump/Mappings.vim, CountJump/Region.vim, CountJump/TextObjects.vim autoload scripts
"
-" Copyright: (C) 2010-2012 Ingo Karkat
-" The VIM LICENSE applies to this script; see ':help copyright'.
+" Copyright: (C) 2010-2013 Ingo Karkat
+" The VIM LICENSE applies to this script; see ':help copyright'.
"
" Maintainer: Ingo Karkat <ingo@karkat.de>
"
-" REVISION DATE REMARKS
+" REVISION DATE REMARKS
+" 1.83.004 14-Jun-2013 Minor: Make substitute() robust against
+" 'ignorecase'.
" 1.60.003 27-Mar-2012 ENH: When keys start with <Plug>, insert Inner /
" Outer instead of prepending i / a.
" 1.50.002 30-Aug-2011 Also support a match()-like Funcref instead of a
-" pattern to define the range.
+" pattern to define the range.
" 1.40.001 20-Dec-2010 file creation
function! s:EscapeForFunctionName( text )
" Convert all non-alphabetical characters to their hex value to create a
- " valid function name.
+ " valid function name.
return substitute(a:text, '\A', '\=char2nr(submatch(0))', 'g')
endfunction
function! s:function(name)
- return function(substitute(a:name, '^s:', matchstr(expand('<sfile>'), '<SNR>\d\+_\zefunction$'),''))
-endfunction
+ return function(substitute(a:name, '^\Cs:', matchstr(expand('<sfile>'), '<SNR>\d\+_\zefunction$'),''))
+endfunction
function! CountJump#Region#TextObject#Make( mapArgs, textObjectKey, types, selectionMode, Expr, isMatch )
"*******************************************************************************
-"* PURPOSE:
+"* PURPOSE:
" Define a complete set of mappings for inner and/or outer text objects that
" support an optional [count] and select regions of lines which are defined by
-" contiguous lines that (don't) match a:pattern.
+" contiguous lines that (don't) match a:pattern.
" The inner text object comprises all lines of the region itself, while the
" outer text object also includes all adjacent lines above and below which do
-" not themselves belong to a region.
+" not themselves belong to a region.
"
"* ASSUMPTIONS / PRECONDITIONS:
-" None.
+" None.
"
"* EFFECTS / POSTCONDITIONS:
" Creates mappings for operator-pending and visual mode which act upon /
-" select the text delimited by the begin and end patterns.
-" If there are no <count> regions, a beep is emitted.
+" select the text delimited by the begin and end patterns.
+" If there are no <count> regions, a beep is emitted.
"
"* INPUTS:
" a:mapArgs Arguments to the :map command, like '<buffer>' for a
-" buffer-local mapping.
+" buffer-local mapping.
" a:textObjectKey Mapping key [sequence] after the mandatory i/a which
-" start the mapping for the text object.
+" start the mapping for the text object.
" When this starts with <Plug>, the key sequence is taken
" as a template and a %s is replaced with "Inner" /
" "Outer" instead of prepending i / a. Through this,
" plugins can define configurable text objects that not
" necessarily start with i / a.
" a:types String containing 'i' for inner and 'a' for outer text
-" objects.
+" objects.
" a:selectionMode Type of selection used between the patterns:
" 'v' for characterwise, 'V' for linewise, '<CTRL-V>' for
" blockwise. Since regions are defined over full lines,
-" this should typically be 'V'.
+" this should typically be 'V'.
" a:Expr Regular expression that defines the region, i.e. must (not)
-" match in all lines belonging to it.
+" match in all lines belonging to it.
" Or Funcref to a function that takes a line number and returns
-" the matching byte offset (or -1), just like |match()|.
-" a:isMatch Flag whether to search matching (vs. non-matching) lines.
+" the matching byte offset (or -1), just like |match()|.
+" a:isMatch Flag whether to search matching (vs. non-matching) lines.
"
-"* RETURN VALUES:
-" None.
+"* RETURN VALUES:
+" None.
"*******************************************************************************
let l:scope = (a:mapArgs =~# '<buffer>' ? 'b:' : 's:')
if a:types !~# '^[ai]\+$'
- throw "ASSERT: Type must consist of 'a' and/or 'i', but is: '" . a:types . "'"
+ throw "ASSERT: Type must consist of 'a' and/or 'i', but is: '" . a:types . "'"
endif
" If only either an inner or outer text object is defined, the generated
" function must include the type, so that it is possible to separately
" define a text object of the other type (via a second invocation of this
" function). If the same region definition is used for both inner and outer
- " text objects, no such distinction need to be made.
+ " text objects, no such distinction need to be made.
let l:typePrefix = (strlen(a:types) == 1 ? a:types : '')
let l:functionName = CountJump#Mappings#EscapeForFunctionName(CountJump#Mappings#MakeTextObjectKey(l:typePrefix, a:textObjectKey))
@@ -106,7 +108,7 @@ function! CountJump#Region#TextObject#Make( mapArgs, textObjectKey, types, selec
" function-to-begin is executed first, and set the original cursor line
" there, then start the function-to-end at that position. Since this may
" also slightly speed up the search for the inner text object, we use it
- " unconditionally.
+ " unconditionally.
execute printf(l:regionFunction,
\ l:functionToBeginName,
\ 'let s:originalLineNum = line(".")',
@@ -125,8 +127,8 @@ function! CountJump#Region#TextObject#Make( mapArgs, textObjectKey, types, selec
\)
" For regions, the inner text object must include the text object's
- " boundaries = lines.
- let l:types = substitute(a:types, 'i', 'I', 'g')
+ " boundaries = lines.
+ let l:types = substitute(a:types, '\Ci', 'I', 'g')
return CountJump#TextObject#MakeWithJumpFunctions(a:mapArgs, a:textObjectKey, l:types, a:selectionMode, s:function(l:functionToBeginName), s:function(l:functionToEndName))
endfunction
View
51 autoload/CountJump/TextObject.vim
@@ -3,12 +3,22 @@
" DEPENDENCIES:
" - CountJump.vim, CountJump/Mappings.vim autoload scripts
"
-" Copyright: (C) 2009-2012 Ingo Karkat
+" Copyright: (C) 2009-2013 Ingo Karkat
" The VIM LICENSE applies to this script; see ':help copyright'.
"
" Maintainer: Ingo Karkat <ingo@karkat.de>
"
" REVISION DATE REMARKS
+" 1.83.015 14-Jun-2013 Minor: Make substitute() robust against
+" 'ignorecase'.
+" 1.82.014 30-Oct-2012 FIX: In text objects, when the end position is
+" before the begin position, that's not a valid
+" selection. Test for this and abort in that case.
+" For linewise selections, always position the
+" cursor at the start of the end line to be
+" consistent with the built-in text objects, and
+" to avoid complicating the search patterns when
+" attempting to do this through them.
" 1.71.013 14-Sep-2012 FIX: In
" CountJump#TextObject#TextObjectWithJumpFunctions(),
" do not beep when there's no end position. In
@@ -152,7 +162,7 @@ function! CountJump#TextObject#TextObjectWithJumpFunctions( mode, isInner, isExc
if l:beginPosition != [0, 0]
if a:isExcludeBoundaries
if l:isLinewise
- silent! normal! j
+ silent! normal! j0
else
silent! normal! l
endif
@@ -189,11 +199,9 @@ function! CountJump#TextObject#TextObjectWithJumpFunctions( mode, isInner, isExc
call winrestview(l:save_view)
else
- let l:isSelected = 1
-
if l:isLinewise
if a:isExcludeBoundaries
- silent! normal! k
+ silent! normal! k0
endif
else
if ! l:isExclusive && a:isExcludeBoundaries
@@ -204,13 +212,32 @@ function! CountJump#TextObject#TextObjectWithJumpFunctions( mode, isInner, isExc
endif
let l:endPosition = getpos('.')
-
- " Now that we know that both begin and end positions exist,
- " create the visual selection using the corrected positions.
- call setpos('.', l:beginPosition)
- execute 'normal!' a:selectionMode
- call setpos('.', l:endPosition)
"****D echomsg '**** text object from' string(l:beginPosition) 'to' string(l:endPosition)
+ " When the end position is before the begin position, that's not
+ " a valid selection.
+ if l:endPosition[1] < l:beginPosition[1] ||
+ \ l:endPosition[1] == l:beginPosition[1] && l:endPosition[2] < l:beginPosition[2]
+ execute "normal! \<C-\>\<C-n>\<Esc>"
+
+ call winrestview(l:save_view)
+ else
+ " Now that we know that both begin and end positions exist,
+ " create the visual selection using the corrected positions.
+ let l:isSelected = 1
+
+ if l:isLinewise
+ " For linewise selections, always position the cursor at
+ " the start of the end line. This is consistent with the
+ " built-in text objects (e.g. |ap|), and avoids that the
+ " window is horizontally scrolled to the right.
+ let l:beginPosition[2] = 1
+ let l:endPosition[2] = 1
+ endif
+
+ call setpos('.', l:beginPosition)
+ execute 'normal!' a:selectionMode
+ call setpos('.', l:endPosition)
+ endif
endif
endif
@@ -313,7 +340,7 @@ function! CountJump#TextObject#MakeWithJumpFunctions( mapArgs, textObjectKey, ty
endfunction
function! s:function(name)
- return function(substitute(a:name, '^s:', matchstr(expand('<sfile>'), '<SNR>\d\+_\zefunction$'),''))
+ return function(substitute(a:name, '^\Cs:', matchstr(expand('<sfile>'), '<SNR>\d\+_\zefunction$'),''))
endfunction
function! CountJump#TextObject#MakeWithCountSearch( mapArgs, textObjectKey, types, selectionMode, patternToBegin, patternToEnd )
"*******************************************************************************
View
34 doc/CountJump.txt
@@ -43,8 +43,10 @@ diff_movement (vimscript #3180): Movement over diff hunks with ]] etc.
fortunes_movement (vimscript #3181): Movement over email fortunes with ]] etc.
help_movement (vimscript #3179): Movement over Vim help sections with ]] etc.
mail_movement (vimscript #3182): Movement over email quotes with ]] etc.
-JumpToTrailingWhitespace (vimscript #3968): Motions to locate unwanted
- whitespace at the end of lines.
+diffwindow_movement: Movement over changes in a diff window.
+ (vimscript #3719)
+JumpToTrailingWhitespace: Motions to locate unwanted whitespace at the end of lines.
+ (vimscript #3968)
TaskMotion (vimscript #3990): Motions to task and TODO markers.
ConflictMotions (vimscript #3991): Motions to and inside SCM conflict markers.
vim_movement (vimscript #4002): Movement over Vim functions with ]m etc.
@@ -52,6 +54,10 @@ vbs_movement (vimscript #4003): Movement over VBScript classes /
functions / properties / subs with ]m etc.
dosbatch_movement (vimscript #4004): Movement over MSDOS batch file functions
/ labels with ]m etc.
+SameSyntaxMotion (vimscript #4338): Motions to the borders of the same syntax highlighting.
+JumpToVerticalOccurrence: Like f{char}, but searching the same
+ (vimscript #4841) screen column, not line.
+ErrorMotion (vimscript #0000): Motions to text highlighted as error.
RELATED WORKS *
@@ -59,6 +65,9 @@ RELATED WORKS *
mappings, but no text objects (yet).
- textobj-user (vimscript #2100) has support for user-defined text objects via
regular expressions.
+- movealong.vim (vimscript #4691) provides a :Movealong command (and optional
+ mappings) that repeatedly executes a motion until a condition of a syntax,
+ pattern match, or arbitrary expression is met.
==============================================================================
USAGE *CountJump-usage*
@@ -185,6 +194,8 @@ To uninstall, use the |:RmVimball| command.
DEPENDENCIES *CountJump-dependencies*
- Requires Vim 7.0 or higher.
+- |ingo-library.vim| plugin (vimscript #4433), version 1.016 or higher
+ (optional).
==============================================================================
INTEGRATION *CountJump-integration*
@@ -243,6 +254,21 @@ IDEAS *CountJump-ideas*
==============================================================================
HISTORY *CountJump-history*
+1.83 23-Jan-2014
+- Use more canonical way of invoking the Funcrefs in
+ CountJump#Motion#MakeBracketMotionWithJumpFunctions(); this will then also
+ work with passed String function names.
+- FIX: Need to save v:count1 before issuing the normal mode "gv" command.
+- Minor: Make substitute() robust against 'ignorecase'.
+- Add optional dependency to ingo-library (vimscript #4433).
+
+1.82 30-Oct-2012 (unreleased)
+- FIX: In text objects, when the end position is before the begin position,
+ that's not a valid selection. Test for this and abort in that case.
+- For linewise selections, always position the cursor at the start of the end
+ line to be consistent with the built-in text objects, and to avoid
+ complicating the search patterns when attempting to do this through them.
+
1.81 16-Oct-2012
- ENH: Add optional a:searchName argument to
CountJump#Motion#MakeBracketMotion() to make searches wrap around when
@@ -371,8 +397,8 @@ First published version.
Started development.
==============================================================================
-Copyright: (C) 2009-2012 Ingo Karkat
-The VIM LICENSE applies to this script; see |copyright|.
+Copyright: (C) 2009-2014 Ingo Karkat
+The VIM LICENSE applies to this plugin; see |copyright|.
Maintainer: Ingo Karkat <ingo@karkat.de>
==============================================================================
Please sign in to comment.
Something went wrong with that request. Please try again.