diff --git a/src/globals.h b/src/globals.h
index 8b10de2..2d64686 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -17,7 +17,7 @@
  * They may have different values when the screen wasn't (re)allocated yet
  * after setting Rows or Columns (e.g., when starting up).
  */
-EXTERN long	Rows			/* nr of rows in the screen */
+EXTERN long	Rows			// nr of rows in the screen
 #ifdef DO_INIT
 # if defined(MSWIN)
 			    = 25L
@@ -26,7 +26,7 @@
 # endif
 #endif
 			    ;
-EXTERN long	Columns INIT(= 80);	/* nr of columns in the screen */
+EXTERN long	Columns INIT(= 80);	// nr of columns in the screen
 
 /*
  * The characters that are currently on the screen are kept in ScreenLines[].
@@ -42,7 +42,7 @@
 EXTERN schar_T	*ScreenLines INIT(= NULL);
 EXTERN sattr_T	*ScreenAttrs INIT(= NULL);
 EXTERN unsigned	*LineOffset INIT(= NULL);
-EXTERN char_u	*LineWraps INIT(= NULL);	/* line wraps to next line */
+EXTERN char_u	*LineWraps INIT(= NULL);	// line wraps to next line
 
 /*
  * When using Unicode characters (in UTF-8 encoding) the character in
@@ -52,13 +52,13 @@
  * ScreenLinesC[0][off] is only to be used when ScreenLinesUC[off] != 0.
  * Note: These three are only allocated when enc_utf8 is set!
  */
-EXTERN u8char_T	*ScreenLinesUC INIT(= NULL);	/* decoded UTF-8 characters */
-EXTERN u8char_T	*ScreenLinesC[MAX_MCO];		/* composing characters */
-EXTERN int	Screen_mco INIT(= 0);		/* value of p_mco used when
-						   allocating ScreenLinesC[] */
+EXTERN u8char_T	*ScreenLinesUC INIT(= NULL);	// decoded UTF-8 characters
+EXTERN u8char_T	*ScreenLinesC[MAX_MCO];		// composing characters
+EXTERN int	Screen_mco INIT(= 0);		// value of p_mco used when
+						// allocating ScreenLinesC[]
 
-/* Only used for euc-jp: Second byte of a character that starts with 0x8e.
- * These are single-width. */
+// Only used for euc-jp: Second byte of a character that starts with 0x8e.
+// These are single-width.
 EXTERN schar_T	*ScreenLines2 INIT(= NULL);
 
 /*
@@ -88,14 +88,14 @@
 EXTERN int	screen_zindex INIT(= 0);
 #endif
 
-EXTERN int	screen_Rows INIT(= 0);	    /* actual size of ScreenLines[] */
-EXTERN int	screen_Columns INIT(= 0);   /* actual size of ScreenLines[] */
+EXTERN int	screen_Rows INIT(= 0);	    // actual size of ScreenLines[]
+EXTERN int	screen_Columns INIT(= 0);   // actual size of ScreenLines[]
 
 /*
  * When vgetc() is called, it sets mod_mask to the set of modifiers that are
  * held down based on the MOD_MASK_* symbols that are read first.
  */
-EXTERN int	mod_mask INIT(= 0x0);		/* current key modifiers */
+EXTERN int	mod_mask INIT(= 0x0);		// current key modifiers
 
 /*
  * Cmdline_row is the row where the command line starts, just below the
@@ -117,9 +117,9 @@
 EXTERN int	cmdline_star INIT(= FALSE);	// cmdline is crypted
 #endif
 
-EXTERN int	exec_from_reg INIT(= FALSE);	/* executing register */
+EXTERN int	exec_from_reg INIT(= FALSE);	// executing register
 
-EXTERN int	screen_cleared INIT(= FALSE);	/* screen has been cleared */
+EXTERN int	screen_cleared INIT(= FALSE);	// screen has been cleared
 
 /*
  * When '$' is included in 'cpoptions' option set:
@@ -134,22 +134,22 @@
  * Variables for Insert mode completion.
  */
 
-/* Length in bytes of the text being completed (this is deleted to be replaced
- * by the match.) */
+// Length in bytes of the text being completed (this is deleted to be replaced
+// by the match.)
 EXTERN int	compl_length INIT(= 0);
 
-/* List of flags for method of completion. */
+// List of flags for method of completion.
 EXTERN int	compl_cont_status INIT(= 0);
-# define CONT_ADDING	1	/* "normal" or "adding" expansion */
-# define CONT_INTRPT	(2 + 4)	/* a ^X interrupted the current expansion */
-				/* it's set only iff N_ADDS is set */
-# define CONT_N_ADDS	4	/* next ^X<> will add-new or expand-current */
-# define CONT_S_IPOS	8	/* next ^X<> will set initial_pos?
-				 * if so, word-wise-expansion will set SOL */
-# define CONT_SOL	16	/* pattern includes start of line, just for
-				 * word-wise expansion, not set for ^X^L */
-# define CONT_LOCAL	32	/* for ctrl_x_mode 0, ^X^P/^X^N do a local
-				 * expansion, (eg use complete=.) */
+# define CONT_ADDING	1	// "normal" or "adding" expansion
+# define CONT_INTRPT	(2 + 4)	// a ^X interrupted the current expansion
+				// it's set only iff N_ADDS is set
+# define CONT_N_ADDS	4	// next ^X<> will add-new or expand-current
+# define CONT_S_IPOS	8	// next ^X<> will set initial_pos?
+				// if so, word-wise-expansion will set SOL
+# define CONT_SOL	16	// pattern includes start of line, just for
+				// word-wise expansion, not set for ^X^L
+# define CONT_LOCAL	32	// for ctrl_x_mode 0, ^X^P/^X^N do a local
+				// expansion, (eg use complete=.)
 #endif
 
 /*
@@ -157,101 +157,101 @@
  * while keeping ScreenLines[] updated.
  */
 #ifdef FEAT_RIGHTLEFT
-EXTERN int	cmdmsg_rl INIT(= FALSE);    /* cmdline is drawn right to left */
+EXTERN int	cmdmsg_rl INIT(= FALSE);    // cmdline is drawn right to left
 #endif
 EXTERN int	msg_col;
 EXTERN int	msg_row;
-EXTERN int	msg_scrolled;	/* Number of screen lines that windows have
-				 * scrolled because of printing messages. */
+EXTERN int	msg_scrolled;	// Number of screen lines that windows have
+				// scrolled because of printing messages.
 EXTERN int	msg_scrolled_ign INIT(= FALSE);
-				/* when TRUE don't set need_wait_return in
-				   msg_puts_attr() when msg_scrolled is
-				   non-zero */
+				// when TRUE don't set need_wait_return in
+				// msg_puts_attr() when msg_scrolled is
+				// non-zero
 
-EXTERN char_u	*keep_msg INIT(= NULL);	    /* msg to be shown after redraw */
-EXTERN int	keep_msg_attr INIT(= 0);    /* highlight attr for keep_msg */
-EXTERN int	keep_msg_more INIT(= FALSE); /* keep_msg was set by msgmore() */
-EXTERN int	need_fileinfo INIT(= FALSE);/* do fileinfo() after redraw */
-EXTERN int	msg_scroll INIT(= FALSE);   /* msg_start() will scroll */
-EXTERN int	msg_didout INIT(= FALSE);   /* msg_outstr() was used in line */
-EXTERN int	msg_didany INIT(= FALSE);   /* msg_outstr() was used at all */
-EXTERN int	msg_nowait INIT(= FALSE);   /* don't wait for this msg */
-EXTERN int	emsg_off INIT(= 0);	    /* don't display errors for now,
-					       unless 'debug' is set. */
-EXTERN int	info_message INIT(= FALSE); /* printing informative message */
-EXTERN int      msg_hist_off INIT(= FALSE); /* don't add messages to history */
+EXTERN char_u	*keep_msg INIT(= NULL);	    // msg to be shown after redraw
+EXTERN int	keep_msg_attr INIT(= 0);    // highlight attr for keep_msg
+EXTERN int	keep_msg_more INIT(= FALSE); // keep_msg was set by msgmore()
+EXTERN int	need_fileinfo INIT(= FALSE);// do fileinfo() after redraw
+EXTERN int	msg_scroll INIT(= FALSE);   // msg_start() will scroll
+EXTERN int	msg_didout INIT(= FALSE);   // msg_outstr() was used in line
+EXTERN int	msg_didany INIT(= FALSE);   // msg_outstr() was used at all
+EXTERN int	msg_nowait INIT(= FALSE);   // don't wait for this msg
+EXTERN int	emsg_off INIT(= 0);	    // don't display errors for now,
+					    // unless 'debug' is set.
+EXTERN int	info_message INIT(= FALSE); // printing informative message
+EXTERN int      msg_hist_off INIT(= FALSE); // don't add messages to history
 #ifdef FEAT_EVAL
-EXTERN int	need_clr_eos INIT(= FALSE); /* need to clear text before
-					       displaying a message. */
-EXTERN int	emsg_skip INIT(= 0);	    /* don't display errors for
-					       expression that is skipped */
-EXTERN int	emsg_severe INIT(= FALSE);   /* use message of next of several
-					       emsg() calls for throw */
-EXTERN int	did_endif INIT(= FALSE);    /* just had ":endif" */
-EXTERN dict_T	vimvardict;		    /* Dictionary with v: variables */
-EXTERN dict_T	globvardict;		    /* Dictionary with g: variables */
+EXTERN int	need_clr_eos INIT(= FALSE); // need to clear text before
+					    // displaying a message.
+EXTERN int	emsg_skip INIT(= 0);	    // don't display errors for
+					    // expression that is skipped
+EXTERN int	emsg_severe INIT(= FALSE);  // use message of next of several
+					    // emsg() calls for throw
+EXTERN int	did_endif INIT(= FALSE);    // just had ":endif"
+EXTERN dict_T	vimvardict;		    // Dictionary with v: variables
+EXTERN dict_T	globvardict;		    // Dictionary with g: variables
 #define globvarht globvardict.dv_hashtab
 #endif
