mirror of
https://github.com/vim/vim.git
synced 2025-07-25 10:54:51 -04:00
patch 8.2.2612: col('.') may get outdated column value
Problem: col('.') may get outdated column value. Solution: Add a note to the help how to make this work and add a test for it. (closes #7971)
This commit is contained in:
parent
f8c52e8d08
commit
18b7d86d7f
@ -263,6 +263,20 @@ input. Example: >
|
|||||||
endfunc
|
endfunc
|
||||||
nnoremap <expr> <F3> <Sid>OpenPopup()
|
nnoremap <expr> <F3> <Sid>OpenPopup()
|
||||||
|
|
||||||
|
Also, keep in mind that the expression may be evaluated when looking for
|
||||||
|
typeahead, before the previous command has been executed. For example: >
|
||||||
|
func StoreColumn()
|
||||||
|
let g:column = col('.')
|
||||||
|
return 'x'
|
||||||
|
endfunc
|
||||||
|
nnoremap <expr> x StoreColumn()
|
||||||
|
nmap ! f!x
|
||||||
|
You will notice that g:column has the value from before executing "fx",
|
||||||
|
because "z" is evaluated before "fx" is executed.
|
||||||
|
This can be solved by inserting <Ignore> before the character that is
|
||||||
|
expression-mapped: >
|
||||||
|
nmap ! f!<Ignore>x
|
||||||
|
|
||||||
Be very careful about side effects! The expression is evaluated while
|
Be very careful about side effects! The expression is evaluated while
|
||||||
obtaining characters, you may very well make the command dysfunctional.
|
obtaining characters, you may very well make the command dysfunctional.
|
||||||
For this reason the following is blocked:
|
For this reason the following is blocked:
|
||||||
|
@ -485,6 +485,30 @@ func Test_list_mappings()
|
|||||||
nmapclear
|
nmapclear
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_expr_map_gets_cursor()
|
||||||
|
new
|
||||||
|
call setline(1, ['one', 'some w!rd'])
|
||||||
|
func StoreColumn()
|
||||||
|
let g:exprLine = line('.')
|
||||||
|
let g:exprCol = col('.')
|
||||||
|
return 'x'
|
||||||
|
endfunc
|
||||||
|
nnoremap <expr> x StoreColumn()
|
||||||
|
2
|
||||||
|
nmap ! f!<Ignore>x
|
||||||
|
call feedkeys("!", 'xt')
|
||||||
|
call assert_equal('some wrd', getline(2))
|
||||||
|
call assert_equal(2, g:exprLine)
|
||||||
|
call assert_equal(7, g:exprCol)
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
unlet g:exprLine
|
||||||
|
unlet g:exprCol
|
||||||
|
delfunc ExprMapped
|
||||||
|
nunmap x
|
||||||
|
nunmap !
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_expr_map_restore_cursor()
|
func Test_expr_map_restore_cursor()
|
||||||
CheckScreendump
|
CheckScreendump
|
||||||
|
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2612,
|
||||||
/**/
|
/**/
|
||||||
2611,
|
2611,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user