diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index a4a8756..f4c3271 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -559,6 +559,27 @@
 }
 
 /*
+ * Print the executed command for when 'verbose' is set.
+ * When "lnum" is 0 only print the command.
+ */
+    static void
+msg_verbose_cmd(linenr_T lnum, char_u *cmd)
+{
+    ++no_wait_return;
+    verbose_enter_scroll();
+
+    if (lnum == 0)
+	smsg(_("Executing: %s"), cmd);
+    else
+	smsg(_("line %ld: %s"), (long)lnum, cmd);
+    if (msg_silent == 0)
+	msg_puts("\n");   // don't overwrite this
+
+    verbose_leave_scroll();
+    --no_wait_return;
+}
+
+/*
  * Execute a simple command line.  Used for translated commands like "*".
  */
     int
@@ -944,18 +965,7 @@
 	}
 
 	if (p_verbose >= 15 && sourcing_name != NULL)
-	{
-	    ++no_wait_return;
-	    verbose_enter_scroll();
-
-	    smsg(_("line %ld: %s"),
-					   (long)sourcing_lnum, cmdline_copy);
-	    if (msg_silent == 0)
-		msg_puts("\n");   /* don't overwrite this */
-
-	    verbose_leave_scroll();
-	    --no_wait_return;
-	}
+	    msg_verbose_cmd(sourcing_lnum, cmdline_copy);
 
 	/*
 	 * 2. Execute one '|' separated command.
@@ -1666,6 +1676,9 @@
     if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
 	goto doend;
 
+    if (p_verbose >= 16)
+	msg_verbose_cmd(0, *cmdlinep);
+
 /*
  * 1. Skip comment lines and leading white space and colons.
  * 2. Handle command modifiers.
@@ -8534,9 +8547,9 @@
 {
     linenr_T	lnum;
 
-#ifdef FEAT_CLIPBOARD
+# ifdef FEAT_CLIPBOARD
     start_global_changes();
-#endif
+# endif
 
     /* First set the marks for all lines closed/open. */
     for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
@@ -8546,9 +8559,9 @@
     /* Execute the command on the marked lines. */
     global_exe(eap->arg);
     ml_clearmarked();	   /* clear rest of the marks */
-#ifdef FEAT_CLIPBOARD
+# ifdef FEAT_CLIPBOARD
     end_global_changes();
-#endif
+# endif
 }
 #endif
 
@@ -8566,7 +8579,7 @@
 }
 #endif
 
-# if defined(FEAT_TIMERS) || defined(PROTO)
+#if defined(FEAT_TIMERS) || defined(PROTO)
     int
 get_pressedreturn(void)
 {
diff --git a/src/testdir/dumps/Test_verbose_option_1.dump b/src/testdir/dumps/Test_verbose_option_1.dump
new file mode 100644
index 0000000..192d102
--- /dev/null
+++ b/src/testdir/dumps/Test_verbose_option_1.dump
@@ -0,0 +1,12 @@
+|~+0#4040ff13#ffffff0| @73
+|~| @73
+|~| @73
+|~| @73
+|E+0#0000000&|x|e|c|u|t|i|n|g|:| |D|o|S|o|m|e|t|h|i|n|g| @52
+|E|x|e|c|u|t|i|n|g|:| |e|c|h|o| |'|h|e|l@1|o|'| |||s|e|t| |t|s|=|4| |||l|e|t| |v| |=| |'|1|2|3|'| |||e|c|h|o| |v| @18
+|h|e|l@1|o| @69
+|E|x|e|c|u|t|i|n|g|:| |s|e|t| |t|s|=|4| |||l|e|t| |v| |=| |'|1|2|3|'| |||e|c|h|o| |v| @32
+|E|x|e|c|u|t|i|n|g|:| |l|e|t| |v| |=| |'|1|2|3|'| |||e|c|h|o| |v| @42
+|E|x|e|c|u|t|i|n|g|:| |e|c|h|o| |v| @57
+|1|2|3| @71
+|P+0#00e0003&|r|e|s@1| |E|N|T|E|R| |o|r| |t|y|p|e| |c|o|m@1|a|n|d| |t|o| |c|o|n|t|i|n|u|e> +0#0000000&@35
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 98768b5..55f35e7 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -1,5 +1,8 @@
 " Tests for editing the command line.
 
+source check.vim
+source screendump.vim
+
 func Test_complete_tab()
   call writefile(['testfile'], 'Xtestfile')
   call feedkeys(":e Xtest\t\r", "tx")
@@ -687,6 +690,26 @@
   call delete('Xlog')
 endfunc
 
+func Test_verbose_option()
+  CheckScreendump
+
+  let lines =<< trim [SCRIPT]
+    command DoSomething echo 'hello' |set ts=4 |let v = '123' |echo v
+    call feedkeys("\r", 't') " for the hit-enter prompt
+    set verbose=20
+  [SCRIPT]
+  call writefile(lines, 'XTest_verbose')
+
+  let buf = RunVimInTerminal('-S XTest_verbose', {'rows': 12})
+  call term_wait(buf, 100)
+  call term_sendkeys(buf, ":DoSomething\<CR>")
+  call VerifyScreenDump(buf, 'Test_verbose_option_1', {})
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('XTest_verbose')
+endfunc
+
 func Test_setcmdpos()
   func InsertTextAtPos(text, pos)
     call assert_equal(0, setcmdpos(a:pos))
diff --git a/src/testdir/test_tagjump.vim b/src/testdir/test_tagjump.vim
index 64a0a28..81d3e80 100644
--- a/src/testdir/test_tagjump.vim
+++ b/src/testdir/test_tagjump.vim
@@ -501,6 +501,7 @@
   call term_sendkeys(buf, ":tselect main\<CR>2\<CR>")
   call VerifyScreenDump(buf, 'Test_tselect_1', {})
 
+  call StopVimInTerminal(buf)
   call delete('Xtags')
   call delete('Xtest.c')
   call delete('XTest_tselect')
diff --git a/src/version.c b/src/version.c
index 74126d2..615d24e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2143,
+/**/
     2142,
 /**/
     2141,