-EXTERN int	did_emsg;		    /* set by emsg() when the message
-					       is displayed or thrown */
+EXTERN int	did_emsg;		    // set by emsg() when the message
+					    // is displayed or thrown
 #ifdef FEAT_EVAL
-EXTERN int	called_vim_beep;	    /* set if vim_beep() is called */
-EXTERN int	did_uncaught_emsg;	    /* emsg() was called and did not
-					       cause an exception */
+EXTERN int	called_vim_beep;	    // set if vim_beep() is called
+EXTERN int	did_uncaught_emsg;	    // emsg() was called and did not
+					    // cause an exception
 #endif
-EXTERN int	did_emsg_syntax;	    /* did_emsg set because of a
-					       syntax error */
-EXTERN int	called_emsg;		    /* always set by emsg() */
-EXTERN int	ex_exitval INIT(= 0);	    /* exit value for ex mode */
-EXTERN int	emsg_on_display INIT(= FALSE);	/* there is an error message */
-EXTERN int	rc_did_emsg INIT(= FALSE);  /* vim_regcomp() called emsg() */
+EXTERN int	did_emsg_syntax;	    // did_emsg set because of a
+					    // syntax error
+EXTERN int	called_emsg;		    // always set by emsg()
+EXTERN int	ex_exitval INIT(= 0);	    // exit value for ex mode
+EXTERN int	emsg_on_display INIT(= FALSE);	// there is an error message
+EXTERN int	rc_did_emsg INIT(= FALSE);  // vim_regcomp() called emsg()
 
-EXTERN int	no_wait_return INIT(= 0);   /* don't wait for return for now */
-EXTERN int	need_wait_return INIT(= 0); /* need to wait for return later */
-EXTERN int	did_wait_return INIT(= FALSE);	/* wait_return() was used and
-						   nothing written since then */
+EXTERN int	no_wait_return INIT(= 0);   // don't wait for return for now
+EXTERN int	need_wait_return INIT(= 0); // need to wait for return later
+EXTERN int	did_wait_return INIT(= FALSE);	// wait_return() was used and
+						// nothing written since then
 #ifdef FEAT_TITLE
-EXTERN int	need_maketitle INIT(= TRUE); /* call maketitle() soon */
+EXTERN int	need_maketitle INIT(= TRUE); // call maketitle() soon
 #endif
 
-EXTERN int	quit_more INIT(= FALSE);    /* 'q' hit at "--more--" msg */
+EXTERN int	quit_more INIT(= FALSE);    // 'q' hit at "--more--" msg
 #if defined(UNIX) || defined(VMS) || defined(MACOS_X)
-EXTERN int	newline_on_exit INIT(= FALSE);	/* did msg in altern. screen */
-EXTERN int	intr_char INIT(= 0);	    /* extra interrupt character */
+EXTERN int	newline_on_exit INIT(= FALSE);	// did msg in altern. screen
+EXTERN int	intr_char INIT(= 0);	    // extra interrupt character
 #endif
 #if (defined(UNIX) || defined(VMS)) && defined(FEAT_X11)
-EXTERN int	x_no_connect INIT(= FALSE); /* don't connect to X server */
+EXTERN int	x_no_connect INIT(= FALSE); // don't connect to X server
 # if defined(FEAT_CLIENTSERVER)
-EXTERN int	x_force_connect INIT(= FALSE); /* Do connect to X server.
-						  Overrules x_no_connect and
-						  "exclude" in 'clipboard'. */
+EXTERN int	x_force_connect INIT(= FALSE);	// Do connect to X server.
+						// Overrules x_no_connect and
+						// "exclude" in 'clipboard'.
 # endif
 #endif
-EXTERN int	ex_keep_indent INIT(= FALSE); /* getexmodeline(): keep indent */
-EXTERN int	vgetc_busy INIT(= 0);	    /* when inside vgetc() then > 0 */
+EXTERN int	ex_keep_indent INIT(= FALSE); // getexmodeline(): keep indent
+EXTERN int	vgetc_busy INIT(= 0);	      // when inside vgetc() then > 0
 
-EXTERN int	didset_vim INIT(= FALSE);   /* did set $VIM ourselves */
-EXTERN int	didset_vimruntime INIT(= FALSE);   /* idem for $VIMRUNTIME */
+EXTERN int	didset_vim INIT(= FALSE);	    // did set $VIM ourselves
+EXTERN int	didset_vimruntime INIT(= FALSE);    // idem for $VIMRUNTIME
 
 /*
  * Lines left before a "more" message.	Ex mode needs to be able to reset this
  * after you type something.
  */
-EXTERN int	lines_left INIT(= -1);	    /* lines left for listing */
-EXTERN int	msg_no_more INIT(= FALSE);  /* don't use more prompt, truncate
-					       messages */
+EXTERN int	lines_left INIT(= -1);	    // lines left for listing
+EXTERN int	msg_no_more INIT(= FALSE);  // don't use more prompt, truncate
+					    // messages
 
-EXTERN char_u	*sourcing_name INIT( = NULL);/* name of error message source */
-EXTERN linenr_T	sourcing_lnum INIT(= 0);    /* line number of the source file */
+EXTERN char_u	*sourcing_name INIT( = NULL);// name of error message source
+EXTERN linenr_T	sourcing_lnum INIT(= 0);    // line number of the source file
 
 #ifdef FEAT_EVAL
-EXTERN int	ex_nesting_level INIT(= 0);	/* nesting level */
-EXTERN int	debug_break_level INIT(= -1);	/* break below this level */
-EXTERN int	debug_did_msg INIT(= FALSE);	/* did "debug mode" message */
-EXTERN int	debug_tick INIT(= 0);		/* breakpoint change count */
-EXTERN int	debug_backtrace_level INIT(= 0); /* breakpoint backtrace level */
+EXTERN int	ex_nesting_level INIT(= 0);	// nesting level
+EXTERN int	debug_break_level INIT(= -1);	// break below this level
+EXTERN int	debug_did_msg INIT(= FALSE);	// did "debug mode" message
+EXTERN int	debug_tick INIT(= 0);		// breakpoint change count
+EXTERN int	debug_backtrace_level INIT(= 0); // breakpoint backtrace level
 # ifdef FEAT_PROFILE
-EXTERN int	do_profiling INIT(= PROF_NONE);	/* PROF_ values */
+EXTERN int	do_profiling INIT(= PROF_NONE);	// PROF_ values
 # endif
 EXTERN garray_T script_items INIT(= {0 COMMA 0 COMMA sizeof(scriptitem_T) COMMA 4 COMMA NULL});
 #define SCRIPT_ITEM(id) (((scriptitem_T *)script_items.ga_data)[(id) - 1])
@@ -348,13 +348,13 @@
 
 EXTERN int	did_source_packages INIT(= FALSE);
 
-/* Magic number used for hashitem "hi_key" value indicating a deleted item.
- * Only the address is used. */
+// Magic number used for hashitem "hi_key" value indicating a deleted item.
+// Only the address is used.
 EXTERN char_u	hash_removed;
 
 
-EXTERN int	scroll_region INIT(= FALSE); /* term supports scroll region */
-EXTERN int	t_colors INIT(= 0);	    /* int value of T_CCO */
+EXTERN int	scroll_region INIT(= FALSE); // term supports scroll region
+EXTERN int	t_colors INIT(= 0);	    // int value of T_CCO
 
 #ifdef FEAT_CMDL_COMPL
 // Flags to indicate an additional string for highlight name completion.
@@ -377,25 +377,25 @@
 EXTERN linenr_T	search_last_line INIT(= MAXLNUM); // for :{first},{LAST}s/pat
 #endif
 
-EXTERN int	no_smartcase INIT(= FALSE);	/* don't use 'smartcase' once */
+EXTERN int	no_smartcase INIT(= FALSE);	// don't use 'smartcase' once
 
-EXTERN int	need_check_timestamps INIT(= FALSE); /* need to check file
-							timestamps asap */
-EXTERN int	did_check_timestamps INIT(= FALSE); /* did check timestamps
-						       recently */
-EXTERN int	no_check_timestamps INIT(= 0);	/* Don't check timestamps */
+EXTERN int	need_check_timestamps INIT(= FALSE); // need to check file
+						     // timestamps asap
+EXTERN int	did_check_timestamps INIT(= FALSE); // did check timestamps
+						    // recently
+EXTERN int	no_check_timestamps INIT(= 0);	// Don't check timestamps
 
-EXTERN int	highlight_attr[HLF_COUNT];  /* Highl. attr for each context. */
+EXTERN int	highlight_attr[HLF_COUNT];  // Highl. attr for each context.
 #ifdef FEAT_STL_OPT
 # define USER_HIGHLIGHT
 #endif
 #ifdef USER_HIGHLIGHT
-EXTERN int	highlight_user[9];		/* User[1-9] attributes */
+EXTERN int	highlight_user[9];		// User[1-9] attributes
 # ifdef FEAT_STL_OPT
-EXTERN int	highlight_stlnc[9];		/* On top of user */
+EXTERN int	highlight_stlnc[9];		// On top of user
 #  ifdef FEAT_TERMINAL
