diff --git a/src/GvimExt/Make_ming.mak b/src/GvimExt/Make_ming.mak
index 5cde184..0ebe08a 100644
--- a/src/GvimExt/Make_ming.mak
+++ b/src/GvimExt/Make_ming.mak
@@ -3,7 +3,7 @@
 # To be used with MingW and Cygwin.
 #
 # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
-# Now it is allocated dymanically by the linker by evaluating all DLLs
+# Now it is allocated dynamically by the linker by evaluating all DLLs
 # already loaded in memory. The binary image contains as well information
 # for automatic pseudo-rebasing, if needed by the system. ALV 2004-02-29
 
diff --git a/src/INSTALLpc.txt b/src/INSTALLpc.txt
index 104cb8e..410abb6 100644
--- a/src/INSTALLpc.txt
+++ b/src/INSTALLpc.txt
@@ -72,7 +72,7 @@
 
 Visual Studio installed a batch file called vcvarsall.bat, which you must
 run to set up paths for nmake and MSVC.  We provide a batch file
-"msvc2015.bat" for this.  You may need to edit it if you didn't instal Visual
+"msvc2015.bat" for this.  You may need to edit it if you didn't install Visual
 Studio in the standard location.
 If you use VS2017 or later, you can use "msvc-latest.bat" (or "msvc2017.bat"
 and so on for the specific version).  You must specify the architecture (e.g.
diff --git a/src/blob.c b/src/blob.c
index 311b87e..bfc7723 100644
--- a/src/blob.c
+++ b/src/blob.c
@@ -716,7 +716,7 @@
 }
 
 /*
- * Implementaion of reduce() for Blob "argvars[0]" using the function "expr"
+ * Implementation of reduce() for Blob "argvars[0]" using the function "expr"
  * starting with the optional initial value "argvars[2]" and return the result
  * in "rettv".
  */
