diff --git a/src/bufwrite.c b/src/bufwrite.c
index 7cf5724..8db4266 100644
--- a/src/bufwrite.c
+++ b/src/bufwrite.c
@@ -30,7 +30,7 @@
     int		bw_flags;	// FIO_ flags
 #ifdef FEAT_CRYPT
     buf_T	*bw_buffer;	// buffer being written
-    int         bw_finish;      // finish encrypting
+    int		bw_finish;	// finish encrypting
 #endif
     char_u	bw_rest[CONV_RESTLEN]; // not converted bytes
     int		bw_restlen;	// nr of bytes in bw_rest[]
@@ -39,7 +39,7 @@
     size_t	bw_conv_buflen; // size of bw_conv_buf
     int		bw_conv_error;	// set for conversion error
     linenr_T	bw_conv_error_lnum;  // first line with error or zero
-    linenr_T	bw_start_lnum;  // line number at start of buffer
+    linenr_T	bw_start_lnum;	// line number at start of buffer
 #ifdef USE_ICONV
     iconv_t	bw_iconv_fd;	// descriptor for iconv() or -1
 #endif
diff --git a/src/channel.c b/src/channel.c
index 52dfaaf..e3b32ee 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1996,7 +1996,7 @@
 		    && p[3] == ';')
 	    {
 		// '\a' becomes a NL
-	        while (p < res + (len - 1) && *p != '\a')
+		while (p < res + (len - 1) && *p != '\a')
 		    ++p;
 		// BEL is zero width characters, suppress display mistake
 		// ConPTY (after 10.0.18317) requires advance checking
diff --git a/src/cindent.c b/src/cindent.c
index dc9c203..ec88036 100644
--- a/src/cindent.c
+++ b/src/cindent.c
@@ -2181,8 +2181,8 @@
 			  check_linecomment(ml_get(curwin->w_cursor.lnum - 1));
 	    if (linecomment_pos.col != MAXCOL)
 	    {
-	        trypos = &linecomment_pos;
-	        trypos->lnum = curwin->w_cursor.lnum - 1;
+		trypos = &linecomment_pos;
+		trypos->lnum = curwin->w_cursor.lnum - 1;
 	    }
 	}
 	if (trypos  != NULL)
diff --git a/src/crypt.c b/src/crypt.c
index 6a852fa..bed76a9 100644
--- a/src/crypt.c
+++ b/src/crypt.c
@@ -452,8 +452,8 @@
     if (cryptmethods[method_nr].init_fn(
 	state, key, salt, salt_len, seed, seed_len) == FAIL)
     {
-        vim_free(state);
-        return NULL;
+	vim_free(state);
+	return NULL;
     }
     return state;
 }
@@ -692,7 +692,7 @@
     cryptstate_T *state,
     char_u	*buf,
     size_t	len,
-    int         last)
+    int		last)
 {
     cryptmethods[state->method_nr].encode_inplace_fn(state, buf, len,
 								    buf, last);
diff --git a/src/debugger.c b/src/debugger.c
index 87cd398..38d1fb6 100644
--- a/src/debugger.c
+++ b/src/debugger.c
@@ -22,7 +22,7 @@
 
 static char_u *debug_oldval = NULL;	// old and newval for debug expressions
 static char_u *debug_newval = NULL;
-static int     debug_expr   = 0;        // use debug_expr
+static int     debug_expr   = 0;	// use debug_expr
 
     int
 has_watchexpr(void)
diff --git a/src/digraph.c b/src/digraph.c
index cfffc19..c33fc30 100644
--- a/src/digraph.c
+++ b/src/digraph.c
@@ -2337,8 +2337,9 @@
 	flag_list_all = FALSE;
     else
     {
-	int         error = FALSE;
+	int	    error = FALSE;
 	varnumber_T flag = tv_get_number_chk(&argvars[0], &error);
+
 	if (error)
 	    return;
 	flag_list_all = flag ? TRUE : FALSE;
diff --git a/src/edit.c b/src/edit.c
index 9457d25..3da3db6 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -3839,8 +3839,7 @@
 #ifdef FEAT_EVAL
     set_vim_var_string(VV_INSERTMODE,
 		   (char_u *)((State & REPLACE_FLAG) ? "i"
-		          : replaceState == MODE_VREPLACE ? "v"
-						     : "r"), 1);
+			    : replaceState == MODE_VREPLACE ? "v" : "r"), 1);
 #endif
     ins_apply_autocmds(EVENT_INSERTCHANGE);
     if (State & REPLACE_FLAG)
@@ -4895,10 +4894,10 @@
 		// These five lines mean 'tabstop' != 'shiftwidth'
 		&& ((tabstop_count(curbuf->b_p_vts_array) > 1)
 		    || (tabstop_count(curbuf->b_p_vts_array) == 1
-		        && tabstop_first(curbuf->b_p_vts_array)
+			&& tabstop_first(curbuf->b_p_vts_array)
 						       != get_sw_value(curbuf))
-	            || (tabstop_count(curbuf->b_p_vts_array) == 0
-		        && curbuf->b_p_ts != get_sw_value(curbuf))))
+		    || (tabstop_count(curbuf->b_p_vts_array) == 0
+			&& curbuf->b_p_ts != get_sw_value(curbuf))))
 	    && tabstop_count(curbuf->b_p_vsts_array) == 0
 #else
 	    && !(p_sta && ind && curbuf->b_p_ts != get_sw_value(curbuf))