-EXTERN int	highlight_stlterm[9];		/* On top of user */
-EXTERN int	highlight_stltermnc[9];		/* On top of user */
+EXTERN int	highlight_stlterm[9];		// On top of user
+EXTERN int	highlight_stltermnc[9];		// On top of user
 #  endif
 # endif
 #endif
@@ -405,7 +405,7 @@
 EXTERN int	skip_term_loop INIT(= FALSE);
 #endif
 #ifdef FEAT_GUI
-EXTERN char_u	*use_gvimrc INIT(= NULL);	/* "-U" cmdline argument */
+EXTERN char_u	*use_gvimrc INIT(= NULL);	// "-U" cmdline argument
 #endif
 EXTERN int	cterm_normal_fg_color INIT(= 0);
 EXTERN int	cterm_normal_fg_bold INIT(= 0);
@@ -415,27 +415,28 @@
 EXTERN guicolor_T cterm_normal_bg_gui_color INIT(= INVALCOLOR);
 #endif
 #ifdef FEAT_TERMRESPONSE
-EXTERN int	is_mac_terminal INIT(= FALSE);  /* recognized Terminal.app */
+EXTERN int	is_mac_terminal INIT(= FALSE);  // recognized Terminal.app
 #endif
 
-EXTERN int	autocmd_busy INIT(= FALSE);	/* Is apply_autocmds() busy? */
-EXTERN int	autocmd_no_enter INIT(= FALSE); /* *Enter autocmds disabled */
-EXTERN int	autocmd_no_leave INIT(= FALSE); /* *Leave autocmds disabled */
-EXTERN int	modified_was_set;		/* did ":set modified" */
-EXTERN int	did_filetype INIT(= FALSE);	/* FileType event found */
-EXTERN int	au_did_filetype INIT(= FALSE);
-EXTERN int	keep_filetype INIT(= FALSE);	/* value for did_filetype when
-						   starting to execute
-						   autocommands */
+EXTERN int	autocmd_busy INIT(= FALSE);	// Is apply_autocmds() busy?
+EXTERN int	autocmd_no_enter INIT(= FALSE); // *Enter autocmds disabled
+EXTERN int	autocmd_no_leave INIT(= FALSE); // *Leave autocmds disabled
 
-/* When deleting the current buffer, another one must be loaded.  If we know
- * which one is preferred, au_new_curbuf is set to it */
+EXTERN int	modified_was_set;		// did ":set modified"
+EXTERN int	did_filetype INIT(= FALSE);	// FileType event found
+EXTERN int	au_did_filetype INIT(= FALSE);
+EXTERN int	keep_filetype INIT(= FALSE);	// value for did_filetype when
+						// starting to execute
+						// autocommands
+
+// When deleting the current buffer, another one must be loaded.  If we know
+// which one is preferred, au_new_curbuf is set to it
 EXTERN bufref_T	au_new_curbuf INIT(= {NULL COMMA 0 COMMA 0});
 
-/* When deleting a buffer/window and autocmd_busy is TRUE, do not free the
- * buffer/window. but link it in the list starting with
- * au_pending_free_buf/ap_pending_free_win, using b_next/w_next.
- * Free the buffer/window when autocmd_busy is being set to FALSE. */
+// When deleting a buffer/window and autocmd_busy is TRUE, do not free the
+// buffer/window. but link it in the list starting with
+// au_pending_free_buf/ap_pending_free_win, using b_next/w_next.
+// Free the buffer/window when autocmd_busy is being set to FALSE.
 EXTERN buf_T	*au_pending_free_buf INIT(= NULL);
 EXTERN win_T	*au_pending_free_win INIT(= NULL);
 
@@ -445,10 +446,10 @@
  */
 EXTERN int	mouse_row;
 EXTERN int	mouse_col;
-EXTERN int	mouse_past_bottom INIT(= FALSE);/* mouse below last line */
-EXTERN int	mouse_past_eol INIT(= FALSE);	/* mouse right of line */
-EXTERN int	mouse_dragging INIT(= 0);	/* extending Visual area with
-						   mouse dragging */
+EXTERN int	mouse_past_bottom INIT(= FALSE);// mouse below last line
+EXTERN int	mouse_past_eol INIT(= FALSE);	// mouse right of line
+EXTERN int	mouse_dragging INIT(= 0);	// extending Visual area with
+						// mouse dragging
 # if defined(FEAT_MOUSE_DEC)
 /*
  * When the DEC mouse has been pressed but not yet released we enable
@@ -458,12 +459,12 @@
 # endif
 
 # ifdef FEAT_GUI
-/* When the window layout is about to be changed, need_mouse_correct is set,
- * so that gui_mouse_correct() is called afterwards, to correct the mouse
- * pointer when focus-follow-mouse is being used. */
+// When the window layout is about to be changed, need_mouse_correct is set,
+// so that gui_mouse_correct() is called afterwards, to correct the mouse
+// pointer when focus-follow-mouse is being used.
 EXTERN int	need_mouse_correct INIT(= FALSE);
 
-/* When double clicking, topline must be the same */
+// When double clicking, topline must be the same
 EXTERN linenr_T gui_prev_topline INIT(= 0);
 #  ifdef FEAT_DIFF
 EXTERN int	gui_prev_topfill INIT(= 0);
@@ -471,23 +472,27 @@
 # endif
 
 # ifdef FEAT_MOUSESHAPE
-EXTERN int	drag_status_line INIT(= FALSE);	/* dragging the status line */
-EXTERN int	postponed_mouseshape INIT(= FALSE); /* postponed updating the
-						       mouse pointer shape */
-EXTERN int	drag_sep_line INIT(= FALSE);	/* dragging vert separator */
+EXTERN int	drag_status_line INIT(= FALSE);	// dragging the status line
+EXTERN int	postponed_mouseshape INIT(= FALSE); // postponed updating the
+						    // mouse pointer shape
+EXTERN int	drag_sep_line INIT(= FALSE);	// dragging vert separator
 # endif
 
 #endif
 
 #ifdef FEAT_DIFF
-/* Value set from 'diffopt'. */
-EXTERN int	diff_context INIT(= 6);		/* context for folds */
-EXTERN int	diff_foldcolumn INIT(= 2);	/* 'foldcolumn' for diff mode */
+// Value set from 'diffopt'.
+EXTERN int	diff_context INIT(= 6);		// context for folds
+EXTERN int	diff_foldcolumn INIT(= 2);	// 'foldcolumn' for diff mode
 EXTERN int	diff_need_scrollbind INIT(= FALSE);
 #endif
 
+// While redrawing the screen this flag is set.  It means the screen size
+// ('lines' and 'rows') must not be changed.
+EXTERN int	updating_screen INIT(= FALSE);
+
 #ifdef FEAT_MENU
-/* The root of the menu hierarchy. */
+// The root of the menu hierarchy.
 EXTERN vimmenu_T	*root_menu INIT(= NULL);
 /*
  * While defining the system menu, sys_menu is TRUE.  This avoids
@@ -496,44 +501,40 @@
 EXTERN int	sys_menu INIT(= FALSE);
 #endif
 
-/* While redrawing the screen this flag is set.  It means the screen size
- * ('lines' and 'rows') must not be changed. */
-EXTERN int	updating_screen INIT(= FALSE);
-
 #ifdef FEAT_GUI
 # ifdef FEAT_MENU
-/* Menu item just selected, set by check_termcode() */
+// Menu item just selected, set by check_termcode()
 EXTERN vimmenu_T	*current_menu;
 
-/* Set to TRUE after adding/removing menus to ensure they are updated */
+// Set to TRUE after adding/removing menus to ensure they are updated
 EXTERN int force_menu_update INIT(= FALSE);
 # endif
 # ifdef FEAT_GUI_TABLINE
-/* Tab in tab pages line just selected, set by check_termcode() */
+// Tab in tab pages line just selected, set by check_termcode()
 EXTERN int	    current_tab;
 
-/* Menu entry in tab pages line menu just selected, set by check_termcode() */
+// Menu entry in tab pages line menu just selected, set by check_termcode()
 EXTERN int	    current_tabmenu;
 #  define TABLINE_MENU_CLOSE	1
 #  define TABLINE_MENU_NEW	2
 #  define TABLINE_MENU_OPEN	3
 # endif
 
-/* Scrollbar moved and new value, set by check_termcode() */
+// Scrollbar moved and new value, set by check_termcode()
 EXTERN int	current_scrollbar;
 EXTERN long_u	scrollbar_value;
 
-/* found "-rv" or "-reverse" in command line args */
+// found "-rv" or "-reverse" in command line args
 EXTERN int	found_reverse_arg INIT(= FALSE);
 
-/* "-fn" or "-font" command line argument */
+// "-fn" or "-font" command line argument
 EXTERN char	*font_argument INIT(= NULL);
 
 # ifdef FEAT_GUI_GTK
-/* "-bg" or "-background" command line argument */
+// "-bg" or "-background" command line argument
 EXTERN char	*background_argument INIT(= NULL);
 
-/* "-fg" or "-foreground" command line argument */
+// "-fg" or "-foreground" command line argument
 EXTERN char	*foreground_argument INIT(= NULL);
 # endif
 
@@ -552,7 +553,7 @@
 EXTERN int	new_pixel_width INIT(= 0);
 EXTERN int	new_pixel_height INIT(= 0);
 
-/* Window position from ":winpos", to be used when opening the GUI window. */
+// Window position from ":winpos", to be used when opening the GUI window.
 EXTERN int	gui_win_x INIT(= -1);
 EXTERN int	gui_win_y INIT(= -1);
 #endif
@@ -568,7 +569,7 @@
 
 # define CLIP_UNNAMED      1
 # define CLIP_UNNAMED_PLUS 2
