diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index b86244f..5ee2ce1 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -22,9 +22,13 @@
 1. Setting options					*set-option* *E764*
 
 							*:se* *:set*
-:se[t]			Show all options that differ from their default value.
+:se[t][!]		Show all options that differ from their default value.
+			When [!] is present every option is on a separate
+			line.
 
-:se[t] all		Show all but terminal options.
+:se[t][!] all		Show all but terminal options.
+			When [!] is present every option is on a separate
+			line.
 
 :se[t] termcap		Show all terminal options.  Note that in the GUI the
 			key codes are not shown, because they are generated
@@ -287,7 +291,7 @@
 wiped out |:bwipe|.
 
 							*:setl* *:setlocal*
-:setl[ocal] ...		Like ":set" but set only the value local to the
+:setl[ocal][!] ...	Like ":set" but set only the value local to the
 			current buffer or window.  Not all options have a
 			local value.  If the option does not have a local
 			value the global value is set.
@@ -309,7 +313,7 @@
 			{option}, so that the global value will be used.
 
 							*:setg* *:setglobal*
-:setg[lobal] ...	Like ":set" but set only the global value for a local
+:setg[lobal][!] ...	Like ":set" but set only the global value for a local
 			option without changing the local value.
 			When displaying an option, the global value is shown.
 			With the "all" argument: display global values for all
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 36a8ad4..53e49d5 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -1307,16 +1307,16 @@
 	EX_EXTRA|EX_NOTRLCOM,
 	ADDR_NONE),
 EXCMD(CMD_set,		"set",		ex_set,
-	EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
+	EX_BANG|EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
 	ADDR_NONE),
 EXCMD(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
 	EX_TRLBAR|EX_EXTRA|EX_NEEDARG|EX_CMDWIN,
 	ADDR_NONE),
 EXCMD(CMD_setglobal,	"setglobal",	ex_set,
-	EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
+	EX_BANG|EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
 	ADDR_NONE),
 EXCMD(CMD_setlocal,	"setlocal",	ex_set,
-	EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
+	EX_BANG|EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
 	ADDR_NONE),
 EXCMD(CMD_sfind,	"sfind",	ex_splitview,
 	EX_BANG|EX_FILE1|EX_RANGE|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 51d85c3..193cfcf 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -320,7 +320,6 @@
 # define ex_diffupdate		ex_ni
 #endif
 static void	ex_digraphs(exarg_T *eap);
-static void	ex_set(exarg_T *eap);
 #ifdef FEAT_SEARCH_EXTRA
 static void	ex_nohlsearch(exarg_T *eap);
 #else
@@ -8488,23 +8487,6 @@
 #endif
 }
 
-    static void
-ex_set(exarg_T *eap)
-{
-    int		flags = 0;
-
-    if (eap->cmdidx == CMD_setlocal)
-	flags = OPT_LOCAL;
-    else if (eap->cmdidx == CMD_setglobal)
-	flags = OPT_GLOBAL;
-#if defined(FEAT_EVAL) && defined(FEAT_BROWSE)
-    if (cmdmod.browse && flags == 0)
-	ex_options(eap);
-    else
-#endif
-	(void)do_set(eap->arg, flags);
-}
-
 #if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
     void
 set_no_hlsearch(int flag)
diff --git a/src/option.c b/src/option.c
index 7c37326..e24181a 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1066,6 +1066,27 @@
 }
 #endif
 