@@ -4924,7 +4923,7 @@
 	temp -= get_nolist_virtcol() % temp;
     }
     else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts != 0)
-	                        // use 'softtabstop' when set
+				// use 'softtabstop' when set
 	temp = tabstop_padding(get_nolist_virtcol(), get_sts_value(),
 						     curbuf->b_p_vsts_array);
     else			// otherwise use 'tabstop'
@@ -4963,7 +4962,7 @@
      */
 #ifdef FEAT_VARTABS
     if (!curbuf->b_p_et && (tabstop_count(curbuf->b_p_vsts_array) > 0
-                            || get_sts_value() > 0
+			    || get_sts_value() > 0
 			    || (p_sta && ind)))
 #else
     if (!curbuf->b_p_et && (get_sts_value() || (p_sta && ind)))
diff --git a/src/evalwindow.c b/src/evalwindow.c
index fd62579..20ac66f 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -155,6 +155,8 @@
 
 /*
  * Find window specified by "vp" in tabpage "tp".
+ * Returns current window if "vp" is number zero.
+ * Returns NULL if not found.
  */
     win_T *
 find_win_by_nr(
@@ -997,28 +999,28 @@
 	    || !win_valid(wp) || !win_valid(targetwin)
 	    || win_valid_popup(wp) || win_valid_popup(targetwin))
     {
-        emsg(_(e_invalid_window_number));
+	emsg(_(e_invalid_window_number));
 	rettv->vval.v_number = -1;
 	return;
     }
 
     if (argvars[2].v_type != VAR_UNKNOWN)
     {
-        dict_T      *d;
-        dictitem_T  *di;
+	dict_T      *d;
+	dictitem_T  *di;
 
-        if (argvars[2].v_type != VAR_DICT || argvars[2].vval.v_dict == NULL)
-        {
-            emsg(_(e_invalid_argument));
-            return;
-        }
+	if (argvars[2].v_type != VAR_DICT || argvars[2].vval.v_dict == NULL)
+	{
+	    emsg(_(e_invalid_argument));
+	    return;
+	}
 
-        d = argvars[2].vval.v_dict;
-        if (dict_get_bool(d, (char_u *)"vertical", FALSE))
-            flags |= WSP_VERT;
-        if ((di = dict_find(d, (char_u *)"rightbelow", -1)) != NULL)
-            flags |= tv_get_bool(&di->di_tv) ? WSP_BELOW : WSP_ABOVE;
-        size = (int)dict_get_number(d, (char_u *)"size");
+	d = argvars[2].vval.v_dict;
+	if (dict_get_bool(d, (char_u *)"vertical", FALSE))
+	    flags |= WSP_VERT;
+	if ((di = dict_find(d, (char_u *)"rightbelow", -1)) != NULL)
+	    flags |= tv_get_bool(&di->di_tv) ? WSP_BELOW : WSP_ABOVE;
+	size = (int)dict_get_number(d, (char_u *)"size");
     }
 
     win_move_into_split(wp, targetwin, size, flags);
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 880bf5a..7e730be 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -2511,7 +2511,7 @@
 #endif
     int		readfile_flags = 0;
     int		did_inc_redrawing_disabled = FALSE;
-    long        *so_ptr = curwin->w_p_so >= 0 ? &curwin->w_p_so : &p_so;
+    long	*so_ptr = curwin->w_p_so >= 0 ? &curwin->w_p_so : &p_so;
 
 #ifdef FEAT_PROP_POPUP
     if (ERROR_IF_TERM_POPUP_WINDOW)
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 7633d6b..a865f65 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2369,7 +2369,7 @@
 	{
 	    ea.line1 = ea.line2;
 	    if (ea.line2 >= LONG_MAX - (n - 1))
-	        ea.line2 = LONG_MAX;  // avoid overflow
+		ea.line2 = LONG_MAX;  // avoid overflow
 	    else
 		ea.line2 += n - 1;
 	    ++ea.addr_count;
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 14489de..cbddfea 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -110,7 +110,7 @@
 {
     // remove trailing \v and the like
     while (len >= 2 && p[len - 2] == '\\'
-                        && vim_strchr((char_u *)"mMvVcCZ", p[len - 1]) != NULL)
+			&& vim_strchr((char_u *)"mMvVcCZ", p[len - 1]) != NULL)
        len -= 2;
 
     // true, if the pattern is empty, or the pattern ends with \| and magic is
diff --git a/src/fileio.c b/src/fileio.c
index 8318452..e99eb9b 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -216,7 +216,7 @@
     int		using_b_ffname;
     int		using_b_fname;
     static char *msg_is_a_directory = N_("is a directory");
-    int         eof;
+    int		eof;
 
     au_did_filetype = FALSE; // reset before triggering any autocommands
 
@@ -4784,7 +4784,7 @@
     int		withattr UNUSED,
     void	*context,
     int		(*checkitem)(void *context, void *item),
-    int         sort)
+    int		sort)
 {
     int			failed = FALSE;
     char_u		*p;
diff --git a/src/filepath.c b/src/filepath.c
index 09c9f4a..56a99e4 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -1648,7 +1648,7 @@
     char_u	*p;
     garray_T	ga;
     int		i;
-    int         sort = READDIR_SORT_BYTE;
+    int		sort = READDIR_SORT_BYTE;
 
     if (rettv_list_alloc(rettv) == FAIL)
 	return;
@@ -1701,7 +1701,7 @@
     char_u	*path;
     garray_T	ga;
     int		i;
-    int         sort = READDIR_SORT_BYTE;
+    int		sort = READDIR_SORT_BYTE;
 
     if (rettv_list_alloc(rettv) == FAIL)
 	return;
diff --git a/src/gui.c b/src/gui.c
index 2544c53..3b0ebac 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -5371,7 +5371,7 @@
     // escape slash and backslash
     p = vim_strsave_escaped(find_text, (char_u *)"/\\");
     if (p != NULL)
-        ga_concat(&ga, p);
+	ga_concat(&ga, p);
     vim_free(p);
     if (flags & FRD_WHOLE_WORD)
 	ga_concat(&ga, (char_u *)"\\>");
@@ -5445,7 +5445,7 @@
 	    // direction
 	    p = vim_strsave_escaped(ga.ga_data, (char_u *)"?");
 	    if (p != NULL)
-	        (void)do_search(NULL, '?', '?', p, 1L, searchflags, NULL);
+		(void)do_search(NULL, '?', '?', p, 1L, searchflags, NULL);
 	    vim_free(p);
 	}
 