-EXTERN int	clip_unnamed INIT(= 0); /* above two values or'ed */
+EXTERN int	clip_unnamed INIT(= 0); // above two values or'ed
 
 EXTERN int	clip_autoselect_star INIT(= FALSE);
 EXTERN int	clip_autoselect_plus INIT(= FALSE);
@@ -584,9 +585,9 @@
  * "curwin" to the currently active window.
  * When switching tabs these swapped with the pointers in "tabpage_T".
  */
-EXTERN win_T	*firstwin;		/* first window */
-EXTERN win_T	*lastwin;		/* last window */
-EXTERN win_T	*prevwin INIT(= NULL);	/* previous window */
+EXTERN win_T	*firstwin;		// first window
+EXTERN win_T	*lastwin;		// last window
+EXTERN win_T	*prevwin INIT(= NULL);	// previous window
 #define ONE_WINDOW (firstwin == lastwin)
 #define W_NEXT(wp) ((wp)->w_next)
 #define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
@@ -606,16 +607,16 @@
 		? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next)
 
 
-EXTERN win_T	*curwin;	/* currently active window */
+EXTERN win_T	*curwin;	// currently active window
 
-EXTERN win_T	*aucmd_win;	/* window used in aucmd_prepbuf() */
-EXTERN int	aucmd_win_used INIT(= FALSE);	/* aucmd_win is being used */
+EXTERN win_T	*aucmd_win;	// window used in aucmd_prepbuf()
+EXTERN int	aucmd_win_used INIT(= FALSE);	// aucmd_win is being used
 
 #ifdef FEAT_TEXT_PROP
 EXTERN win_T    *first_popupwin;		// first global popup window
 EXTERN win_T	*popup_dragwin INIT(= NULL);	// popup window being dragged
 
-// Set to TRUE if there is any visible popup.
+// Set to TRUE if there is any visible popup window.
 EXTERN int	popup_visible INIT(= FALSE);
 
 EXTERN int	text_prop_frozen INIT(= 0);
@@ -625,7 +626,7 @@
  * The window layout is kept in a tree of frames.  topframe points to the top
  * of the tree.
  */
-EXTERN frame_T	*topframe;	/* top of the window frame tree */
+EXTERN frame_T	*topframe;	// top of the window frame tree
 
 /*
  * Tab pages are alternative topframes.  "first_tabpage" points to the first
@@ -633,15 +634,15 @@
  */
 EXTERN tabpage_T    *first_tabpage;
 EXTERN tabpage_T    *curtab;
-EXTERN int	    redraw_tabline INIT(= FALSE);  /* need to redraw tabline */
+EXTERN int	    redraw_tabline INIT(= FALSE);  // need to redraw tabline
 
 /*
  * All buffers are linked in a list. 'firstbuf' points to the first entry,
  * 'lastbuf' to the last entry and 'curbuf' to the currently active buffer.
  */
-EXTERN buf_T	*firstbuf INIT(= NULL);	/* first buffer */
-EXTERN buf_T	*lastbuf INIT(= NULL);	/* last buffer */
-EXTERN buf_T	*curbuf INIT(= NULL);	/* currently active buffer */
+EXTERN buf_T	*firstbuf INIT(= NULL);	// first buffer
+EXTERN buf_T	*lastbuf INIT(= NULL);	// last buffer
+EXTERN buf_T	*curbuf INIT(= NULL);	// currently active buffer
 
 #define FOR_ALL_BUFFERS(buf) for (buf = firstbuf; buf != NULL; buf = buf->b_next)
 
@@ -649,28 +650,28 @@
 #define FOR_ALL_SIGNS_IN_BUF(buf, sign) \
 	for (sign = buf->b_signlist; sign != NULL; sign = sign->next)
 
-/* Flag that is set when switching off 'swapfile'.  It means that all blocks
- * are to be loaded into memory.  Shouldn't be global... */
-EXTERN int	mf_dont_release INIT(= FALSE);	/* don't release blocks */
+// Flag that is set when switching off 'swapfile'.  It means that all blocks
+// are to be loaded into memory.  Shouldn't be global...
+EXTERN int	mf_dont_release INIT(= FALSE);	// don't release blocks
 
 /*
  * List of files being edited (global argument list).  curwin->w_alist points
  * to this when the window is using the global argument list.
  */
-EXTERN alist_T	global_alist;	/* global argument list */
-EXTERN int	max_alist_id INIT(= 0);	    /* the previous argument list id */
-EXTERN int	arg_had_last INIT(= FALSE); /* accessed last file in
-					       global_alist */
+EXTERN alist_T	global_alist;		    // global argument list
+EXTERN int	max_alist_id INIT(= 0);	    // the previous argument list id
+EXTERN int	arg_had_last INIT(= FALSE); // accessed last file in
+					    // global_alist
 
-EXTERN int	ru_col;		/* column for ruler */
+EXTERN int	ru_col;		// column for ruler
 #ifdef FEAT_STL_OPT
-EXTERN int	ru_wid;		/* 'rulerfmt' width of ruler when non-zero */
+EXTERN int	ru_wid;		// 'rulerfmt' width of ruler when non-zero
 #endif
-EXTERN int	sc_col;		/* column for shown command */
+EXTERN int	sc_col;		// column for shown command
 
 #ifdef TEMPDIRNAMES
-EXTERN char_u	*vim_tempdir INIT(= NULL); /* Name of Vim's own temp dir.
-					      Ends in a slash. */
+EXTERN char_u	*vim_tempdir INIT(= NULL); // Name of Vim's own temp dir.
+					   // Ends in a slash.
 #endif
 
 /*
@@ -678,74 +679,74 @@
  * updating).
  */
 EXTERN int	starting INIT(= NO_SCREEN);
-				/* first NO_SCREEN, then NO_BUFFERS and then
-				 * set to 0 when starting up finished */
+				// first NO_SCREEN, then NO_BUFFERS and then
+				// set to 0 when starting up finished
 EXTERN int	exiting INIT(= FALSE);
-				/* TRUE when planning to exit Vim.  Might
-				 * still keep on running if there is a changed
-				 * buffer. */
+				// TRUE when planning to exit Vim.  Might
+				// still keep on running if there is a changed
+				// buffer.
 EXTERN int	really_exiting INIT(= FALSE);
-				/* TRUE when we are sure to exit, e.g., after
-				 * a deadly signal */
-EXTERN int	v_dying INIT(= 0); /* internal value of v:dying */
-EXTERN int	stdout_isatty INIT(= TRUE);	/* is stdout a terminal? */
+				// TRUE when we are sure to exit, e.g., after
+				// a deadly signal
+EXTERN int	v_dying INIT(= 0); // internal value of v:dying
+EXTERN int	stdout_isatty INIT(= TRUE);	// is stdout a terminal?
 
 #if defined(FEAT_AUTOCHDIR)
 EXTERN int	test_autochdir INIT(= FALSE);
 #endif
 #if defined(EXITFREE)
 EXTERN int	entered_free_all_mem INIT(= FALSE);
-				/* TRUE when in or after free_all_mem() */
+				// TRUE when in or after free_all_mem()
 #endif
-/* volatile because it is used in signal handler deathtrap(). */
+// volatile because it is used in signal handler deathtrap().
 EXTERN volatile sig_atomic_t full_screen INIT(= FALSE);
-				/* TRUE when doing full-screen output
-				 * otherwise only writing some messages */
+				// TRUE when doing full-screen output
+				// otherwise only writing some messages
 
 EXTERN int	restricted INIT(= FALSE);
-				/* TRUE when started as "rvim" */
+				// TRUE when started as "rvim"
 EXTERN int	secure INIT(= FALSE);
-				/* non-zero when only "safe" commands are
-				 * allowed, e.g. when sourcing .exrc or .vimrc
-				 * in current directory */
+				// non-zero when only "safe" commands are
+				// allowed, e.g. when sourcing .exrc or .vimrc
+				// in current directory
 
 EXTERN int	textlock INIT(= 0);
-				/* non-zero when changing text and jumping to
-				 * another window or buffer is not allowed */
+				// non-zero when changing text and jumping to
+				// another window or buffer is not allowed
 
 EXTERN int	curbuf_lock INIT(= 0);
-				/* non-zero when the current buffer can't be
-				 * changed.  Used for FileChangedRO. */
+				// non-zero when the current buffer can't be
+				// changed.  Used for FileChangedRO.
 EXTERN int	allbuf_lock INIT(= 0);
-				/* non-zero when no buffer name can be
-				 * changed, no buffer can be deleted and
-				 * current directory can't be changed.
-				 * Used for SwapExists et al. */
+				// non-zero when no buffer name can be
+				// changed, no buffer can be deleted and
+				// current directory can't be changed.
+				// Used for SwapExists et al.
 #ifdef HAVE_SANDBOX
 EXTERN int	sandbox INIT(= 0);
-				/* Non-zero when evaluating an expression in a
-				 * "sandbox".  Several things are not allowed
-				 * then. */
+				// Non-zero when evaluating an expression in a
+				// "sandbox".  Several things are not allowed
+				// then.
 #endif
 
 EXTERN int	silent_mode INIT(= FALSE);
-				/* set to TRUE when "-s" commandline argument
-				 * used for ex */
+				// set to TRUE when "-s" commandline argument
+				// used for ex
 
-EXTERN pos_T	VIsual;		/* start position of active Visual selection */
+EXTERN pos_T	VIsual;		// start position of active Visual selection
 EXTERN int	VIsual_active INIT(= FALSE);
-				/* whether Visual mode is active */
+				// whether Visual mode is active
 EXTERN int	VIsual_select INIT(= FALSE);
-				/* whether Select mode is active */
+				// whether Select mode is active
 EXTERN int	VIsual_reselect;