+    void
+ex_set(exarg_T *eap)
+{
+    int		flags = 0;
+
+    if (eap->cmdidx == CMD_setlocal)
+	flags = OPT_LOCAL;
+    else if (eap->cmdidx == CMD_setglobal)
+	flags = OPT_GLOBAL;
+#if defined(FEAT_EVAL) && defined(FEAT_BROWSE)
+    if (cmdmod.browse && flags == 0)
+	ex_options(eap);
+    else
+#endif
+    {
+	if (eap->forceit)
+	    flags |= OPT_ONECOLUMN;
+	(void)do_set(eap->arg, flags);
+    }
+}
+
 /*
  * Parse 'arg' for option settings.
  *
@@ -4349,7 +4370,7 @@
 #define INC 20
 #define GAP 3
 
-    items = ALLOC_MULT(struct vimoption *, PARAM_COUNT);
+    items = ALLOC_MULT(struct vimoption *, OPTION_COUNT);
     if (items == NULL)
 	return;
 
@@ -4364,9 +4385,10 @@
 	msg_puts_title(_("\n--- Options ---"));
 
     /*
-     * do the loop two times:
+     * Do the loop two times:
      * 1. display the short items
      * 2. display the long items (only strings and numbers)
+     * When "opt_flags" has OPT_ONECOLUMN do everything in run 2.
      */
     for (run = 1; run <= 2 && !got_int; ++run)
     {
@@ -4377,12 +4399,12 @@
 	for (p = &options[0]; p->fullname != NULL; p++)
 	{
 	    // apply :filter /pat/
-	    if (message_filtered((char_u *) p->fullname))
+	    if (message_filtered((char_u *)p->fullname))
 		continue;
 
 	    varp = NULL;
 	    isterm = istermoption(p);
-	    if (opt_flags != 0)
+	    if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) != 0)
 	    {
 		if (p->indir != PV_NONE && !isterm)
 		    varp = get_varp_scope(p, opt_flags);
@@ -4394,7 +4416,9 @@
 			|| (all == 1 && !isterm)
 			|| (all == 0 && !optval_default(p, varp, p_cp))))
 	    {
-		if (p->flags & P_BOOL)
+		if (opt_flags & OPT_ONECOLUMN)
+		    len = Columns;
+		else if (p->flags & P_BOOL)
 		    len = 1;		// a toggle option fits always
 		else
 		{
diff --git a/src/optiondefs.h b/src/optiondefs.h
index 8fda8bf..3670107 100644
--- a/src/optiondefs.h
+++ b/src/optiondefs.h
@@ -3009,7 +3009,7 @@
     {NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL} SCTX_INIT}
 };
 
-#define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption))
+#define OPTION_COUNT (sizeof(options) / sizeof(struct vimoption))
 
 // The following is needed to make the gen_opt_test.vim script work.
 // {"
diff --git a/src/proto/option.pro b/src/proto/option.pro
index dc07ee6..7da2cbf 100644
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -8,6 +8,7 @@
 void set_init_3(void);
 void set_helplang_default(char_u *lang);
 void set_title_defaults(void);
+void ex_set(exarg_T *eap);
 int do_set(char_u *arg, int opt_flags);
 void did_set_option(int opt_idx, int opt_flags, int new_value, int value_checked);
 int string_to_key(char_u *arg, int multi_byte);
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index 636a24d..7a74af6 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -44,7 +44,7 @@
   set wildchar&
 endfunc
 
-func Test_options()
+func Test_options_command()
   let caught = 'ok'
   try
     options
@@ -388,6 +388,13 @@
   set tw& iskeyword& splitbelow&
 endfunc
 
+func Test_set_one_column()
+  let out_mult = execute('set all')->split("\n")
+  let out_one = execute('set! all')->split("\n")
+  " one column should be two to four times as many lines
+  call assert_inrange(len(out_mult) * 2, len(out_mult) * 4, len(out_one))
+endfunc
+
 func Test_set_values()
   if filereadable('opt_test.vim')
     source opt_test.vim
diff --git a/src/version.c b/src/version.c
index d6fa59c..cae6508 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    128,
+/**/
     127,
 /**/
     126,
diff --git a/src/vim.h b/src/vim.h
index 16949ae..d41db14 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1229,12 +1229,13 @@
  * When OPT_GLOBAL and OPT_LOCAL are both missing, set both local and global
  * values, get local value.
  */
-#define OPT_FREE	1	// free old value if it was allocated
-#define OPT_GLOBAL	2	// use global value
-#define OPT_LOCAL	4	// use local value
-#define OPT_MODELINE	8	// option in modeline
-#define OPT_WINONLY	16	// only set window-local options
-#define OPT_NOWIN	32	// don't set window-local options
+#define OPT_FREE	0x01	// free old value if it was allocated
+#define OPT_GLOBAL	0x02	// use global value
+#define OPT_LOCAL	0x04	// use local value
+#define OPT_MODELINE	0x08	// option in modeline
+#define OPT_WINONLY	0x10	// only set window-local options
+#define OPT_NOWIN	0x20	// don't set window-local options
+#define OPT_ONECOLUMN	0x40	// list options one per line
 
 // Magic chars used in confirm dialog strings
 #define DLG_BUTTON_SEP	'\n'
