--- ../vim-7.2.416/src/ops.c	2010-03-25 03:40:14.000000000 +0100
+++ src/ops.c	2010-04-14 23:45:33.000000000 +0200
@@ -5081,7 +5081,7 @@
     int		subtract;
 
     dohex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL);	/* "heX" */
-    dooct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL);	/* "Octal" */
+    dooct = p_klz ? 0 : (vim_strchr(curbuf->b_p_nf, 'o') != NULL);	/* "Octal" */
     doalp = (vim_strchr(curbuf->b_p_nf, 'p') != NULL);	/* "alPha" */
 
     ptr = ml_get_curline();
@@ -5288,7 +5288,7 @@
 	/*
 	 * Put the number characters in buf2[].
 	 */
-	if (hex == 0)
+	if ((p_klz && hex == '0') || hex == 0)
 	    sprintf((char *)buf2, "%lu", n);
 	else if (hex == '0')
 	    sprintf((char *)buf2, "%lo", n);
@@ -5304,7 +5304,7 @@
 	 * Don't do this when
 	 * the result may look like an octal number.
 	 */
-	if (firstdigit == '0' && !(dooct && hex == 0))
+	if (p_klz || (firstdigit == '0' &&!(dooct && hex == 0)))
 	    while (length-- > 0)
 		*ptr++ = '0';
 	*ptr = NUL;
--- ../vim-7.2.416/src/option.c	2010-03-25 03:40:14.000000000 +0100
+++ src/option.c	2010-04-14 23:46:49.000000000 +0200
@@ -1522,6 +1522,9 @@
     {"joinspaces",  "js",   P_BOOL|P_VI_DEF|P_VIM,
 			    (char_u *)&p_js, PV_NONE,
 			    {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT},
+    {"keepleadingzeros",   "klz",  P_BOOL|P_VI_DEF|P_VIM,
+			    (char_u *)&p_klz, PV_NONE,
+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
     {"key",	    NULL,   P_STRING|P_ALLOCED|P_VI_DEF|P_NO_MKRC,
 #ifdef FEAT_CRYPT
 			    (char_u *)&p_key, PV_KEY,
--- ../vim-7.2.416/src/option.h	2010-03-25 03:40:14.000000000 +0100
+++ src/option.h	2010-04-14 23:44:16.000000000 +0200
@@ -561,6 +561,7 @@
 #ifdef FEAT_VISUAL
 EXTERN char_u	*p_km;		/* 'keymodel' */
 #endif
+EXTERN int p_klz;		/* keepleadingzeros */
 #ifdef FEAT_LANGMAP
 EXTERN char_u	*p_langmap;	/* 'langmap'*/
 #endif
--- ../vim-7.2.416/runtime/doc/options.txt	2010-03-25 03:40:13.000000000 +0100
+++ runtime/doc/options.txt	2010-04-15 01:18:57.000000000 +0200
@@ -4111,6 +4111,17 @@
 	Otherwise only one space is inserted.
 	NOTE: This option is reset when 'compatible' is set.
 
+			*'keepleadingzeros'* *'klz'* *'nokeepleadingzeros'* *'noklz'*
+'keepleadingzeros' 'klz'	boolean	(default off)
+			global
+			{not in Vi}
+	When set, CTRL-A and CTRL-X keep the number of digits. This option disables
+	the octal increment/decrement. So doing CTRL-A on 007 yields 008.  If not set 007
+	becomes 010. When set CTRL-X on 10 yields 09, when not set 10 becomes 9.
+	NOTE: This option is reset when 'compatible' is set.
+
+
+
 							*'key'*
 'key'			string	(default "")
 			local to buffer