-				/* whether to restart the selection after a
-				 * Select mode mapping or menu */
+				// whether to restart the selection after a
+				// Select mode mapping or menu
 
 EXTERN int	VIsual_mode INIT(= 'v');
-				/* type of Visual mode */
+				// type of Visual mode
 
 EXTERN int	redo_VIsual_busy INIT(= FALSE);
-				/* TRUE when redoing Visual */
+				// TRUE when redoing Visual
 
 #ifdef FEAT_MOUSE
 /*
@@ -807,7 +808,7 @@
 EXTERN int	can_si_back INIT(= FALSE);
 #endif
 
-EXTERN pos_T	saved_cursor		/* w_cursor before formatting text. */
+EXTERN pos_T	saved_cursor		// w_cursor before formatting text.
 #ifdef DO_INIT
 	= {0, 0, 0}
 #endif
@@ -816,8 +817,8 @@
 /*
  * Stuff for insert mode.
  */
-EXTERN pos_T	Insstart;		/* This is where the latest
-					 * insert/append mode started. */
+EXTERN pos_T	Insstart;		// This is where the latest
+					// insert/append mode started.
 
 /* This is where the latest insert/append mode started. In contrast to
  * Insstart, this won't be reset by certain keys and is needed for
@@ -827,8 +828,8 @@
 /*
  * Stuff for VREPLACE mode.
  */
-EXTERN int	orig_line_count INIT(= 0);  /* Line count when "gR" started */
-EXTERN int	vr_lines_changed INIT(= 0); /* #Lines changed by "gR" so far */
+EXTERN int	orig_line_count INIT(= 0);  // Line count when "gR" started
+EXTERN int	vr_lines_changed INIT(= 0); // #Lines changed by "gR" so far
 
 #if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)
 /* argument to SETJMP() for handling X IO errors */
@@ -840,29 +841,29 @@
  * Note that "enc_utf8" is also set for "unicode", because the characters are
  * internally stored as UTF-8 (to avoid trouble with NUL bytes).
  */
-#define DBCS_JPN	932	/* japan */
-#define DBCS_JPNU	9932	/* euc-jp */
-#define DBCS_KOR	949	/* korea */
-#define DBCS_KORU	9949	/* euc-kr */
-#define DBCS_CHS	936	/* chinese */
-#define DBCS_CHSU	9936	/* euc-cn */
-#define DBCS_CHT	950	/* taiwan */
-#define DBCS_CHTU	9950	/* euc-tw */
-#define DBCS_2BYTE	1	/* 2byte- */
+#define DBCS_JPN	932	// japan
+#define DBCS_JPNU	9932	// euc-jp
+#define DBCS_KOR	949	// korea
+#define DBCS_KORU	9949	// euc-kr
+#define DBCS_CHS	936	// chinese
+#define DBCS_CHSU	9936	// euc-cn
+#define DBCS_CHT	950	// taiwan
+#define DBCS_CHTU	9950	// euc-tw
+#define DBCS_2BYTE	1	// 2byte-
 #define DBCS_DEBUG	-1
 
-EXTERN int	enc_dbcs INIT(= 0);		/* One of DBCS_xxx values if
-						   DBCS encoding */
-EXTERN int	enc_unicode INIT(= 0);	/* 2: UCS-2 or UTF-16, 4: UCS-4 */
-EXTERN int	enc_utf8 INIT(= FALSE);		/* UTF-8 encoded Unicode */
-EXTERN int	enc_latin1like INIT(= TRUE);	/* 'encoding' is latin1 comp. */
+EXTERN int	enc_dbcs INIT(= 0);		// One of DBCS_xxx values if
+						// DBCS encoding
+EXTERN int	enc_unicode INIT(= 0);	// 2: UCS-2 or UTF-16, 4: UCS-4
+EXTERN int	enc_utf8 INIT(= FALSE);		// UTF-8 encoded Unicode
+EXTERN int	enc_latin1like INIT(= TRUE);	// 'encoding' is latin1 comp.
 #if defined(MSWIN) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
-/* Codepage nr of 'encoding'.  Negative means it's not been set yet, zero
- * means 'encoding' is not a valid codepage. */
+// Codepage nr of 'encoding'.  Negative means it's not been set yet, zero
+// means 'encoding' is not a valid codepage.
 EXTERN int	enc_codepage INIT(= -1);
-EXTERN int	enc_latin9 INIT(= FALSE);	/* 'encoding' is latin9 */
+EXTERN int	enc_latin9 INIT(= FALSE);	// 'encoding' is latin9
 #endif
-EXTERN int	has_mbyte INIT(= 0);		/* any multi-byte encoding */
+EXTERN int	has_mbyte INIT(= 0);		// any multi-byte encoding
 
 /*
  * To speed up BYTELEN() we fill a table with the byte lengths whenever
@@ -870,10 +871,10 @@
  */
 EXTERN char	mb_bytelen_tab[256];
 
-/* Variables that tell what conversion is used for keyboard input and display
- * output. */
-EXTERN vimconv_T input_conv;			/* type of input conversion */
-EXTERN vimconv_T output_conv;			/* type of output conversion */
+// Variables that tell what conversion is used for keyboard input and display
+// output.
+EXTERN vimconv_T input_conv;			// type of input conversion
+EXTERN vimconv_T output_conv;			// type of output conversion
 
 /*
  * Function pointers, used to quickly get to the right function.  Each has
@@ -881,13 +882,13 @@
  * (DBCS).
  * The value is set in mb_init();
  */
-/* length of char in bytes, including following composing chars */
+// length of char in bytes, including following composing chars
 EXTERN int (*mb_ptr2len)(char_u *p) INIT(= latin_ptr2len);
-/* idem, with limit on string length */
+// idem, with limit on string length
 EXTERN int (*mb_ptr2len_len)(char_u *p, int size) INIT(= latin_ptr2len_len);
-/* byte length of char */
+// byte length of char
 EXTERN int (*mb_char2len)(int c) INIT(= latin_char2len);
-/* convert char to bytes, return the length */
+// convert char to bytes, return the length
 EXTERN int (*mb_char2bytes)(int c, char_u *buf) INIT(= latin_char2bytes);
 EXTERN int (*mb_ptr2cells)(char_u *p) INIT(= latin_ptr2cells);
 EXTERN int (*mb_ptr2cells_len)(char_u *p, int size) INIT(= latin_ptr2cells_len);
@@ -897,7 +898,7 @@
 EXTERN int (*mb_head_off)(char_u *base, char_u *p) INIT(= latin_head_off);
 
 # if defined(USE_ICONV) && defined(DYNAMIC_ICONV)
