diff -cr ../vim-7.2.065/runtime/doc/eval.txt ./runtime/doc/eval.txt
*** ../vim-7.2.065/runtime/doc/eval.txt	Thu Dec  4 12:49:13 2008
--- ./runtime/doc/eval.txt	Sat Dec  6 02:27:25 2008
***************
*** 1469,1474 ****
--- 1469,1490 ----
  		'guitabtooltip'.  Only valid while one of these expressions is
  		being evaluated.  Read-only when in the |sandbox|.
  
+ 				      *v:motion_force* *motion_force-variable*
+ v:motion_force	The information about forcing the type of a motion for the
+ 		current or the last executed operator, such as |o_v| and
+ 		others.  Read-only.  The value is a string which can be one of
+ 		the following values:
+ 
+ 			value		meaning ~
+ 			v		|o_v| is given
+ 			V		|o_V| is given
+ 			<C-v>		|o_CTRL-V| is given
+ 			(null string)	motion type is not forced
+ 
+ 		This variable is useful to implement new motions and new text
+ 		objects which behave the same as built-in motions and text
+ 		objects.
+ 
  					*v:mouse_win* *mouse_win-variable*
  v:mouse_win	Window number for a mouse click obtained with |getchar()|.
  		First window has number 1, like with |winnr()|.  The value is
diff -cr ../vim-7.2.065/src/eval.c ./src/eval.c
*** ../vim-7.2.065/src/eval.c	Thu Dec  4 12:49:13 2008
--- ./src/eval.c	Sat Dec  6 02:10:39 2008
***************
*** 349,354 ****
--- 349,355 ----
      {VV_NAME("operator",	 VAR_STRING), VV_RO},
      {VV_NAME("searchforward",	 VAR_NUMBER), 0},
      {VV_NAME("oldfiles",	 VAR_LIST), 0},
+     {VV_NAME("motion_force",	 VAR_STRING), VV_RO},
  };
  
  /* shorthand */
diff -cr ../vim-7.2.065/src/normal.c ./src/normal.c
*** ../vim-7.2.065/src/normal.c	Thu Dec  4 12:49:13 2008
--- ./src/normal.c	Sat Dec  6 02:10:39 2008
***************
*** 143,148 ****
--- 143,149 ----
  static void	nv_operator __ARGS((cmdarg_T *cap));
  #ifdef FEAT_EVAL
  static void	set_op_var __ARGS((int optype));
+ static void	set_wise_var __ARGS((int wisetype));
  #endif
  static void	nv_lineop __ARGS((cmdarg_T *cap));
  static void	nv_home __ARGS((cmdarg_T *cap));
***************
*** 7432,7437 ****
--- 7433,7441 ----
      {
  	cap->oap->motion_force = cap->cmdchar;
  	finish_op = FALSE;	/* operator doesn't finish now but later */
+ #ifdef FEAT_EVAL
+ 	set_wise_var(cap->cmdchar);
+ #endif
  	return;
      }
  
***************
*** 8314,8319 ****
--- 8318,8324 ----
  	cap->oap->op_type = op_type;
  #ifdef FEAT_EVAL
  	set_op_var(op_type);
+ 	set_wise_var(NUL);
  #endif
      }
  }
***************
*** 8338,8343 ****
--- 8343,8367 ----
  	set_vim_var_string(VV_OP, opchars, -1);
      }
  }
+ 
+ /*
+  * Set v:motion_force to the characters for "wisetype".
+  */
+     static void
+ set_wise_var(wisetype)
+     int wisetype;
+ {
+     char_u	wisechars[2];
+ 
+     if (wisetype == NUL)
+ 	set_vim_var_string(VV_MOTION_FORCE, NULL, 0);
+     else
+     {
+ 	wisechars[0] = wisetype;
+ 	wisechars[1] = NUL;
+ 	set_vim_var_string(VV_MOTION_FORCE, wisechars, -1);
+     }
+ }
  #endif
  
  /*
diff -cr ../vim-7.2.065/src/vim.h ./src/vim.h
*** ../vim-7.2.065/src/vim.h	Thu Dec  4 12:49:13 2008
--- ./src/vim.h	Sat Dec  6 02:10:39 2008
***************
*** 1735,1741 ****
  #define VV_OP		52
  #define VV_SEARCHFORWARD 53
  #define VV_OLDFILES	54
! #define VV_LEN		55	/* number of v: vars */
  
  #ifdef FEAT_CLIPBOARD
  
--- 1735,1742 ----
  #define VV_OP		52
  #define VV_SEARCHFORWARD 53
  #define VV_OLDFILES	54
! #define VV_MOTION_FORCE	55
! #define VV_LEN		56	/* number of v: vars */
  
  #ifdef FEAT_CLIPBOARD
  