diff --git a/src/highlight.c b/src/highlight.c
index 3f46a07..75a310f 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -2356,7 +2356,7 @@
     guicolor_T
 gui_get_color_cmn(char_u *name)
 {
-    int         i;
+    int		i;
     guicolor_T  color;
 
     struct rgbcolor_table_S {
diff --git a/src/if_lua.c b/src/if_lua.c
index 956fd4d..120ed7b 100644
--- a/src/if_lua.c
+++ b/src/if_lua.c
@@ -949,29 +949,29 @@
     li = list_find(l, n);
     if (li == NULL)
     {
-        if (!lua_isnil(L, 3))
-        {
-	   typval_T v;
-	   luaV_checktypval(L, 3, &v, "inserting list item");
-	   if (list_insert_tv(l, &v, li) == FAIL)
-	        luaL_error(L, "failed to add item to list");
-	   clear_tv(&v);
-        }
+	if (!lua_isnil(L, 3))
+	{
+	    typval_T v;
+	    luaV_checktypval(L, 3, &v, "inserting list item");
+	    if (list_insert_tv(l, &v, li) == FAIL)
+		luaL_error(L, "failed to add item to list");
+	    clear_tv(&v);
+	}
     }
     else
     {
-        if (lua_isnil(L, 3)) // remove?
-        {
+	if (lua_isnil(L, 3)) // remove?
+	{
 	    vimlist_remove(l, li, li);
 	    listitem_free(l, li);
-        }
-        else
-        {
+	}
+	else
+	{
 	    typval_T v;
 	    luaV_checktypval(L, 3, &v, "setting list item");
 	    clear_tv(&li->li_tv);
 	    li->li_tv = v;
-        }
+	}
     }
     return 0;
 }
diff --git a/src/indent.c b/src/indent.c
index 0666f0e..06d98f9 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -161,7 +161,7 @@
     int		tabcount;
     colnr_T	tabcol = 0;
     int		t;
-    int         excess;
+    int		excess;
 
     if (vts == NULL || vts[0] == 0)
 	return (col / ts) * ts;
@@ -1804,7 +1804,7 @@
 	&& curbuf->b_p_ts == tabstop_first(new_vts_array))
 	; // not changed
     else if (tabstop_count(curbuf->b_p_vts_array) > 0
-        && tabstop_eq(curbuf->b_p_vts_array, new_vts_array))
+	&& tabstop_eq(curbuf->b_p_vts_array, new_vts_array))
 	; // not changed
     else
 	redraw_curbuf_later(NOT_VALID);
diff --git a/src/insexpand.c b/src/insexpand.c
index 86c6a14..6e38098 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -1966,8 +1966,8 @@
        p = vim_strsave(str);
        if (p != NULL)
        {
-           vim_free(compl_first_match->cp_prev->cp_str);
-           compl_first_match->cp_prev->cp_str = p;
+	   vim_free(compl_first_match->cp_prev->cp_str);
+	   compl_first_match->cp_prev->cp_str = p;
        }
     }
 }
@@ -3176,7 +3176,7 @@
  *   st->first_match_pos - position of the first completion match
  *   st->last_match_pos - position of the last completion match
  *   st->set_match_pos - TRUE if the first match position should be saved to
- *		         avoid loops after the search wraps around.
+ *			    avoid loops after the search wraps around.
  *   st->dict - name of the dictionary or thesaurus file to search
  *   st->dict_f - flag specifying whether "dict" is an exact file name or not
  *