-/* Pointers to functions and variables to be loaded at runtime */
+// Pointers to functions and variables to be loaded at runtime
 EXTERN size_t (*iconv) (iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
 EXTERN iconv_t (*iconv_open) (const char *tocode, const char *fromcode);
 EXTERN int (*iconv_close) (iconv_t cd);
@@ -919,8 +920,8 @@
 EXTERN colnr_T		preedit_start_col INIT(= MAXCOL);
 EXTERN colnr_T		preedit_end_col INIT(= MAXCOL);
 
-/* "xim_changed_while_preediting" is set when changed() can set the 'modified'
- * flag even while preediting. */
+// "xim_changed_while_preediting" is set when changed() can set the 'modified'
+// flag even while preediting.
 EXTERN int		xim_changed_while_preediting INIT(= FALSE);
 # else
 EXTERN XIC		xic INIT(= NULL);
@@ -945,167 +946,167 @@
  * "motion_force"   Last motion_force  from do_pending_operator()
  * "debug_mode"	    Debug mode.
  */
-EXTERN int	State INIT(= NORMAL);	/* This is the current state of the
-					 * command interpreter. */
+EXTERN int	State INIT(= NORMAL);	// This is the current state of the
+					// command interpreter.
 #ifdef FEAT_EVAL
 EXTERN int	debug_mode INIT(= FALSE);
 #endif
 
-EXTERN int	finish_op INIT(= FALSE);/* TRUE while an operator is pending */
-EXTERN long	opcount INIT(= 0);	/* count for pending operator */
+EXTERN int	finish_op INIT(= FALSE);// TRUE while an operator is pending
+EXTERN long	opcount INIT(= 0);	// count for pending operator
 EXTERN int	motion_force INIT(= 0); // motion force for pending operator
 
 /*
  * Ex mode (Q) state
  */
-EXTERN int exmode_active INIT(= 0);	/* zero, EXMODE_NORMAL or EXMODE_VIM */
-EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */
+EXTERN int exmode_active INIT(= 0);	// zero, EXMODE_NORMAL or EXMODE_VIM
+EXTERN int ex_no_reprint INIT(= FALSE); // no need to print after z or p
 
-EXTERN int reg_recording INIT(= 0);	/* register for recording  or zero */
-EXTERN int reg_executing INIT(= 0);	/* register being executed or zero */
+EXTERN int reg_recording INIT(= 0);	// register for recording  or zero
+EXTERN int reg_executing INIT(= 0);	// register being executed or zero
 
-EXTERN int no_mapping INIT(= FALSE);	/* currently no mapping allowed */
-EXTERN int no_zero_mapping INIT(= 0);	/* mapping zero not allowed */
-EXTERN int allow_keys INIT(= FALSE);	/* allow key codes when no_mapping
-					 * is set */
-EXTERN int no_u_sync INIT(= 0);		/* Don't call u_sync() */
+EXTERN int no_mapping INIT(= FALSE);	// currently no mapping allowed
+EXTERN int no_zero_mapping INIT(= 0);	// mapping zero not allowed
+EXTERN int allow_keys INIT(= FALSE);	// allow key codes when no_mapping
+					// is set
+EXTERN int no_u_sync INIT(= 0);		// Don't call u_sync()
 #ifdef FEAT_EVAL
-EXTERN int u_sync_once INIT(= 0);	/* Call u_sync() once when evaluating
-					   an expression. */
+EXTERN int u_sync_once INIT(= 0);	// Call u_sync() once when evaluating
+					// an expression.
 #endif
 
-EXTERN int restart_edit INIT(= 0);	/* call edit when next cmd finished */
-EXTERN int arrow_used;			/* Normally FALSE, set to TRUE after
-					 * hitting cursor key in insert mode.
-					 * Used by vgetorpeek() to decide when
-					 * to call u_sync() */
-EXTERN int	ins_at_eol INIT(= FALSE); /* put cursor after eol when
-					   restarting edit after CTRL-O */
+EXTERN int restart_edit INIT(= 0);	// call edit when next cmd finished
+EXTERN int arrow_used;			// Normally FALSE, set to TRUE after
+					// hitting cursor key in insert mode.
+					// Used by vgetorpeek() to decide when
+					// to call u_sync()
+EXTERN int	ins_at_eol INIT(= FALSE); // put cursor after eol when
+					  // restarting edit after CTRL-O
 #ifdef FEAT_INS_EXPAND
-EXTERN char_u	*edit_submode INIT(= NULL); /* msg for CTRL-X submode */
-EXTERN char_u	*edit_submode_pre INIT(= NULL); /* prepended to edit_submode */
-EXTERN char_u	*edit_submode_extra INIT(= NULL);/* appended to edit_submode */
-EXTERN hlf_T	edit_submode_highl;	/* highl. method for extra info */
+EXTERN char_u	*edit_submode INIT(= NULL); // msg for CTRL-X submode
+EXTERN char_u	*edit_submode_pre INIT(= NULL); // prepended to edit_submode
+EXTERN char_u	*edit_submode_extra INIT(= NULL);// appended to edit_submode
+EXTERN hlf_T	edit_submode_highl;	// highl. method for extra info
 #endif
 
-EXTERN int	no_abbr INIT(= TRUE);	/* TRUE when no abbreviations loaded */
+EXTERN int	no_abbr INIT(= TRUE);	// TRUE when no abbreviations loaded
 
 #ifdef USE_EXE_NAME
-EXTERN char_u	*exe_name;		/* the name of the executable */
+EXTERN char_u	*exe_name;		// the name of the executable
 #endif
 
 #ifdef USE_ON_FLY_SCROLL
-EXTERN int	dont_scroll INIT(= FALSE);/* don't use scrollbars when TRUE */
+EXTERN int	dont_scroll INIT(= FALSE);// don't use scrollbars when TRUE
 #endif
-EXTERN int	mapped_ctrl_c INIT(= FALSE); /* modes where CTRL-C is mapped */
-EXTERN int	ctrl_c_interrupts INIT(= TRUE);	/* CTRL-C sets got_int */
+EXTERN int	mapped_ctrl_c INIT(= FALSE); // modes where CTRL-C is mapped
+EXTERN int	ctrl_c_interrupts INIT(= TRUE);	// CTRL-C sets got_int
 
-EXTERN cmdmod_T	cmdmod;			/* Ex command modifiers */
+EXTERN cmdmod_T	cmdmod;			// Ex command modifiers
 
-EXTERN int	msg_silent INIT(= 0);	/* don't print messages */
-EXTERN int	emsg_silent INIT(= 0);	/* don't print error messages */
-EXTERN int	emsg_noredir INIT(= 0);	/* don't redirect error messages */
-EXTERN int	cmd_silent INIT(= FALSE); /* don't echo the command line */
+EXTERN int	msg_silent INIT(= 0);	// don't print messages
+EXTERN int	emsg_silent INIT(= 0);	// don't print error messages
+EXTERN int	emsg_noredir INIT(= 0);	// don't redirect error messages
+EXTERN int	cmd_silent INIT(= FALSE); // don't echo the command line
 
 EXTERN int	swap_exists_action INIT(= SEA_NONE);
-					/* For dialog when swap file already
-					 * exists. */
+					// For dialog when swap file already
+					// exists.
 EXTERN int	swap_exists_did_quit INIT(= FALSE);
-					/* Selected "quit" at the dialog. */
+					// Selected "quit" at the dialog.
 
-EXTERN char_u	*IObuff;		/* sprintf's are done in this buffer,
-					   size is IOSIZE */
-EXTERN char_u	*NameBuff;		/* file names are expanded in this
-					 * buffer, size is MAXPATHL */
-EXTERN char	msg_buf[MSG_BUF_LEN];	/* small buffer for messages */
+EXTERN char_u	*IObuff;		// sprintf's are done in this buffer,
+					// size is IOSIZE
+EXTERN char_u	*NameBuff;		// file names are expanded in this
+					// buffer, size is MAXPATHL
+EXTERN char	msg_buf[MSG_BUF_LEN];	// small buffer for messages
 
-/* When non-zero, postpone redrawing. */
+// When non-zero, postpone redrawing.
 EXTERN int	RedrawingDisabled INIT(= 0);
 
-EXTERN int	readonlymode INIT(= FALSE); /* Set to TRUE for "view" */
-EXTERN int	recoverymode INIT(= FALSE); /* Set to TRUE for "-r" option */
+EXTERN int	readonlymode INIT(= FALSE); // Set to TRUE for "view"
+EXTERN int	recoverymode INIT(= FALSE); // Set to TRUE for "-r" option
 
-EXTERN typebuf_T typebuf		/* typeahead buffer */
+EXTERN typebuf_T typebuf		// typeahead buffer
 #ifdef DO_INIT
 		    = {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}
 #endif
 		    ;
-EXTERN int	ex_normal_busy INIT(= 0); /* recursiveness of ex_normal() */
-EXTERN int	ex_normal_lock INIT(= 0); /* forbid use of ex_normal() */
+EXTERN int	ex_normal_busy INIT(= 0); // recursiveness of ex_normal()
+EXTERN int	ex_normal_lock INIT(= 0); // forbid use of ex_normal()
 #ifdef FEAT_EVAL
-EXTERN int	ignore_script INIT(= FALSE);  /* ignore script input */
+EXTERN int	ignore_script INIT(= FALSE);  // ignore script input
 #endif
-EXTERN int	stop_insert_mode;	/* for ":stopinsert" and 'insertmode' */
+EXTERN int	stop_insert_mode;	// for ":stopinsert" and 'insertmode'
 
-EXTERN int	KeyTyped;		/* TRUE if user typed current char */
-EXTERN int	KeyStuffed;		/* TRUE if current char from stuffbuf */
+EXTERN int	KeyTyped;		// TRUE if user typed current char
+EXTERN int	KeyStuffed;		// TRUE if current char from stuffbuf
 #ifdef HAVE_INPUT_METHOD
-EXTERN int	vgetc_im_active;	/* Input Method was active for last
-					   character obtained from vgetc() */
+EXTERN int	vgetc_im_active;	// Input Method was active for last
+					// character obtained from vgetc()
 #endif
-EXTERN int	maptick INIT(= 0);	/* tick for each non-mapped char */
+EXTERN int	maptick INIT(= 0);	// tick for each non-mapped char
 
-EXTERN int	must_redraw INIT(= 0);	    /* type of redraw necessary */
-EXTERN int	skip_redraw INIT(= FALSE);  /* skip redraw once */
-EXTERN int	do_redraw INIT(= FALSE);    /* extra redraw once */
+EXTERN int	must_redraw INIT(= 0);	    // type of redraw necessary
+EXTERN int	skip_redraw INIT(= FALSE);  // skip redraw once
+EXTERN int	do_redraw INIT(= FALSE);    // extra redraw once
 
 EXTERN int	need_highlight_changed INIT(= TRUE);
 
 #define NSCRIPT 15
-EXTERN FILE	*scriptin[NSCRIPT];	    /* streams to read script from */
-EXTERN int	curscript INIT(= 0);	    /* index in scriptin[] */
-EXTERN FILE	*scriptout  INIT(= NULL);   /* stream to write script to */
-EXTERN int	read_cmd_fd INIT(= 0);	    /* fd to read commands from */
+EXTERN FILE	*scriptin[NSCRIPT];	    // streams to read script from
+EXTERN int	curscript INIT(= 0);	    // index in scriptin[]
+EXTERN FILE	*scriptout  INIT(= NULL);   // stream to write script to
+EXTERN int	read_cmd_fd INIT(= 0);	    // fd to read commands from
 
-/* volatile because it is used in signal handler catch_sigint(). */
-EXTERN volatile sig_atomic_t got_int INIT(= FALSE); /* set to TRUE when interrupt
-						signal occurred */
+// volatile because it is used in signal handler catch_sigint().
+EXTERN volatile sig_atomic_t got_int INIT(= FALSE); // set to TRUE when interrupt
+						// signal occurred
 #ifdef USE_TERM_CONSOLE
-EXTERN int	term_console INIT(= FALSE); /* set to TRUE when console used */
+EXTERN int	term_console INIT(= FALSE); // set to TRUE when console used
 #endif
-EXTERN int	termcap_active INIT(= FALSE);	/* set by starttermcap() */
-EXTERN int	cur_tmode INIT(= TMODE_COOK);	/* input terminal mode */
-EXTERN int	bangredo INIT(= FALSE);	    /* set to TRUE with ! command */
-EXTERN int	searchcmdlen;		    /* length of previous search cmd */
+EXTERN int	termcap_active INIT(= FALSE);	// set by starttermcap()
+EXTERN int	cur_tmode INIT(= TMODE_COOK);	// input terminal mode
+EXTERN int	bangredo INIT(= FALSE);	    // set to TRUE with ! command
+EXTERN int	searchcmdlen;		    // length of previous search cmd
 #ifdef FEAT_SYN_HL
-EXTERN int	reg_do_extmatch INIT(= 0);  /* Used when compiling regexp:
-					     * REX_SET to allow \z\(...\),
-					     * REX_USE to allow \z\1 et al. */
-EXTERN reg_extmatch_T *re_extmatch_in INIT(= NULL); /* Used by vim_regexec():
-					     * strings for \z\1...\z\9 */
-EXTERN reg_extmatch_T *re_extmatch_out INIT(= NULL); /* Set by vim_regexec()
-					     * to store \z\(...\) matches */
+EXTERN int	reg_do_extmatch INIT(= 0);  // Used when compiling regexp:
+					    // REX_SET to allow \z\(...\),
+					    // REX_USE to allow \z\1 et al.
+EXTERN reg_extmatch_T *re_extmatch_in INIT(= NULL); // Used by vim_regexec():
+					    // strings for \z\1...\z\9
+EXTERN reg_extmatch_T *re_extmatch_out INIT(= NULL); // Set by vim_regexec()
+					    // to store \z\(...\) matches
 #endif
 
 EXTERN int	did_outofmem_msg INIT(= FALSE);
-					    /* set after out of memory msg */
+					    // set after out of memory msg
 EXTERN int	did_swapwrite_msg INIT(= FALSE);
-					    /* set after swap write error msg */
-EXTERN int	undo_off INIT(= FALSE);	    /* undo switched off for now */
-EXTERN int	global_busy INIT(= 0);	    /* set when :global is executing */
-EXTERN int	listcmd_busy INIT(= FALSE); /* set when :argdo, :windo or
-					       :bufdo is executing */
+					    // set after swap write error msg
+EXTERN int	undo_off INIT(= FALSE);	    // undo switched off for now
+EXTERN int	global_busy INIT(= 0);	    // set when :global is executing
+EXTERN int	listcmd_busy INIT(= FALSE); // set when :argdo, :windo or
+					    // :bufdo is executing
 EXTERN int	need_start_insertmode INIT(= FALSE);
-					    /* start insert mode soon */
-EXTERN char_u	*last_cmdline INIT(= NULL); /* last command line (for ":) */
-EXTERN char_u	*repeat_cmdline INIT(= NULL); /* command line for "." */
+					    // start insert mode soon
+EXTERN char_u	*last_cmdline INIT(= NULL); // last command line (for ":)
+EXTERN char_u	*repeat_cmdline INIT(= NULL); // command line for "."
 #ifdef FEAT_CMDHIST
-EXTERN char_u	*new_last_cmdline INIT(= NULL);	/* new value for last_cmdline */
+EXTERN char_u	*new_last_cmdline INIT(= NULL);	// new value for last_cmdline
 #endif
-EXTERN char_u	*autocmd_fname INIT(= NULL); /* fname for <afile> on cmdline */
-EXTERN int	autocmd_fname_full;	     /* autocmd_fname is full path */
-EXTERN int	autocmd_bufnr INIT(= 0);     /* fnum for <abuf> on cmdline */
-EXTERN char_u	*autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
-EXTERN int	did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */
-EXTERN pos_T	last_cursormoved	      /* for CursorMoved event */
+EXTERN char_u	*autocmd_fname INIT(= NULL); // fname for <afile> on cmdline
+EXTERN int	autocmd_fname_full;	     // autocmd_fname is full path
+EXTERN int	autocmd_bufnr INIT(= 0);     // fnum for <abuf> on cmdline
+EXTERN char_u	*autocmd_match INIT(= NULL); // name for <amatch> on cmdline
+EXTERN int	did_cursorhold INIT(= FALSE); // set when CursorHold t'gerd
+EXTERN pos_T	last_cursormoved	      // for CursorMoved event
 # ifdef DO_INIT
 			= {0, 0, 0}
 # endif
 			;
 
-EXTERN int	postponed_split INIT(= 0);  /* for CTRL-W CTRL-] command */
-EXTERN int	postponed_split_flags INIT(= 0);  /* args for win_split() */
-EXTERN int	postponed_split_tab INIT(= 0);  /* cmdmod.tab */
+EXTERN int	postponed_split INIT(= 0);  // for CTRL-W CTRL-] command
+EXTERN int	postponed_split_flags INIT(= 0);  // args for win_split()
+EXTERN int	postponed_split_tab INIT(= 0);  // cmdmod.tab
 #ifdef FEAT_QUICKFIX
 EXTERN int	g_do_tagpreview INIT(= 0);  // for tag preview commands:
 					    // height of preview window
@@ -1114,12 +1115,12 @@
 					    // from the command line (0) or was
 					    // invoked as a normal command (1)
 
-EXTERN int	replace_offset INIT(= 0);   /* offset for replace_push() */
+EXTERN int	replace_offset INIT(= 0);   // offset for replace_push()
 
 EXTERN char_u	*escape_chars INIT(= (char_u *)" \t\\\"|");
-					    /* need backslash in cmd line */
+					    // need backslash in cmd line
 
-EXTERN int	keep_help_flag INIT(= FALSE); /* doing :ta from help file */
+EXTERN int	keep_help_flag INIT(= FALSE); // doing :ta from help file
 
 /*
  * When a string option is NULL (which only happens in out-of-memory
@@ -1128,36 +1129,36 @@
  */
 EXTERN char_u	*empty_option INIT(= (char_u *)"");
 
-EXTERN int  redir_off INIT(= FALSE);	/* no redirection for a moment */
-EXTERN FILE *redir_fd INIT(= NULL);	/* message redirection file */
+EXTERN int  redir_off INIT(= FALSE);	// no redirection for a moment
+EXTERN FILE *redir_fd INIT(= NULL);	// message redirection file
 #ifdef FEAT_EVAL
-EXTERN int  redir_reg INIT(= 0);	/* message redirection register */
-EXTERN int  redir_vname INIT(= 0);	/* message redirection variable */
-EXTERN int  redir_execute INIT(= 0);	/* execute() redirection */
+EXTERN int  redir_reg INIT(= 0);	// message redirection register
+EXTERN int  redir_vname INIT(= 0);	// message redirection variable
+EXTERN int  redir_execute INIT(= 0);	// execute() redirection
 #endif
 
 #ifdef FEAT_LANGMAP
-EXTERN char_u	langmap_mapchar[256];	/* mapping for language keys */
+EXTERN char_u	langmap_mapchar[256];	// mapping for language keys
 #endif
 
 #ifdef FEAT_WILDMENU
-EXTERN int  save_p_ls INIT(= -1);	/* Save 'laststatus' setting */
-EXTERN int  save_p_wmh INIT(= -1);	/* Save 'winminheight' setting */
+EXTERN int  save_p_ls INIT(= -1);	// Save 'laststatus' setting
+EXTERN int  save_p_wmh INIT(= -1);	// Save 'winminheight' setting
 EXTERN int  wild_menu_showing INIT(= 0);
-# define WM_SHOWN	1		/* wildmenu showing */
-# define WM_SCROLLED	2		/* wildmenu showing with scroll */
+# define WM_SHOWN	1		// wildmenu showing
+# define WM_SCROLLED	2		// wildmenu showing with scroll
 #endif
 
 #ifdef MSWIN
-EXTERN char_u	toupper_tab[256];	/* table for toupper() */
-EXTERN char_u	tolower_tab[256];	/* table for tolower() */
+EXTERN char_u	toupper_tab[256];	// table for toupper()
+EXTERN char_u	tolower_tab[256];	// table for tolower()
 #endif
 
 #ifdef FEAT_LINEBREAK
-EXTERN char	breakat_flags[256];	/* which characters are in 'breakat' */
+EXTERN char	breakat_flags[256];	// which characters are in 'breakat'
 #endif
 
-/* These are in version.c, call init_longVersion() before use. */
+// These are in version.c, call init_longVersion() before use.
 extern char *Version;
 #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC)
 extern char longVersion[];
@@ -1182,12 +1183,12 @@
 extern char_u *compiled_sys;
 #endif
 
-/* When a window has a local directory, the absolute path of the global
- * current directory is stored here (in allocated memory).  If the current
- * directory is not a local directory, globaldir is NULL. */
+// When a window has a local directory, the absolute path of the global
+// current directory is stored here (in allocated memory).  If the current
+// directory is not a local directory, globaldir is NULL.
 EXTERN char_u	*globaldir INIT(= NULL);
 
-/* Characters from 'listchars' option */
+// Characters from 'listchars' option
 EXTERN int	lcs_eol INIT(= '$');
 EXTERN int	lcs_ext INIT(= NUL);
 EXTERN int	lcs_prec INIT(= NUL);
@@ -1201,7 +1202,7 @@
 EXTERN int	lcs_conceal INIT(= ' ');
 #endif
 
-/* Characters from 'fillchars' option */
+// Characters from 'fillchars' option
 EXTERN int	fill_stl INIT(= ' ');
 EXTERN int	fill_stlnc INIT(= ' ');
 EXTERN int	fill_vert INIT(= ' ');
@@ -1212,14 +1213,14 @@
 EXTERN int	disable_fold_update INIT(= 0);
 #endif
 
-/* Whether 'keymodel' contains "stopsel" and "startsel". */
+// Whether 'keymodel' contains "stopsel" and "startsel".
 EXTERN int	km_stopsel INIT(= FALSE);
 EXTERN int	km_startsel INIT(= FALSE);
 
 #ifdef FEAT_CMDWIN
-EXTERN int	cedit_key INIT(= -1);	/* key value of 'cedit' option */
-EXTERN int	cmdwin_type INIT(= 0);	/* type of cmdline window or 0 */
-EXTERN int	cmdwin_result INIT(= 0); /* result of cmdline window or 0 */
+EXTERN int	cedit_key INIT(= -1);	// key value of 'cedit' option
+EXTERN int	cmdwin_type INIT(= 0);	// type of cmdline window or 0
+EXTERN int	cmdwin_result INIT(= 0); // result of cmdline window or 0
 #endif
 
 EXTERN char_u no_lines_msg[]	INIT(= N_("--No lines in buffer--"));
@@ -1229,21 +1230,21 @@
  * accumulated until it's finished.
  * Also used for ":spellrepall".
  */
-EXTERN long	sub_nsubs;	/* total number of substitutions */
-EXTERN linenr_T	sub_nlines;	/* total number of lines changed */
+EXTERN long	sub_nsubs;	// total number of substitutions
+EXTERN linenr_T	sub_nlines;	// total number of lines changed
 
-/* table to store parsed 'wildmode' */
+// table to store parsed 'wildmode'
 EXTERN char_u	wim_flags[4];
 
 #if defined(FEAT_TITLE) && defined(FEAT_STL_OPT)
-/* whether titlestring and iconstring contains statusline syntax */
+// whether titlestring and iconstring contains statusline syntax
 # define STL_IN_ICON	1
 # define STL_IN_TITLE	2
 EXTERN int      stl_syntax INIT(= 0);
 #endif
 
 #ifdef FEAT_SEARCH_EXTRA
-/* don't use 'hlsearch' temporarily */
+// don't use 'hlsearch' temporarily
 EXTERN int	no_hlsearch INIT(= FALSE);
 #endif
 
@@ -1257,7 +1258,7 @@
 #endif
 
 #ifdef CURSOR_SHAPE
-/* the table is in misc2.c, because of initializations */
+// the table is in misc2.c, because of initializations
 extern cursorentry_T shape_table[SHAPE_IDX_COUNT];
 #endif
 
@@ -1304,7 +1305,7 @@
 # endif
 ;
 
-/* For prt_get_unit(). */
+// For prt_get_unit().
 # define PRT_UNIT_NONE	-1
 # define PRT_UNIT_PERC	0
 # define PRT_UNIT_INCH	1
@@ -1315,7 +1316,7 @@
 
 #if (defined(FEAT_PRINTER) && defined(FEAT_STL_OPT)) \
 	    || defined(FEAT_GUI_TABLINE)
-/* Page number used for %N in 'pageheader' and 'guitablabel'. */
+// Page number used for %N in 'pageheader' and 'guitablabel'.
 EXTERN linenr_T printer_page_num;
 #endif
 
@@ -1335,7 +1336,7 @@
 
 #ifdef FEAT_GUI_GTK
 EXTERN guint32	gtk_socket_id INIT(= 0);
-EXTERN int	echo_wid_arg INIT(= FALSE);	/* --echo-wid argument */
+EXTERN int	echo_wid_arg INIT(= FALSE);	// --echo-wid argument
 #endif
 
 #ifdef FEAT_GUI_MSWIN
@@ -1347,12 +1348,12 @@
 #endif
 
 #if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
-EXTERN int	typebuf_was_filled INIT(= FALSE); /* received text from client
-						     or from feedkeys() */
+EXTERN int	typebuf_was_filled INIT(= FALSE); // received text from client
+						  // or from feedkeys()
 #endif
 
 #ifdef FEAT_CLIENTSERVER
-EXTERN char_u	*serverName INIT(= NULL);	/* name of the server */
+EXTERN char_u	*serverName INIT(= NULL);	// name of the server
 # ifdef FEAT_X11
 EXTERN Window	commWindow INIT(= None);
 EXTERN Window	clientWindow INIT(= None);
@@ -1367,38 +1368,38 @@
 #endif
 
 #if defined(UNIX) || defined(VMS)
-EXTERN int	term_is_xterm INIT(= FALSE);	/* xterm-like 'term' */
+EXTERN int	term_is_xterm INIT(= FALSE);	// xterm-like 'term'
 #endif
 
 #ifdef BACKSLASH_IN_FILENAME
-EXTERN char	psepc INIT(= '\\');	/* normal path separator character */
-EXTERN char	psepcN INIT(= '/');	/* abnormal path separator character */
+EXTERN char	psepc INIT(= '\\');	// normal path separator character
+EXTERN char	psepcN INIT(= '/');	// abnormal path separator character
 /* normal path separator string */
 EXTERN char	pseps[2] INIT(= {'\\' COMMA 0});
 #endif
 
-/* Set to TRUE when an operator is being executed with virtual editing, MAYBE
- * when no operator is being executed, FALSE otherwise. */
+// Set to TRUE when an operator is being executed with virtual editing, MAYBE
+// when no operator is being executed, FALSE otherwise.
 EXTERN int	virtual_op INIT(= MAYBE);
 
 #ifdef FEAT_SYN_HL
-/* Display tick, incremented for each call to update_screen() */
+// Display tick, incremented for each call to update_screen()
 EXTERN disptick_T	display_tick INIT(= 0);
 #endif
 
 #ifdef FEAT_SPELL
-/* Line in which spell checking wasn't highlighted because it touched the
- * cursor position in Insert mode. */
+// Line in which spell checking wasn't highlighted because it touched the
+// cursor position in Insert mode.
 EXTERN linenr_T		spell_redraw_lnum INIT(= 0);
 #endif
 
 #ifdef FEAT_CONCEAL
-/* Set when the cursor line needs to be redrawn. */
+// Set when the cursor line needs to be redrawn.
 EXTERN int		need_cursor_line_redraw INIT(= FALSE);
 #endif
 
 #ifdef USE_MCH_ERRMSG
-/* Grow array to collect error messages in until they can be displayed. */
+// Grow array to collect error messages in until they can be displayed.
 EXTERN garray_T error_ga
 # ifdef DO_INIT
 	= {0, 0, 0, 0, NULL}
@@ -1407,11 +1408,11 @@
 #endif
 
 #ifdef FEAT_NETBEANS_INTG
-EXTERN char *netbeansArg INIT(= NULL);	/* the -nb[:host:port:passwd] arg */
-EXTERN int netbeansFireChanges INIT(= 1); /* send buffer changes if != 0 */
-EXTERN int netbeansForcedQuit INIT(= 0);/* don't write modified files */
-EXTERN int netbeansReadFile INIT(= 1);	/* OK to read from disk if != 0 */
-EXTERN int netbeansSuppressNoLines INIT(= 0); /* skip "No lines in buffer" */
+EXTERN char *netbeansArg INIT(= NULL);	// the -nb[:host:port:passwd] arg
+EXTERN int netbeansFireChanges INIT(= 1); // send buffer changes if != 0
+EXTERN int netbeansForcedQuit INIT(= 0);// don't write modified files
+EXTERN int netbeansReadFile INIT(= 1);	// OK to read from disk if != 0
+EXTERN int netbeansSuppressNoLines INIT(= 0); // skip "No lines in buffer"
 #endif
 
 /*
@@ -1635,14 +1636,14 @@
  * Comms. with the session manager (XSMP)
  */
 #ifdef USE_XSMP
-EXTERN int xsmp_icefd INIT(= -1);   /* The actual connection */
+EXTERN int xsmp_icefd INIT(= -1);   // The actual connection
 #endif
 
-/* For undo we need to know the lowest time possible. */
+// For undo we need to know the lowest time possible.
 EXTERN time_T starttime;
 
 #ifdef STARTUPTIME
-EXTERN FILE *time_fd INIT(= NULL);  /* where to write startup timing */
+EXTERN FILE *time_fd INIT(= NULL);  // where to write startup timing
 #endif
 
 /*
@@ -1654,11 +1655,11 @@
 EXTERN char *vim_ignoredp;
 
 #ifdef FEAT_EVAL
-/* set by alloc_fail(): ID */
+// set by alloc_fail(): ID
 EXTERN alloc_id_T  alloc_fail_id INIT(= aid_none);
-/* set by alloc_fail(), when zero alloc() returns NULL */
+// set by alloc_fail(), when zero alloc() returns NULL
 EXTERN int  alloc_fail_countdown INIT(= -1);
-/* set by alloc_fail(), number of times alloc() returns NULL */
+// set by alloc_fail(), number of times alloc() returns NULL
 EXTERN int  alloc_fail_repeat INIT(= 0);
 
 // flags set by test_override()
@@ -1673,7 +1674,7 @@
 
 #ifdef FEAT_TIMERS
 EXTERN int  did_add_timer INIT(= FALSE);
-EXTERN int  timer_busy INIT(= 0);   /* when timer is inside vgetc() then > 0 */
+EXTERN int  timer_busy INIT(= 0);   // when timer is inside vgetc() then > 0
 #endif
 
 #ifdef FEAT_BEVAL_TERM
@@ -1684,10 +1685,10 @@
 #ifdef FEAT_EVAL
 EXTERN time_T time_for_testing INIT(= 0);
 
-/* Abort conversion to string after a recursion error. */
+// Abort conversion to string after a recursion error.
 EXTERN int  did_echo_string_emsg INIT(= FALSE);
 
-/* Used for checking if local variables or arguments used in a lambda. */
+// Used for checking if local variables or arguments used in a lambda.
 EXTERN int *eval_lavars_used INIT(= NULL);
 #endif
 
diff --git a/src/version.c b/src/version.c
index a12b4e8..653ed83 100644
--- a/src/version.c
+++ b/src/version.c
@@ -774,6 +774,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1793,
+/**/
     1792,
 /**/
     1791,