diff --git a/src/bufwrite.c b/src/bufwrite.c
index f3adcc3..18448dc 100644
--- a/src/bufwrite.c
+++ b/src/bufwrite.c
@@ -1475,7 +1475,7 @@
 			{
 			    if (buf_write_bytes(&write_info) == FAIL)
 			    {
-				errmsg = (char_u *)_(e_canot_write_to_backup_file_add_bang_to_override);
+				errmsg = (char_u *)_(e_cant_write_to_backup_file_add_bang_to_override);
 				break;
 			    }
 			    ui_breakcheck();
diff --git a/src/change.c b/src/change.c
index bcdb703..7796d29 100644
--- a/src/change.c
+++ b/src/change.c
@@ -1378,7 +1378,7 @@
  * "second_line_indent": indent for after ^^D in Insert mode or if flag
  *			  OPENLINE_COM_LIST
  * "did_do_comment" is set to TRUE when intentionally putting the comment
- * leader in fromt of the new line.
+ * leader in front of the new line.
  *
  * Return OK for success, FAIL for failure
  */
diff --git a/src/charset.c b/src/charset.c
index 0e93077..fe1569c 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -2291,7 +2291,7 @@
 	}
 	else
 	{
-	    // prevent a larg unsigned number to become negative
+	    // prevent a large unsigned number to become negative
 	    if (un > VARNUM_MAX)
 		un = VARNUM_MAX;
 	    *nptr = (varnumber_T)un;
diff --git a/src/config.h.in b/src/config.h.in
index ef0637a..b77418c 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -135,7 +135,7 @@
 /* Define if struct sigcontext is present */
 #undef HAVE_SIGCONTEXT
 
-/* Define if touuper/tolower only work on lower/upercase characters */
+/* Define if toupper/tolower only work on lower/uppercase characters */
 #undef BROKEN_TOUPPER
 
 /* Define if stat() ignores a trailing slash */
diff --git a/src/dict.c b/src/dict.c
index 63b30e0..82c31de 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -1016,7 +1016,7 @@
 	    item = dict_find(d, key, -1);
 	    if (item != NULL)
 	    {
-		semsg(_(e_duplicate_key_in_dicitonary), key);
+		semsg(_(e_duplicate_key_in_dictionary), key);
 		clear_tv(&tvkey);
 		clear_tv(&tv);
 		goto failret;
diff --git a/src/drawline.c b/src/drawline.c
index e849f9d..632fd74 100644
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -2041,7 +2041,7 @@
 				    text_prop_follows = TRUE;
 
 				// When 'wrap' is off then for "below" we need
-				// to start a new line explictly.
+				// to start a new line explicitly.
 				if (start_line)
 				{
 				    draw_screen_line(wp, &wlv);
diff --git a/src/errors.h b/src/errors.h
index d3bca1a..ea33b04 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -1056,7 +1056,7 @@
 	INIT(= N_("E432: Tags file not sorted: %s"));
 EXTERN char e_no_tags_file[]
 	INIT(= N_("E433: No tags file"));
-EXTERN char e_canot_find_tag_pattern[]
+EXTERN char e_cannot_find_tag_pattern[]
 	INIT(= N_("E434: Can't find tag pattern"));
 EXTERN char e_couldnt_find_tag_just_guessing[]
 	INIT(= N_("E435: Couldn't find tag, just guessing!"));
@@ -1261,7 +1261,7 @@
 	INIT(= N_("is read-only (add ! to override)"));
 EXTERN char e_str_is_read_only_add_bang_to_override[]
 	INIT(= N_("E505: \"%s\" is read-only (add ! to override)"));
-EXTERN char e_canot_write_to_backup_file_add_bang_to_override[]
+EXTERN char e_cant_write_to_backup_file_add_bang_to_override[]
 	INIT(= N_("E506: Can't write to backup file (add ! to override)"));
 EXTERN char e_close_error_for_backup_file_add_bang_to_write_anyway[]
 	INIT(= N_("E507: Close error for backup file (add ! to write anyway)"));
@@ -1808,7 +1808,7 @@
 	INIT(= N_("E719: Cannot slice a Dictionary"));
 EXTERN char e_missing_colon_in_dictionary[]
 	INIT(= N_("E720: Missing colon in Dictionary: %s"));
-EXTERN char e_duplicate_key_in_dicitonary[]
+EXTERN char e_duplicate_key_in_dictionary[]
 	INIT(= N_("E721: Duplicate key in Dictionary: \"%s\""));
 EXTERN char e_missing_comma_in_dictionary[]
 	INIT(= N_("E722: Missing comma in Dictionary: %s"));
@@ -2890,7 +2890,7 @@
 #endif
 EXTERN char e_cmd_mapping_must_end_with_cr_before_second_cmd[]
 	INIT(= N_("E1136: <Cmd> mapping must end with <CR> before second <Cmd>"));
-EXTERN char e_cmd_maping_must_not_include_str_key[]
+EXTERN char e_cmd_mapping_must_not_include_str_key[]
 	INIT(= N_("E1137: <Cmd> mapping must not include %s key"));
 #ifdef FEAT_EVAL
 EXTERN char e_using_bool_as_number[]
@@ -3262,7 +3262,7 @@
 #ifdef FEAT_EVAL
 EXTERN char e_bitshift_ops_must_be_number[]
 	INIT(= N_("E1282: Bitshift operands must be numbers"));
-EXTERN char e_bitshift_ops_must_be_postive[]
+EXTERN char e_bitshift_ops_must_be_positive[]
 	INIT(= N_("E1283: Bitshift amount must be a positive number"));
 #endif
 #if defined(FEAT_PROP_POPUP)
diff --git a/src/eval.c b/src/eval.c
index 062fab0..b815113 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3269,7 +3269,7 @@
 	    if (var2.v_type != VAR_NUMBER)
 		emsg(_(e_bitshift_ops_must_be_number));
 	    else
-		emsg(_(e_bitshift_ops_must_be_postive));
+		emsg(_(e_bitshift_ops_must_be_positive));
 	    clear_tv(rettv);
 	    clear_tv(&var2);
 	    return FAIL;
diff --git a/src/getchar.c b/src/getchar.c
index 5d0c994..57e184b 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -3942,7 +3942,7 @@
 		ga_concat(&line_ga, (char_u *)"<SNR>");
 	    else
 	    {
-		semsg(e_cmd_maping_must_not_include_str_key,
+		semsg(e_cmd_mapping_must_not_include_str_key,
 					       get_special_key_name(c1, cmod));
 		aborted = TRUE;
 	    }
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 58b7931..25685dd 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -5772,7 +5772,7 @@
      * String received to output to screen can print using pre-cached glyphs
      * (fast) or Pango (slow). Ligatures and multibype utf-8 must use Pango.
      * Since we receive mixed content string, split it into logical segments
-     * that are guaranteed to go trough glyphs as much as possible. Since
+     * that are guaranteed to go through glyphs as much as possible. Since
      * single ligature char prints as ascii, print it that way.
      */
     len_sum = 0;    // return value needs to add up since we are printing
@@ -5781,7 +5781,7 @@
     cs = s;
     // First char decides starting needs_pango mode, 0=ascii 1=utf8/ligatures.
     // Even if it is ligature char, two chars or more make ligature.
-    // Ascii followed by utf8 is also going trough pango.
+    // Ascii followed by utf8 is also going through pango.
     is_utf8 = (*cs & 0x80);
     is_ligature = gui.ligatures_map[*cs] && (len > 1);
     if (is_ligature)
@@ -5808,7 +5808,7 @@
 	    }
 	    is_utf8 = *(cs + slen) & 0x80;
 	    // ascii followed by utf8 could be combining
-	    // if so send it trough pango
+	    // if so send it through pango
 	    if ((!is_utf8) && ((slen + 1) < (len - byte_sum)))
 		is_utf8 = (*(cs + slen + 1) & 0x80);
 	    should_need_pango = (is_ligature || is_utf8);
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 2dc54bf..8424c6c 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -1973,7 +1973,7 @@
 	if (dead_key != DEAD_KEY_OFF)
 	{
 	    /*
-	     * Expell the dead key pressed with Ctrl in a special way.
+	     * Expel the dead key pressed with Ctrl in a special way.
 	     *
 	     * After dead key was pressed with Ctrl in some cases, ESC was
 	     * artificially injected and handled by _OnChar(), now we are
@@ -2160,7 +2160,7 @@
 		   )
 		{
 		    // post WM_CHAR='[' - which will be interpreted with CTRL
-		    // stil hold as ESC
+		    // still hold as ESC
 		    PostMessageW(msg.hwnd, WM_CHAR, '[', msg.lParam);
 		    // ask _OnChar() to not touch this state, wait for next key
 		    // press and maintain knowledge that we are "poisoned" with
diff --git a/src/highlight.c b/src/highlight.c
index d0d6fde..f937e08 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -634,7 +634,7 @@
 /*
  * Link highlight group 'from_hg' to 'to_hg'.
  * 'dodefault' is set to TRUE for ":highlight default link".
- * 'forceit' is set to TRUE for ":higlight! link"
+ * 'forceit' is set to TRUE for ":highlight! link"
  * 'init' is set to TRUE when initializing all the highlight groups.
  */
     static void
diff --git a/src/message_test.c b/src/message_test.c
index 6f71aff..21ec4db 100644
--- a/src/message_test.c
+++ b/src/message_test.c
@@ -154,7 +154,7 @@
 /*
  * Test vim_snprintf() with a focus on checking that truncation is
  * correct when buffer is small, since it cannot be tested from
- * vim scrip tests. Check that:
+ * vim script tests. Check that:
  * - no buffer overflows happens (with valgrind or asan)
  * - output string is always NUL terminated.
  *
diff --git a/src/os_macosx.m b/src/os_macosx.m
index 84a0def..33d29b6 100644
--- a/src/os_macosx.m
+++ b/src/os_macosx.m
@@ -334,7 +334,7 @@
  *
  * The limitations and differences include:
  *
- * - The flags argument is ignored. The supplied new_value is therfore
+ * - The flags argument is ignored. The supplied new_value is therefore
  *   always treated as a relative time.
  * - The old_value argument is ignored.
  */
diff --git a/src/os_win32.c b/src/os_win32.c
index ca1799f..fc6ea5e 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -1307,7 +1307,7 @@
     else
 	direction = zDelta >= 0 ? KE_MOUSEDOWN : KE_MOUSEUP;
 
-    // Decode the win32 console key modifers into Vim mouse modifers.
+    // Decode the win32 console key modifiers into Vim mouse modifiers.
     if (pmer->dwControlKeyState & SHIFT_PRESSED)
 	modifiers |= MOD_MASK_SHIFT; // MOUSE_SHIFT;
     if (pmer->dwControlKeyState & (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))
diff --git a/src/proto/usercmd.pro b/src/proto/usercmd.pro
index 47ef6f0..d0cd2a3 100644
--- a/src/proto/usercmd.pro
+++ b/src/proto/usercmd.pro
@@ -18,7 +18,7 @@
 void ex_comclear(exarg_T *eap);
 void uc_clear(garray_T *gap);
 void ex_delcommand(exarg_T *eap);
-size_t add_win_cmd_modifers(char_u *buf, cmdmod_T *cmod, int *multi_mods);
+size_t add_win_cmd_modifiers(char_u *buf, cmdmod_T *cmod, int *multi_mods);
 size_t produce_cmdmods(char_u *buf, cmdmod_T *cmod, int quote);
 void do_ucmd(exarg_T *eap);
 /* vim: set ft=c : */
diff --git a/src/proto/vim9execute.pro b/src/proto/vim9execute.pro
index f8e8106..81f762e 100644
--- a/src/proto/vim9execute.pro
+++ b/src/proto/vim9execute.pro
@@ -4,7 +4,7 @@
 int funcstack_check_refcount(funcstack_T *funcstack);
 int set_ref_in_funcstacks(int copyID);
 int in_def_function(void);
-ectx_T *clear_currrent_ectx(void);
+ectx_T *clear_current_ectx(void);
 void restore_current_ectx(ectx_T *ectx);
 int add_defer_function(char_u *name, int argcount, typval_T *argvars);
 char_u *char_from_string(char_u *str, varnumber_T index);
diff --git a/src/regexp.c b/src/regexp.c
index b15dc3a..e29e6ea 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -1890,7 +1890,7 @@
  * vim_regexec_multi() match.
  *
  * If "flags" has REGSUB_COPY really copy into "dest[destlen]".
- * Oterwise nothing is copied, only compue the length of the result.
+ * Otherwise nothing is copied, only compute the length of the result.
  *
  * If "flags" has REGSUB_MAGIC then behave like 'magic' is set.
  *
diff --git a/src/register.c b/src/register.c
index 21ed436..bc687c0 100644
--- a/src/register.c
+++ b/src/register.c
@@ -1857,7 +1857,7 @@
 
 	    shortline = (vcol < col) || (vcol == col && !*ptr) ;
 
-	    if (vcol < col) // line too short, padd with spaces
+	    if (vcol < col) // line too short, pad with spaces
 		bd.startspaces = col - vcol;
 	    else if (vcol > col)
 	    {
diff --git a/src/screen.c b/src/screen.c
index f8fca8a..68142f4 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -2287,7 +2287,7 @@
     if (off + 1 >= (unsigned)(screen_Rows * screen_Columns))
 	return;
 
-    // Outputting the last character on the screen may scrollup the screen.
+    // Outputting the last character on the screen may scroll the screen up.
     // Don't to it!  Mark the character invalid (update it when scrolled up)
     if (row == screen_Rows - 1 && col >= screen_Columns - 2)
     {
@@ -2734,7 +2734,7 @@
     if (enc_dbcs == DBCS_JPNU)
 	new_ScreenLines2 = LALLOC_MULT(schar_T, (Rows + 1) * Columns);
     new_ScreenAttrs = LALLOC_MULT(sattr_T, (Rows + 1) * Columns);
-    // Clear ScreenCols to avoid a warning for unitialized memory in
+    // Clear ScreenCols to avoid a warning for uninitialized memory in
     // jump_to_mouse().
     new_ScreenCols = LALLOC_CLEAR_MULT(colnr_T, (Rows + 1) * Columns);
     new_LineOffset = LALLOC_MULT(unsigned, Rows);
diff --git a/src/scriptfile.c b/src/scriptfile.c
index 9623ea0..d348631 100644
--- a/src/scriptfile.c
+++ b/src/scriptfile.c
@@ -1201,7 +1201,7 @@
     int	    multi_mods = 0;
 
     buf[0] = NUL;
-    (void)add_win_cmd_modifers(buf, &cmdmod, &multi_mods);
+    (void)add_win_cmd_modifiers(buf, &cmdmod, &multi_mods);
 
     vim_setenv((char_u *)"OPTWIN_CMD", buf);
     cmd_source((char_u *)SYS_OPTWIN_FILE, NULL);
diff --git a/src/spell.c b/src/spell.c
index 3196ae7..508c3ba 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -111,7 +111,7 @@
     win_T	*mi_win;		// buffer being checked
 
     // for NOBREAK
-    int		mi_result2;		// "mi_resul" without following word
+    int		mi_result2;		// "mi_result" without following word
     char_u	*mi_end2;		// "mi_end" without following word
 } matchinf_T;
 
diff --git a/src/spell.h b/src/spell.h
index a085b0b..be11c9f 100644
--- a/src/spell.h
+++ b/src/spell.h
@@ -17,10 +17,10 @@
 # define SPELL_PRINTTREE
 #endif
 
-// Use SPELL_COMPRESS_ALLWAYS for debugging: compress the word tree after
+// Use SPELL_COMPRESS_ALWAYS for debugging: compress the word tree after
 // adding a word.  Only use it for small word lists!
 #if 0
-# define SPELL_COMPRESS_ALLWAYS
+# define SPELL_COMPRESS_ALWAYS
 #endif
 
 // Use DEBUG_TRIEWALK to print the changes made in suggest_trie_walk() for a
diff --git a/src/spellfile.c b/src/spellfile.c
index 3c934fc..b5db526 100644
--- a/src/spellfile.c
+++ b/src/spellfile.c
@@ -4588,7 +4588,7 @@
      *    (si_compress_cnt == 1) and the number of free nodes drops below the
      *    maximum word length.
      */
-#ifndef SPELL_COMPRESS_ALLWAYS
+#ifndef SPELL_COMPRESS_ALWAYS
     if (spin->si_compress_cnt == 1
 	    ? spin->si_free_count < MAXWLEN
 	    : spin->si_blocks_cnt >= compress_start)
diff --git a/src/structs.h b/src/structs.h
index dfcdcfb..1a7a46c 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -823,7 +823,7 @@
 					// text is truncated
 #define TP_FLAG_START_INCL	0x100	// "start_incl" copied from proptype
 
-#define PROP_TEXT_MIN_CELLS	4	// minimun number of cells to use for
+#define PROP_TEXT_MIN_CELLS	4	// minimum number of cells to use for
 					// the text, even when truncating
 
 /*
@@ -1884,7 +1884,7 @@
 #define IMP_FLAGS_AUTOLOAD	4   // script still needs to be loaded
 
 /*
- * Info about an encoutered script.
+ * Info about an encountered script.
  * When sn_state has the SN_STATE_NOT_LOADED is has not been sourced yet.
  */
 typedef struct
@@ -2095,7 +2095,7 @@
 };
 
 /*
- * Structure to hold the variables declared in a loop that are possiblly used
+ * Structure to hold the variables declared in a loop that are possibly used
  * in a closure.
  */
 typedef struct loopvars_S loopvars_T;
diff --git a/src/tag.c b/src/tag.c
index d07fbbe..6f3903d 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -3954,7 +3954,7 @@
 		}
 		if (found == 0)
 		{
-		    emsg(_(e_canot_find_tag_pattern));
+		    emsg(_(e_cannot_find_tag_pattern));
 		    curwin->w_cursor.lnum = save_lnum;
 		}
 		else
diff --git a/src/term.c b/src/term.c
index 008734c..e4b6587 100644
--- a/src/term.c
+++ b/src/term.c
@@ -155,7 +155,7 @@
 // received.  To avoid redrawing too often, only redraw when t_8u is not reset
 // and it was supposed to be written.  Unless t_8u was set explicitly.
 // FALSE -> don't output t_8u yet
-// MAYBE -> tried outputing t_8u while FALSE
+// MAYBE -> tried outputting t_8u while FALSE
 // OK    -> can write t_8u
 int write_t_8u_state = FALSE;
 # endif
diff --git a/src/terminal.c b/src/terminal.c
index 1da9d2d..816ab81 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -2396,7 +2396,7 @@
 }
 
 /*
- * Return the highight group ID for the terminal and the window.
+ * Return the highlight group ID for the terminal and the window.
  */
     static int
 term_get_highlight_id(term_T *term, win_T *wp)
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index a13b49f..a99497d 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -2563,11 +2563,11 @@
 
   " Test for using a one time callback function to process a response
   let g:lspOtMsgs = []
-  let r = ch_sendexpr(ch, #{method: 'msg-specifc-cb', params: {}},
+  let r = ch_sendexpr(ch, #{method: 'msg-specific-cb', params: {}},
         \ #{callback: 'LspOtCb'})
   call assert_equal(9, r.id)
   call assert_equal('alive', ch_evalexpr(ch, #{method: 'ping'}).result)
-  call assert_equal([#{id: 9, jsonrpc: '2.0', result: 'msg-specifc-cb'}],
+  call assert_equal([#{id: 9, jsonrpc: '2.0', result: 'msg-specific-cb'}],
         \ g:lspOtMsgs)
 
   " Test for generating a request message from the other end (server)
diff --git a/src/testdir/test_channel_lsp.py b/src/testdir/test_channel_lsp.py
index ea0fd10..2357452 100644
--- a/src/testdir/test_channel_lsp.py
+++ b/src/testdir/test_channel_lsp.py
@@ -164,7 +164,7 @@
         self.send_lsp_msg(payload['id'], 'msg-with-id')
 
     def do_msg_specific_cb(self, payload):
-        self.send_lsp_msg(payload['id'], 'msg-specifc-cb')
+        self.send_lsp_msg(payload['id'], 'msg-specific-cb')
 
     def do_server_req(self, payload):
         self.send_lsp_msg(201, {'method': 'checkhealth', 'params': {'a': 20}})
@@ -205,7 +205,7 @@
                         'simple-notif': self.do_simple_notif,
                         'multi-notif': self.do_multi_notif,
                         'msg-with-id': self.do_msg_with_id,
-                        'msg-specifc-cb': self.do_msg_specific_cb,
+                        'msg-specific-cb': self.do_msg_specific_cb,
                         'server-req': self.do_server_req,
                         'extra-hdr-fields': self.do_extra_hdr_fields,
                         'delayed-payload': self.do_delayad_payload,
diff --git a/src/testdir/test_cmdmods.vim b/src/testdir/test_cmdmods.vim
index eb6dff1..d5a4e93 100644
--- a/src/testdir/test_cmdmods.vim
+++ b/src/testdir/test_cmdmods.vim
@@ -1,4 +1,4 @@
-" Test for all comand modifiers in 
+" Test for all command modifiers in
 
 def Test_cmdmods_array()
   # Get all the command modifiers from ex_cmds.h.
diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim
index e1fed36..6d6efe7 100644
--- a/src/testdir/test_expr.vim
+++ b/src/testdir/test_expr.vim
@@ -35,7 +35,7 @@
   call assert_true(has('patch-6.9.999'))
   call assert_true(has('patch-7.1.999'))
   call assert_true(has('patch-7.4.123'))
-  call assert_true(has('patch-7.4.123 ')) " Traling space can be allowed.
+  call assert_true(has('patch-7.4.123 ')) " Trailing space can be allowed.
 
   call assert_false(has('patch-7'))
   call assert_false(has('patch-7.4'))
diff --git a/src/testdir/test_fold.vim b/src/testdir/test_fold.vim
index 9b8cd73..e22ede9 100644
--- a/src/testdir/test_fold.vim
+++ b/src/testdir/test_fold.vim
@@ -1342,7 +1342,7 @@
 
 " Test for merging two recursive folds when an intermediate line with no fold
 " is removed
-func Test_fold_merge_recrusive()
+func Test_fold_merge_recursive()
   new
   call setline(1, ['  one', '    two', 'xxxx', '    three',
         \ '      four', "\tfive"])
diff --git a/src/testdir/test_langmap.vim b/src/testdir/test_langmap.vim
index 2284704..aaed77e 100644
--- a/src/testdir/test_langmap.vim
+++ b/src/testdir/test_langmap.vim
@@ -52,7 +52,7 @@
   set langmap=RL
   let g:counter = 0
   nnoremap L;L <Cmd>let g:counter += 1<CR>
-  nnoremap <C-L> <Cmd>throw 'This mapping shoud not be triggered'<CR>
+  nnoremap <C-L> <Cmd>throw 'This mapping should not be triggered'<CR>
 
   " 'langmap' is applied to keys without modifiers when matching a mapping
   call feedkeys('R;R', 'tx')
diff --git a/src/testdir/test_map_functions.vim b/src/testdir/test_map_functions.vim
index 5caf668..13e61f2 100644
--- a/src/testdir/test_map_functions.vim
+++ b/src/testdir/test_map_functions.vim
@@ -559,7 +559,7 @@
   assert_equal(len(maps_maplist), len(map_set))
 
   # For everything returned by maplist, should be the same as from maparg.
-  # Except for "map dup", bacause maparg returns the <buffer> version
+  # Except for "map dup", because maparg returns the <buffer> version
   for d in maps_maplist
     if d.lhs == 'dup' && d.buffer == 0
       continue
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index 102502e..23c4077 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -274,7 +274,7 @@
   call feedkeys(":setglobal di\<C-A>\<C-B>\"\<CR>", 'tx')
   call assert_equal('"setglobal dictionary diff diffexpr diffopt digraph directory display', @:)
 
-  " Expand boolan options. When doing :set no<Tab>
+  " Expand boolean options. When doing :set no<Tab>
   " vim displays the options names without "no" but completion uses "no...".
   call feedkeys(":set nodi\<C-A>\<C-B>\"\<CR>", 'tx')
   call assert_equal('"set nodiff digraph', @:)
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 29b7b7d..0f7f18c9 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -4124,8 +4124,8 @@
           fixed: false,
           })
   END
-  call writefile(lines, 'XtestPropNotVisble', 'D')
-  let buf = RunVimInTerminal('-S XtestPropNotVisble', #{rows: 10})
+  call writefile(lines, 'XtestPropNotVisible', 'D')
+  let buf = RunVimInTerminal('-S XtestPropNotVisible', #{rows: 10})
   call VerifyScreenDump(buf, 'Test_popup_prop_not_visible_01', {})
 
   " check that hiding and unhiding the popup works
diff --git a/src/testdir/test_termcodes.vim b/src/testdir/test_termcodes.vim
index 0b2365e..8715ebf 100644
--- a/src/testdir/test_termcodes.vim
+++ b/src/testdir/test_termcodes.vim
@@ -1222,7 +1222,7 @@
   call assert_equal(5, col("'<"))
   call assert_equal(12, col("'>"))
 
-  " Multi-line selection. Right click inside thse selection.
+  " Multi-line selection. Right click inside the selection.
   call setline(1, repeat(['aaaaaa'], 7))
   call test_setmouse(3, 1)
   exe "normal ggVG\<RightMouse>y"
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 80ad88c..7ec5998 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -1896,7 +1896,7 @@
   try
     :2 del
   catch
-    assert_report('Line delete should have workd, but it raised an error.')
+    assert_report('Line delete should have worked, but it raised an error.')
   endtry
 
   # The property for line 2 (was 3) should no longer extend into the previous
@@ -1910,7 +1910,7 @@
   try
     :3 del
   catch
-    assert_report('Line delete should have workd, but it raised an error.')
+    assert_report('Line delete should have worked, but it raised an error.')
   endtry
 
   # The property for line 2 (originally 3) should no longer extend into the next
@@ -2405,7 +2405,7 @@
   exec 'setlocal fileformat=' . a:ff
 
   " Fill the buffer with varying length lines. We need a suitably large number
-  " to force Vim code through paths wehere previous error have occurred. This
+  " to force Vim code through paths where previous error have occurred. This
   " is more 'art' than 'science'.
   let text = 'a'
   call setline(1, text)
@@ -2448,7 +2448,7 @@
   setlocal fileformat=unix
 
   " Fill the buffer with varying length lines. We need a suitably large number
-  " to force Vim code through paths wehere previous error have occurred. This
+  " to force Vim code through paths where previous error have occurred. This
   " is more 'art' than 'science'.
   let text = 'aa'
   call setline(1, text)
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 4e89c7f..0fe6e7c 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -126,7 +126,7 @@
   END
   v9.CheckScriptSuccess(lines)
 
-  # "legacy" does not aply to a called function
+  # "legacy" does not apply to a called function
   lines =<< trim END
       vim9script
 
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 58e214c..ac86512 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -4366,7 +4366,7 @@
   g:StopVimInTerminal(buf)
 enddef
 
-def Test_ambigous_command_error()
+def Test_ambiguous_command_error()
   var lines =<< trim END
       vim9script
       command CmdA echomsg 'CmdA'
diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim
index 1d71450..4aa6bca 100644
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -6882,7 +6882,7 @@
 "	    Undefined behavior was detected by ubsan with line continuation
 "	    after an empty line.
 "-------------------------------------------------------------------------------
-func Test_script_emty_line_continuation()
+func Test_script_empty_line_continuation()
 
     \
 endfunc
diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim
index c6f80aa..573a2cf 100644
--- a/src/testdir/test_visual.vim
+++ b/src/testdir/test_visual.vim
@@ -1289,7 +1289,7 @@
 endfunc
 
 func Test_visual_block_ctrl_w_f()
-  " Emtpy block selected in new buffer should not result in an error.
+  " Empty block selected in new buffer should not result in an error.
   au! BufNew foo sil norm f
   edit foo
 
diff --git a/src/testdir/test_winbar.vim b/src/testdir/test_winbar.vim
index b946bcd..954c3e0 100644
--- a/src/testdir/test_winbar.vim
+++ b/src/testdir/test_winbar.vim
@@ -132,8 +132,8 @@
       wincmd j
       wincmd _
   END
-  call writefile(lines, 'XtestWinbarNotVisble', 'D')
-  let buf = RunVimInTerminal('-S XtestWinbarNotVisble', #{rows: 10})
+  call writefile(lines, 'XtestWinbarNotVisible', 'D')
+  let buf = RunVimInTerminal('-S XtestWinbarNotVisible', #{rows: 10})
   call VerifyScreenDump(buf, 'Test_winbar_not_visible', {})
 
   " clean up
@@ -151,8 +151,8 @@
       wincmd j
       wincmd _
   END
-  call writefile(lines, 'XtestWinbarNotVisble', 'D')
-  let buf = RunVimInTerminal('-S XtestWinbarNotVisble', #{rows: 10})
+  call writefile(lines, 'XtestWinbarNotVisible', 'D')
+  let buf = RunVimInTerminal('-S XtestWinbarNotVisible', #{rows: 10})
   call VerifyScreenDump(buf, 'Test_winbar_not_visible_custom_statusline', {})
 
   " clean up
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index 0d4c278..7aecb92 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -1267,7 +1267,7 @@
 
 " Test for jumping to a vertical/horizontal neighbor window based on the
 " current cursor position
-func Test_window_goto_neightbor()
+func Test_window_goto_neighbor()
   %bw!
 
   " Vertical window movement
diff --git a/src/textprop.c b/src/textprop.c
index 808d1e6..dee35c3 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -900,7 +900,7 @@
     if (ht == NULL || ht->ht_used == 0)
 	return NULL;
 
-    // Make the loopup faster by creating an array with pointers to
+    // Make the lookup faster by creating an array with pointers to
     // hashtable entries, sorted on pt_id.
     if (*array == NULL)
     {
diff --git a/src/typval.c b/src/typval.c
index d6f6196..a445bf8 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -1407,7 +1407,7 @@
 }
 
 /*
- * Compare "tv1" to "tv2" as lists acording to "type" and "ic".
+ * Compare "tv1" to "tv2" as lists according to "type" and "ic".
  * Put the result, false or true, in "res".
  * Return FAIL and give an error message when the comparison can't be done.
  */
@@ -1489,7 +1489,7 @@
 }
 
 /*
- * Compare "tv1" to "tv2" as blobs acording to "type".
+ * Compare "tv1" to "tv2" as blobs according to "type".
  * Put the result, false or true, in "res".
  * Return FAIL and give an error message when the comparison can't be done.
  */
@@ -1529,7 +1529,7 @@
 }
 
 /*
- * Compare "tv1" to "tv2" as dictionaries acording to "type" and "ic".
+ * Compare "tv1" to "tv2" as dictionaries according to "type" and "ic".
  * Put the result, false or true, in "res".
  * Return FAIL and give an error message when the comparison can't be done.
  */
@@ -1570,7 +1570,7 @@
 }
 
 /*
- * Compare "tv1" to "tv2" as funcrefs acording to "type" and "ic".
+ * Compare "tv1" to "tv2" as funcrefs according to "type" and "ic".
  * Put the result, false or true, in "res".
  * Return FAIL and give an error message when the comparison can't be done.
  */
diff --git a/src/usercmd.c b/src/usercmd.c
index 0160ac1..9f16680 100644
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -1420,7 +1420,7 @@
  * was added.  Return the number of bytes added.
  */
     size_t
-add_win_cmd_modifers(char_u *buf, cmdmod_T *cmod, int *multi_mods)
+add_win_cmd_modifiers(char_u *buf, cmdmod_T *cmod, int *multi_mods)
 {
     size_t result = 0;
 
@@ -1537,7 +1537,7 @@
 	}
     }
     // flags from cmod->cmod_split
-    result += add_win_cmd_modifers(buf, cmod, &multi_mods);
+    result += add_win_cmd_modifiers(buf, cmod, &multi_mods);
 
     if (quote && buf != NULL)
     {
diff --git a/src/userfunc.c b/src/userfunc.c
index 14d1c72..64bc1f6 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2921,7 +2921,7 @@
     // If called from a compiled :def function the execution context must be
     // hidden, any deferred functions need to be added to the function being
     // executed here.
-    save_current_ectx = clear_currrent_ectx();
+    save_current_ectx = clear_current_ectx();
 
     save_current_sctx = current_sctx;
     current_sctx = fp->uf_script_ctx;
@@ -5064,7 +5064,7 @@
     if (is_export)
     {
 	fp->uf_flags |= FC_EXPORT;
-	// let ex_export() know the export worked.
+	// let do_one_cmd() know the export worked.
 	is_export = FALSE;
     }
 
diff --git a/src/version.c b/src/version.c
index 7e42259..ceabba2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    828,
+/**/
     827,
 /**/
     826,
diff --git a/src/vim9cmds.c b/src/vim9cmds.c
index e5abf89..06964d5 100644
--- a/src/vim9cmds.c
+++ b/src/vim9cmds.c
@@ -1438,7 +1438,7 @@
     if (try_scopes > 0)
 	// Inside one or more try/catch blocks we first need to jump to the
 	// "finally" or "endtry" to cleanup.  Then come to the next JUMP
-	// intruction, which we don't know the index of yet.
+	// instruction, which we don't know the index of yet.
 	generate_TRYCONT(cctx, try_scopes, cctx->ctx_instr.ga_len + 1);
 
     // Jump to the end of the FOR or WHILE loop.  The instruction index will be
diff --git a/src/vim9execute.c b/src/vim9execute.c
index c907360..cb52438 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -234,7 +234,7 @@
 	    item = dict_find(dict, key, -1);
 	    if (item != NULL)
 	    {
-		semsg(_(e_duplicate_key_in_dicitonary), key);
+		semsg(_(e_duplicate_key_in_dictionary), key);
 		dict_unref(dict);
 		return MAYBE;
 	    }
@@ -866,7 +866,7 @@
  * a user function.
  */
     ectx_T *
-clear_currrent_ectx(void)
+clear_current_ectx(void)
 {
     ectx_T *r = current_ectx;
 
@@ -4523,7 +4523,7 @@
 			if (arg2 < 0)
 			{
 			    SOURCING_LNUM = iptr->isn_lnum;
-			    emsg(_(e_bitshift_ops_must_be_postive));
+			    emsg(_(e_bitshift_ops_must_be_positive));
 			    goto on_error;
 			}
 		    }
@@ -5929,7 +5929,7 @@
 }
 
 /*
- * Invoke any deffered functions for the top function in "ectx".
+ * Invoke any deferred functions for the top function in "ectx".
  */
     void
 may_invoke_defer_funcs(ectx_T *ectx)
diff --git a/src/vim9expr.c b/src/vim9expr.c
index 1fbe05b..7a32974 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -1242,7 +1242,7 @@
 	    item = dict_find(d, key, -1);
 	    if (item != NULL)
 	    {
-		semsg(_(e_duplicate_key_in_dicitonary), key);
+		semsg(_(e_duplicate_key_in_dictionary), key);
 		goto failret;
 	    }
 	    item = dictitem_alloc(key);
@@ -2725,7 +2725,7 @@
 		if (tv2->v_type != VAR_NUMBER)
 		    emsg(_(e_bitshift_ops_must_be_number));
 		else
-		    emsg(_(e_bitshift_ops_must_be_postive));
+		    emsg(_(e_bitshift_ops_must_be_positive));
 		return FAIL;
 	    }
 