diff --git a/src/job.c b/src/job.c
index 5fbc2fd..31f0260 100644
--- a/src/job.c
+++ b/src/job.c
@@ -530,7 +530,7 @@
 		}
 		// Allow empty string, "winpty", "conpty".
 		if (!(*p == NUL || STRCMP(p, "winpty") == 0
-					          || STRCMP(p, "conpty") == 0))
+						  || STRCMP(p, "conpty") == 0))
 		{
 		    semsg(_(e_invalid_value_for_argument_str), "tty_type");
 		    return FAIL;
diff --git a/src/keymap.h b/src/keymap.h
index e8832d6..6350772 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -276,7 +276,7 @@
     , KE_CANCEL = 102		// return from vgetc()
     , KE_COMMAND = 103		// <Cmd> special key
     , KE_SCRIPT_COMMAND = 104	// <ScriptCmd> special key
-    , KE_S_BS = 105	        // shift + <BS>
+    , KE_S_BS = 105		// shift + <BS>
 };
 
 /*
diff --git a/src/macros.h b/src/macros.h
index 53733c7..aa61d90 100644
--- a/src/macros.h
+++ b/src/macros.h
@@ -147,7 +147,7 @@
 				// see mch_open() comment
 # define mch_fopen(n, p)	fopen(vms_fixfilename(n), (p))
 # define mch_fstat(n, p)	fstat((n), (p))
-# undef HAVE_LSTAT	        // VMS does not have lstat()
+# undef HAVE_LSTAT		// VMS does not have lstat()
 # define mch_stat(n, p)		stat(vms_fixfilename(n), (p))
 #else
 # ifndef MSWIN
@@ -208,7 +208,7 @@
 #define REPLACE_NORMAL(s) (((s) & REPLACE_FLAG) && !((s) & VREPLACE_FLAG))
 
 #ifdef FEAT_ARABIC
-# define ARABIC_CHAR(ch)            (((ch) & 0xFF00) == 0x0600)
+# define ARABIC_CHAR(ch)	    (((ch) & 0xFF00) == 0x0600)
 # define UTF_COMPOSINGLIKE(p1, p2)  utf_composinglike((p1), (p2))
 #else
 # define UTF_COMPOSINGLIKE(p1, p2)  utf_iscomposing(utf_ptr2char(p2))
diff --git a/src/menu.c b/src/menu.c
index 3c4236b..95f6fae 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1638,7 +1638,7 @@
 	    modes = MENU_INSERT_MODE;
 	    break;
 	case 't':
-	    if (*cmd == 'l')            // tlmenu, tlunmenu, tlnoremenu
+	    if (*cmd == 'l')		// tlmenu, tlunmenu, tlnoremenu
 	    {
 		modes = MENU_TERMINAL_MODE;
 		++cmd;
diff --git a/src/misc1.c b/src/misc1.c
index 7a5fecd..9bbe3ad 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -575,7 +575,8 @@
 }
 
 /*
- * Ask for a reply from the user, a 'y' or a 'n'.
+ * Ask for a reply from the user, a 'y' or a 'n', with prompt "str" (which
+ * should have been translated already).
  * No other characters are accepted, the message is repeated until a valid
  * reply is entered or CTRL-C is hit.
  * If direct is TRUE, don't use vgetc() but ui_inchar(), don't get characters
@@ -653,7 +654,7 @@
 	{
 	    buf[i++] = VIsual_mode;
 	    if (restart_VIsual_select)
-	        buf[i++] = 's';
+		buf[i++] = 's';
 	}
     }
     else if (State == MODE_HITRETURN || State == MODE_ASKMORE
diff --git a/src/misc2.c b/src/misc2.c
index a224631..7840ea9 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -647,7 +647,7 @@
     long	lastcol;
     colnr_T	s, e;
     int		retval = FALSE;
-    long        siso = get_sidescrolloff_value();
+    long	siso = get_sidescrolloff_value();
 
     changed_cline_bef_curs();
     lastcol = curwin->w_leftcol + curwin->w_width - curwin_col_off() - 1;
diff --git a/src/mouse.c b/src/mouse.c
index 005b944..af9186d 100644
--- a/src/mouse.c
+++ b/src/mouse.c
@@ -2284,7 +2284,7 @@
 	//	    ^----- column
 	//	 ^-------- code
 	//
-	// \033[<%d;%d;%dm        : mouse release event
+	// \033[<%d;%d;%dm	  : mouse release event
 	//	       ^-- row
 	//	    ^----- column
 	//	 ^-------- code
@@ -2565,9 +2565,9 @@
 	 * Pe, the event code indicates what event caused this report
 	 *    The following event codes are defined:
 	 *    0 - request, the terminal received an explicit request for a
-	 *        locator report, but the locator is unavailable
+	 *	  locator report, but the locator is unavailable
 	 *    1 - request, the terminal received an explicit request for a
-	 *        locator report
+	 *	  locator report
 	 *    2 - left button down
 	 *    3 - left button up
 	 *    4 - middle button down
diff --git a/src/move.c b/src/move.c
index 5e31e71..58bd97f 100644
--- a/src/move.c
+++ b/src/move.c
@@ -185,7 +185,7 @@
 #endif
     int		check_topline = FALSE;
     int		check_botline = FALSE;
-    long        *so_ptr = curwin->w_p_so >= 0 ? &curwin->w_p_so : &p_so;
+    long	*so_ptr = curwin->w_p_so >= 0 ? &curwin->w_p_so : &p_so;
     int		save_so = *so_ptr;
 
     // If there is no valid screen and when the window height is zero just use
@@ -435,7 +435,7 @@
 {
     lineoff_T	loff;
     int		n;
-    long        so = get_scrolloff_value();
+    long	so = get_scrolloff_value();
 
     if (curwin->w_cursor.lnum < curwin->w_topline + so
 #ifdef FEAT_FOLDING
@@ -951,8 +951,8 @@
     colnr_T	startcol;
     colnr_T	endcol;
     colnr_T	prev_skipcol;
-    long        so = get_scrolloff_value();
-    long        siso = get_sidescrolloff_value();
+    long	so = get_scrolloff_value();
+    long	siso = get_sidescrolloff_value();
 
     /*
      * First make sure that w_topline is valid (after moving the cursor).
@@ -1976,7 +1976,7 @@
     linenr_T	old_valid = curwin->w_valid;
     int		old_empty_rows = curwin->w_empty_rows;
     linenr_T	cln;		    // Cursor Line Number
-    long        so = get_scrolloff_value();
+    long	so = get_scrolloff_value();
 
     cln = curwin->w_cursor.lnum;
     if (set_topbot)
@@ -2270,7 +2270,7 @@
     int		above_wanted, below_wanted;
     linenr_T	cln;		    // Cursor Line Number
     int		max_off;
-    long        so = get_scrolloff_value();
+    long	so = get_scrolloff_value();
 
     /*
      * How many lines we would like to have above/below the cursor depends on
@@ -2390,7 +2390,7 @@
     int		retval = OK;
     lineoff_T	loff;
     linenr_T	old_topline = curwin->w_topline;
-    long        so = get_scrolloff_value();
+    long	so = get_scrolloff_value();
 
     if (curbuf->b_ml.ml_line_count == 1)    // nothing to do
     {
diff --git a/src/normal.c b/src/normal.c
index 96f83d3..1baf68a 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -2644,7 +2644,7 @@
     long	old_fdl = curwin->w_p_fdl;
     int		old_fen = curwin->w_p_fen;
 #endif
-    long        siso = get_sidescrolloff_value();
+    long	siso = get_sidescrolloff_value();
 
     if (VIM_ISDIGIT(nchar) && !nv_z_get_count(cap, &nchar))
 	    return;
@@ -6307,7 +6307,7 @@
 	    // the unnamed register is 0
 	    reg = 0;
 
-        VIsual_select_reg = valid_yank_reg(reg, TRUE) ? reg : 0;
+	VIsual_select_reg = valid_yank_reg(reg, TRUE) ? reg : 0;
 	return;
     }
 
diff --git a/src/ops.c b/src/ops.c
index 5137bbb..3940e48 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -625,7 +625,7 @@
 
     if (VIsual_select && oap->is_VIsual)
 	// use register given with CTRL_R, defaults to zero
-        oap->regname = VIsual_select_reg;
+	oap->regname = VIsual_select_reg;
 
 #ifdef FEAT_CLIPBOARD
     adjust_clip_reg(&oap->regname);
@@ -1208,9 +1208,9 @@
 		curwin->w_cursor.col -= (virtcols + 1);
 		for (; virtcols >= 0; virtcols--)
 		{
-                   if ((*mb_char2len)(c) > 1)
+		    if ((*mb_char2len)(c) > 1)
 		       replace_character(c);
-                   else
+		    else
 			PBYTE(curwin->w_cursor, c);
 		   if (inc(&curwin->w_cursor) == -1)
 		       break;
diff --git a/src/option.c b/src/option.c
index 43f584d..559e260 100644
--- a/src/option.c
+++ b/src/option.c
@@ -489,7 +489,7 @@
 # ifdef VIMDLL
 	       (!gui.in_use && !gui.starting) &&
 # endif
-	        GetACP() != GetConsoleCP())
+	       GetACP() != GetConsoleCP())
 	    {
 		char	buf[50];
 
@@ -1016,7 +1016,7 @@
      * Default values depend on shell (cmd.exe is default shell):
      *
      *			    p_shcf	p_sxq
-     * cmd.exe          -   "/c"	"("
+     * cmd.exe		-   "/c"	"("
      * powershell.exe   -   "-Command"	"\""
      * pwsh.exe		-   "-c"	"\""
      * "sh" like shells -   "-c"	"\""
@@ -3342,7 +3342,7 @@
 #ifdef FEAT_VARTABS
 	// Use the first 'vartabstop' value, or 'tabstop' if vts isn't in use.
 	curbuf->b_p_sw = tabstop_count(curbuf->b_p_vts_array) > 0
-	               ? tabstop_first(curbuf->b_p_vts_array)
+		       ? tabstop_first(curbuf->b_p_vts_array)
 		       : curbuf->b_p_ts;
 #else
 	curbuf->b_p_sw = curbuf->b_p_ts;
@@ -5143,12 +5143,12 @@
 	    clear_string_option(&buf->b_p_tc);
 	    buf->b_tc_flags = 0;
 	    break;
-        case PV_SISO:
-            curwin->w_p_siso = -1;
-            break;
-        case PV_SO:
-            curwin->w_p_so = -1;
-            break;
+	case PV_SISO:
+	    curwin->w_p_siso = -1;
+	    break;
+	case PV_SO:
+	    curwin->w_p_so = -1;
+	    break;
 #ifdef FEAT_FIND_ID
 	case PV_DEF:
 	    clear_string_option(&buf->b_p_def);
@@ -5255,8 +5255,8 @@
 	    case PV_AR:   return (char_u *)&(curbuf->b_p_ar);
 	    case PV_TAGS: return (char_u *)&(curbuf->b_p_tags);
 	    case PV_TC:   return (char_u *)&(curbuf->b_p_tc);
-            case PV_SISO: return (char_u *)&(curwin->w_p_siso);
-            case PV_SO:   return (char_u *)&(curwin->w_p_so);
+	    case PV_SISO: return (char_u *)&(curwin->w_p_siso);
+	    case PV_SO:   return (char_u *)&(curwin->w_p_so);
 #ifdef FEAT_FIND_ID
 	    case PV_DEF:  return (char_u *)&(curbuf->b_p_def);
 	    case PV_INC:  return (char_u *)&(curbuf->b_p_inc);
@@ -6514,7 +6514,7 @@
     char_u	*fuzzystr,
     int		*numMatches,
     char_u	***matches,
-    int         can_fuzzy)
+    int		can_fuzzy)
 {
     int		num_normal = 0;	    // Nr of matching non-term-code settings
     int		num_term = 0;	    // Nr of matching terminal code settings
@@ -6579,7 +6579,7 @@
 	    }
 	    else if (!fuzzy && options[opt_idx].shortname != NULL
 			&& vim_regexec(regmatch,
-                             (char_u *)options[opt_idx].shortname, (colnr_T)0))
+			     (char_u *)options[opt_idx].shortname, (colnr_T)0))
 	    {
 		// Compare against the abbreviated option name (for regular
 		// expression match). Fuzzy matching (previous if) already
diff --git a/src/option.h b/src/option.h
index fdbe926..106593f 100644
--- a/src/option.h
+++ b/src/option.h
@@ -267,8 +267,8 @@
 #define SHM_COMPLETIONMENU  'c'		// completion menu messages
 #define SHM_RECORDING	'q'		// short recording message
 #define SHM_FILEINFO	'F'		// no file info messages
-#define SHM_SEARCHCOUNT  'S'	        // search stats: '[1/10]'
-#define SHM_POSIX       "AS"            // POSIX value
+#define SHM_SEARCHCOUNT  'S'		// search stats: '[1/10]'
+#define SHM_POSIX       "AS"		// POSIX value
 #define SHM_ALL		"rmfixlnwaWtToOsAIcqFS" // all possible flags for 'shm'
 
 // characters for p_go:
diff --git a/src/os_unix.c b/src/os_unix.c
index a51f034..b786f8d 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -1778,10 +1778,10 @@
 {
     if (eap->arg != NULL && STRLEN(eap->arg) > 0)
     {
-        if (xterm_display_allocated)
-            vim_free(xterm_display);
-        xterm_display = (char *)vim_strsave(eap->arg);
-        xterm_display_allocated = TRUE;
+	if (xterm_display_allocated)
+	    vim_free(xterm_display);
+	xterm_display = (char *)vim_strsave(eap->arg);
+	xterm_display_allocated = TRUE;
     }
     smsg(_("restoring display %s"), xterm_display == NULL
 		    ? (char *)mch_getenv((char_u *)"DISPLAY") : xterm_display);
@@ -7210,7 +7210,7 @@
     {
 	if (p_verbose > 0)
 	    smsg_attr(HL_ATTR(HLF_W),
-		        _("Could not load gpm library: %s"), dlerror());
+			       _("Could not load gpm library: %s"), dlerror());
 	return FAIL;
     }
 
diff --git a/src/search.c b/src/search.c
index c32475c..cd5166f 100644
--- a/src/search.c
+++ b/src/search.c
@@ -2810,8 +2810,8 @@
 #endif
     colnr_T	save_dollar_vcol;
     char_u	*p;
-    long        *so = curwin->w_p_so >= 0 ? &curwin->w_p_so : &p_so;
-    long        *siso = curwin->w_p_siso >= 0 ? &curwin->w_p_siso : &p_siso;
+    long	*so = curwin->w_p_so >= 0 ? &curwin->w_p_so : &p_so;
+    long	*siso = curwin->w_p_siso >= 0 ? &curwin->w_p_siso : &p_siso;
 
     /*
      * Only show match for chars in the 'matchpairs' option.
@@ -4189,14 +4189,14 @@
 	    li = list_find(di->di_tv.vval.v_list, 1L);
 	    if (li != NULL)
 	    {
-	        pos.col = tv_get_number_chk(&li->li_tv, &error) - 1;
+		pos.col = tv_get_number_chk(&li->li_tv, &error) - 1;
 		if (error)
 		    return;
 	    }
 	    li = list_find(di->di_tv.vval.v_list, 2L);
 	    if (li != NULL)
 	    {
-	        pos.coladd = tv_get_number_chk(&li->li_tv, &error);
+		pos.coladd = tv_get_number_chk(&li->li_tv, &error);
 		if (error)
 		    return;
 	    }
diff --git a/src/session.c b/src/session.c
index 795438c..bc25998 100644
--- a/src/session.c
+++ b/src/session.c
@@ -972,13 +972,13 @@
     // Restore 'shortmess'.
     if (ssop_flags & SSOP_OPTIONS)
     {
-        if (fprintf(fd, "set shortmess=%s", p_shm) < 0 || put_eol(fd) == FAIL)
-            goto fail;
+	if (fprintf(fd, "set shortmess=%s", p_shm) < 0 || put_eol(fd) == FAIL)
+	    goto fail;
     }
     else
     {
-        if (put_line(fd, "let &shortmess = s:shortmess_save") == FAIL)
-            goto fail;
+	if (put_line(fd, "let &shortmess = s:shortmess_save") == FAIL)
+	    goto fail;
     }
 
     if (restore_height_width)
diff --git a/src/spellsuggest.c b/src/spellsuggest.c
index 73ea210..ecb5455 100644
--- a/src/spellsuggest.c
+++ b/src/spellsuggest.c
@@ -3133,11 +3133,11 @@
 	    // TODO: also soundfold the next words, so that we can try joining
 	    // and splitting
 #ifdef SUGGEST_PROFILE
-	prof_init();
+	    prof_init();
 #endif
 	    suggest_trie_walk(su, lp, salword, TRUE);
 #ifdef SUGGEST_PROFILE
-	prof_report("soundalike");
+	    prof_report("soundalike");
 #endif
 	}
     }
diff --git a/src/structs.h b/src/structs.h
index fd1a925..6c0179d 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1650,7 +1650,7 @@
 # if defined(FEAT_LUA)
     cfunc_T     uf_cb;		// callback function for cfunc
     cfunc_free_T uf_cb_free;    // callback function to free cfunc
-    void        *uf_cb_state;   // state of uf_cb
+    void	*uf_cb_state;   // state of uf_cb
 # endif
 
     garray_T	uf_lines;	// function lines
@@ -2080,15 +2080,15 @@
  */
 typedef enum {
     ETYPE_TOP,		    // toplevel
-    ETYPE_SCRIPT,           // sourcing script, use es_info.sctx
-    ETYPE_UFUNC,            // user function, use es_info.ufunc
-    ETYPE_AUCMD,            // autocomand, use es_info.aucmd
-    ETYPE_MODELINE,         // modeline, use es_info.sctx
-    ETYPE_EXCEPT,           // exception, use es_info.exception
-    ETYPE_ARGS,             // command line argument
-    ETYPE_ENV,              // environment variable
-    ETYPE_INTERNAL,         // internal operation
-    ETYPE_SPELL,            // loading spell file
+    ETYPE_SCRIPT,	    // sourcing script, use es_info.sctx
+    ETYPE_UFUNC,	    // user function, use es_info.ufunc
+    ETYPE_AUCMD,	    // autocomand, use es_info.aucmd
+    ETYPE_MODELINE,	    // modeline, use es_info.sctx
+    ETYPE_EXCEPT,	    // exception, use es_info.exception
+    ETYPE_ARGS,		    // command line argument
+    ETYPE_ENV,		    // environment variable
+    ETYPE_INTERNAL,	    // internal operation
+    ETYPE_SPELL,	    // loading spell file
 } etype_T;
 
 typedef struct {
diff --git a/src/tag.c b/src/tag.c
index a669704..1fe2eef 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -280,7 +280,7 @@
     int		skip_msg = FALSE;
     char_u	*buf_ffname = curbuf->b_ffname;	    // name to use for
 						    // priority computation
-    int         use_tfu = 1;
+    int		use_tfu = 1;
 
     // remember the matches for the last used tag
     static int		num_matches = 0;
@@ -1422,8 +1422,8 @@
     pos_T       save_pos;
     list_T      *taglist;
     listitem_T  *item;
-    int         ntags = 0;
-    int         result = FAIL;
+    int		ntags = 0;
+    int		result = FAIL;
     typval_T	args[4];
     typval_T	rettv;
     char_u      flagString[4];
@@ -1820,7 +1820,7 @@
     static int
 findtags_apply_tfu(findtags_state_T *st, char_u *pat, char_u *buf_ffname)
 {
-    int         use_tfu = ((st->flags & TAG_NO_TAGFUNC) == 0);
+    int		use_tfu = ((st->flags & TAG_NO_TAGFUNC) == 0);
     int		retval;
 
     if (!use_tfu || tfu_in_use || *curbuf->b_p_tfu == NUL)
diff --git a/src/term.c b/src/term.c
index f34b642..ef3cf94 100644
--- a/src/term.c
+++ b/src/term.c
@@ -688,7 +688,7 @@
     {K_K8,		"\316\372"},
     {K_K9,		"\316\376"},
     {K_BS,		"\316x"},
-    {K_S_BS,            "\316y"},
+    {K_S_BS,		"\316y"},
 # endif
 
 # if defined(VMS) || defined(ALL_BUILTIN_TCAPS)
diff --git a/src/terminal.c b/src/terminal.c
index a33a3a3..703966a 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -4442,15 +4442,15 @@
     // remove HOSTNAME to get PWD
     while (*pos != '/' && offset < (int)frag->len)
     {
-        offset += 1;
-        pos += 1;
+	offset += 1;
+	pos += 1;
     }
 
     if (offset >= (int)frag->len)
     {
-        semsg(_(e_failed_to_extract_pwd_from_str_check_your_shell_config),
+	semsg(_(e_failed_to_extract_pwd_from_str_check_your_shell_config),
 								    frag->str);
-        return;
+	return;
     }
 
     new_dir = alloc(frag->len - offset + 1);
diff --git a/src/testdir/test_cursorline.vim b/src/testdir/test_cursorline.vim
index e5b2113..96ff300 100644
--- a/src/testdir/test_cursorline.vim
+++ b/src/testdir/test_cursorline.vim
@@ -298,7 +298,7 @@
 
   let lines =<< trim END
       call setline(1, 'aa bb cc dd ee ff gg hh ii jj kk ll mm' ..
-      \ ' nn oo pp qq rr ss tt uu vv ww xx yy zz')
+                    \ ' nn oo pp qq rr ss tt uu vv ww xx yy zz')
       set nowrap
       " The following makes the cursor apparent on the screen dump
       set sidescroll=1 cursorcolumn
diff --git a/src/textformat.c b/src/textformat.c
index aadc863..e15081a 100644
--- a/src/textformat.c
+++ b/src/textformat.c
@@ -176,7 +176,7 @@
 		    // Increment count of how many whitespace chars in this
 		    // group; we only need to know if it's more than one.
 		    if (wcc < 2)
-		        wcc++;
+			wcc++;
 		}
 		if (curwin->w_cursor.col == 0 && WHITECHAR(cc))
 		    break;		// only spaces in front of text
diff --git a/src/typval.c b/src/typval.c
index afe4e62..ba98f1e 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -971,7 +971,7 @@
 	case VAR_SPECIAL:
 	    STRCPY(buf, get_var_special_name(varp->vval.v_number));
 	    return buf;
-        case VAR_BLOB:
+	case VAR_BLOB:
 	    emsg(_(e_using_blob_as_string));
 	    break;
 	case VAR_JOB:
diff --git a/src/ui.c b/src/ui.c
index a6cee80..08664bf 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -199,10 +199,10 @@
      * while (not timed out)
      * {
      *     if (any-timer-triggered)
-     *        invoke-timer-callback;
+     *	      invoke-timer-callback;
      *     wait-for-character();
      *     if (character available)
-     *        break;
+     *	      break;
      * }
      *
      * wait-for-character() does:
@@ -210,13 +210,13 @@
      * {
      *     Wait for event;
      *     if (something on channel)
-     *        read/write channel;
-     *     else if (resized)
-     *        handle_resize();
-     *     else if (system event)
-     *        deal-with-system-event;
-     *     else if (character available)
-     *        break;
+     *	      read/write channel;
+     *	   else if (resized)
+     *	      handle_resize();
+     *	   else if (system event)
+     *	      deal-with-system-event;
+     *	   else if (character available)
+     *	      break;
      * }
      *
      */
diff --git a/src/userfunc.c b/src/userfunc.c
index 081bac1..8d82beb 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2511,7 +2511,7 @@
 	    goto failed;
 	if (fill_partial_and_closure(pt, ufunc, ectx) == FAIL)
 	{
-            vim_free(pt);
+	    vim_free(pt);
 	    goto failed;
 	}
 	ufunc->uf_partial = pt;
diff --git a/src/version.c b/src/version.c
index 54eb652..c069781 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4928,
+/**/
     4927,
 /**/
     4926,
diff --git a/src/vim.h b/src/vim.h
index f17da41..4e213b2 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1375,8 +1375,8 @@
 				// entering its window
     EVENT_TERMRESPONSE,		// after setting "v:termresponse"
     EVENT_TEXTCHANGED,		// text was modified not in Insert mode
-    EVENT_TEXTCHANGEDI,         // text was modified in Insert mode
-    EVENT_TEXTCHANGEDP,         // TextChangedI with popup menu visible
+    EVENT_TEXTCHANGEDI,		// text was modified in Insert mode
+    EVENT_TEXTCHANGEDP,		// TextChangedI with popup menu visible
     EVENT_TEXTYANKPOST,		// after some text was yanked
     EVENT_USER,			// user defined autocommand
     EVENT_VIMENTER,		// after starting Vim
diff --git a/src/vim9.h b/src/vim9.h
index 3b14ffc..1b5a58b 100644
--- a/src/vim9.h
+++ b/src/vim9.h
@@ -500,7 +500,7 @@
 
 // Number of entries used by stack frame for a function call.
 // - ec_dfunc_idx:   function index
-// - ec_iidx:        instruction index
+// - ec_iidx:	     instruction index
 // - ec_instr:       instruction list pointer
 // - ec_outer:	     stack used for closures
 // - funclocal:	     function-local data
diff --git a/src/vim9compile.c b/src/vim9compile.c
index e95340c..bdaf1ed 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1041,7 +1041,7 @@
 	// Skip the opening {.
 	block_start = skipwhite(p + 1);
 	block_end = block_start;
-	if (*block_start != NUL &&skip_expr(&block_end, NULL) == FAIL)
+	if (*block_start != NUL && skip_expr(&block_end, NULL) == FAIL)
 	    return FAIL;
 	block_end = skipwhite(block_end);
 	// The block must be closed by a }.
diff --git a/src/vim9execute.c b/src/vim9execute.c
index eb6dc28..5644f34 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -64,13 +64,13 @@
 //	  arg2		second argument from caller (if present)
 //	  extra_arg1	any missing optional argument default value
 // FP ->  cur_func	calling function
-//        current	previous instruction pointer
-//        frame_ptr	previous Frame Pointer
-//        var1		space for local variable
-//        var2		space for local variable
-//        ....		fixed space for max. number of local variables
-//        temp		temporary values
-//        ....		flexible space for temporary values (can grow big)
+//	  current	previous instruction pointer
+//	  frame_ptr	previous Frame Pointer
+//	  var1		space for local variable
+//	  var2		space for local variable
+//	  ....		fixed space for max. number of local variables
+//	  temp		temporary values
+//	  ....		flexible space for temporary values (can grow big)
 
 /*
  * Execution context.
@@ -6162,7 +6162,7 @@
 							 iptr->isn_arg.string);
 			    break;
 	    case ISN_PUT:
-	        if (iptr->isn_arg.put.put_lnum == LNUM_VARIABLE_RANGE_ABOVE)
+		if (iptr->isn_arg.put.put_lnum == LNUM_VARIABLE_RANGE_ABOVE)
 		    smsg("%s%4d PUT %c above range",
 				  pfx, current, iptr->isn_arg.put.put_regname);
 		else if (iptr->isn_arg.put.put_lnum == LNUM_VARIABLE_RANGE)
diff --git a/src/window.c b/src/window.c
index b4f8c1d..fca0eea 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6371,8 +6371,8 @@
     // - window height is sufficient to display the whole buffer and first line
     //   is visible.
     if (height > 0
-        && (!wp->w_p_scb || wp == curwin)
-        && (height < wp->w_buffer->b_ml.ml_line_count || wp->w_topline > 1))
+	   && (!wp->w_p_scb || wp == curwin)
+	   && (height < wp->w_buffer->b_ml.ml_line_count || wp->w_topline > 1))
     {
 	/*
 	 * Find a value for w_topline that shows the cursor at the same
