diff runtime/doc/map.txt @ 24142:34acfef7f60c v8.2.2612

patch 8.2.2612: col('.') may get outdated column value Commit: https://github.com/vim/vim/commit/18b7d86d7fa997bbb02a069dafacb32a0f73ca1e Author: Bram Moolenaar <Bram@vim.org> Date: Wed Mar 17 13:28:05 2021 +0100 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)
author Bram Moolenaar <Bram@vim.org>
date Wed, 17 Mar 2021 13:30:03 +0100
parents 99ef85ff1af4
children 4ab4ef0c48b1
line wrap: on
line diff
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -263,6 +263,20 @@ input. Example: >
 	endfunc
 	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
 obtaining characters, you may very well make the command dysfunctional.
 For this reason the following is blocked: