diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 799b856..932570c 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -5076,14 +5076,23 @@
 			"space" setting is used.  For example,
 			`:set listchars=multispace:---+` shows ten consecutive
 			spaces as:
-				---+---+--
+				---+---+-- ~
 							*lcs-lead*
 	  lead:c	Character to show for leading spaces.  When omitted,
 			leading spaces are blank.  Overrides the "space" and
 			"multispace" settings for leading spaces.  You can
 			combine it with "tab:", for example: >
 				:set listchars+=tab:>-,lead:.
-<							*lcs-trail*
+<							*lcs-leadmultispace*
+	  leadmultispace:c...
+			Like multispace value, but only for leading whitespace
+			Overrides |lcs-lead| for leading multiple spaces.
+			`:set listchars=leadmultispace:---+` shows ten consecutive
+			leading spaces as:
+				---+---+--XXX ~
+			Where "XXX" denotes the first non-blank characters in
+			the line.
+							*lcs-trail*
 	  trail:c	Character to show for trailing spaces.  When omitted,
 			trailing spaces are blank.  Overrides the "space" and
 			"multispace" settings for trailing spaces.
diff --git a/src/drawline.c b/src/drawline.c
index a8739fe..59c62c7 100644
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -767,6 +767,7 @@
     {
 	if (wp->w_lcs_chars.space
 		|| wp->w_lcs_chars.multispace != NULL
+		|| wp->w_lcs_chars.leadmultispace != NULL
 		|| wp->w_lcs_chars.trail
 		|| wp->w_lcs_chars.lead
 		|| wp->w_lcs_chars.nbsp)
@@ -781,7 +782,7 @@
 	    trailcol += (colnr_T) (ptr - line);
 	}
 	// find end of leading whitespace
-	if (wp->w_lcs_chars.lead)
+	if (wp->w_lcs_chars.lead || wp->w_lcs_chars.leadmultispace != NULL)
 	{
 	    leadcol = 0;
 	    while (VIM_ISWHITE(ptr[leadcol]))
@@ -2118,8 +2119,24 @@
 		if ((trailcol != MAXCOL && ptr > line + trailcol && c == ' ')
 			|| (leadcol != 0 && ptr < line + leadcol && c == ' '))
 		{
-		    c = (ptr > line + trailcol) ? wp->w_lcs_chars.trail
-							: wp->w_lcs_chars.lead;
+		    if (leadcol != 0 && in_multispace && ptr < line + leadcol
+			    && wp->w_lcs_chars.leadmultispace != NULL)
+		    {
+			c = wp->w_lcs_chars.leadmultispace[multispace_pos++];
+			if (wp->w_lcs_chars.leadmultispace[multispace_pos] == NUL)
+			    multispace_pos = 0;
+		    }
+
+		    else if (ptr > line + trailcol && wp->w_lcs_chars.trail)
+			c = wp->w_lcs_chars.trail;
+
+		    else if (ptr < line + leadcol && wp->w_lcs_chars.lead)
+			c = wp->w_lcs_chars.lead;
+
+		    else if (leadcol != 0 && c == ' ' && wp->w_lcs_chars.space)
+			c = wp->w_lcs_chars.space;
+
+
 		    if (!attr_pri)
 		    {
 			n_attr = 1;
diff --git a/src/message.c b/src/message.c
index 6e21d66..c6bf6da 100644
--- a/src/message.c
+++ b/src/message.c
@@ -1881,7 +1881,7 @@
 		--trail;
 	}
 	// find end of leading whitespace
-	if (curwin->w_lcs_chars.lead)
+	if (curwin->w_lcs_chars.lead || curwin->w_lcs_chars.leadmultispace != NULL)
 	{
 	    lead = s;
 	    while (VIM_ISWHITE(lead[0]))
@@ -1993,7 +1993,15 @@
 	    }
 	    else if (c == ' ')
 	    {
-		if (lead != NULL && s <= lead)
+		if (list && lead != NULL && s <= lead && in_multispace
+			&& curwin->w_lcs_chars.leadmultispace != NULL)
+		{
+		    c = curwin->w_lcs_chars.leadmultispace[multispace_pos++];
+		    if (curwin->w_lcs_chars.leadmultispace[multispace_pos] == NUL)
+			multispace_pos = 0;
+		    attr = HL_ATTR(HLF_8);
+		}
+		else if (lead != NULL && s <= lead && curwin->w_lcs_chars.lead)
 		{
 		    c = curwin->w_lcs_chars.lead;
 		    attr = HL_ATTR(HLF_8);
@@ -2003,6 +2011,14 @@
 		    c = curwin->w_lcs_chars.trail;
 		    attr = HL_ATTR(HLF_8);
 		}
+		else if (list && lead != NULL && s <= lead && in_multispace
+			&& curwin->w_lcs_chars.leadmultispace != NULL)
+		{
+		    c = curwin->w_lcs_chars.leadmultispace[multispace_pos++];
+		    if (curwin->w_lcs_chars.leadmultispace[multispace_pos] == NUL)
+			multispace_pos = 0;
+		    attr = HL_ATTR(HLF_8);
+		}
 		else if (list && in_multispace
 			&& curwin->w_lcs_chars.multispace != NULL)
 		{
diff --git a/src/screen.c b/src/screen.c
index 29ccd3e..5035879 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -4831,11 +4831,13 @@
     char *
 set_chars_option(win_T *wp, char_u **varp)
 {
-    int		round, i, len, entries;
+    int		round, i, len, len2, entries;
     char_u	*p, *s;
     int		c1 = 0, c2 = 0, c3 = 0;
     char_u	*last_multispace = NULL; // Last occurrence of "multispace:"
+    char_u	*last_lmultispace = NULL; // Last occurrence of "leadmultispace:"
     int		multispace_len = 0;	 // Length of lcs-multispace string
+    int		lead_multispace_len = 0; // Length of lcs-leadmultispace string
     struct charstab
     {
 	int	*cp;
@@ -4909,6 +4911,14 @@
 		}
 		else
 		    lcs_chars.multispace = NULL;
+
+		if (lead_multispace_len > 0)
+		{
+		    lcs_chars.leadmultispace = ALLOC_MULT(int, lead_multispace_len + 1);
+		    lcs_chars.leadmultispace[lead_multispace_len] = NUL;
+		}
+		else
+		    lcs_chars.leadmultispace = NULL;
 	    }
 	    else
 	    {
@@ -4972,6 +4982,7 @@
 	    if (i == entries)
 	    {
 		len = (int)STRLEN("multispace");
+		len2 = (int)STRLEN("leadmultispace");
 		if ((varp == &p_lcs || varp == &wp->w_p_lcs)
 			&& STRNCMP(p, "multispace", len) == 0
 			&& p[len] == ':'
@@ -5008,6 +5019,43 @@
 			p = s;
 		    }
 		}
+
+		else if ((varp == &p_lcs || varp == &wp->w_p_lcs)
+			&& STRNCMP(p, "leadmultispace", len2) == 0
+			&& p[len2] == ':'
+			&& p[len2 + 1] != NUL)
+		{
+		    s = p + len2 + 1;
+		    if (round == 0)
+		    {
+			// Get length of lcsmultispace string in first round
+			last_lmultispace = p;
+			lead_multispace_len = 0;
+			while (*s != NUL && *s != ',')
+			{
+			    c1 = get_encoded_char_adv(&s);
+			    if (char2cells(c1) > 1)
+				return e_invalid_argument;
+			    ++lead_multispace_len;
+			}
+			if (lead_multispace_len == 0)
+			    // lcsmultispace cannot be an empty string
+			    return e_invalid_argument;
+			p = s;
+		    }
+		    else
+		    {
+			int multispace_pos = 0;
+
+			while (*s != NUL && *s != ',')
+			{
+			    c1 = get_encoded_char_adv(&s);
+			    if (p == last_lmultispace)
+				lcs_chars.leadmultispace[multispace_pos++] = c1;
+			}
+			p = s;
+		    }
+		}
 		else
 		    return e_invalid_argument;
 	    }
@@ -5020,6 +5068,8 @@
     {
 	if (wp->w_lcs_chars.multispace != NULL)
 	    vim_free(wp->w_lcs_chars.multispace);
+	if (wp->w_lcs_chars.leadmultispace != NULL)
+	    vim_free(wp->w_lcs_chars.leadmultispace);
 	wp->w_lcs_chars = lcs_chars;
     }
 
diff --git a/src/structs.h b/src/structs.h
index 4666d02..58152b9 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -3411,6 +3411,7 @@
     int		trail;
     int		lead;
     int		*multispace;
+    int		*leadmultispace;
 #ifdef FEAT_CONCEAL
     int		conceal;
 #endif
diff --git a/src/testdir/test_listchars.vim b/src/testdir/test_listchars.vim
index 90e3d6b..0977543 100644
--- a/src/testdir/test_listchars.vim
+++ b/src/testdir/test_listchars.vim
@@ -132,7 +132,7 @@
 	      \ 'h<<<<<<<<<<<$',
 	      \ '<<<<<<<<<<<<$',
 	      \ '>>>>0xx0<<<<$',
-              \ '$'
+        \ '$'
 	      \ ]
   redraw!
   for i in range(1, 5)
@@ -162,7 +162,7 @@
 	      \ ' hyYzZyYzZyY$',
 	      \ 'yYzZyYzZyYj $',
 	      \ 'yYzZ0yY0yYzZ$',
-              \ '$'
+        \ '$'
 	      \ ]
   redraw!
   for i in range(1, 5)
@@ -172,7 +172,133 @@
 
   call assert_equal(expected, split(execute("%list"), "\n"))
 
+  " Test leadmultispace + multispace
+  normal ggdG
+  set listchars=eol:$,multispace:yYzZ,nbsp:S
+  set listchars+=leadmultispace:.-+*
+  set list
+
+  call append(0, [
+	      \ '    ffff    ',
+	      \ '  i i     gg',
+	      \ ' h          ',
+	      \ '          j ',
+	      \ '    0  0    ',
+	      \ ])
+
+  let expected = [
+	      \ '.-+*ffffyYzZ$',
+	      \ '.-i iSyYzZgg$',
+	      \ ' hyYzZyYzZyY$',
+	      \ '.-+*.-+*.-j $',
+	      \ '.-+*0yY0yYzZ$',
+        \ '$'
+	      \ ]
+  redraw!
+  call assert_equal('eol:$,multispace:yYzZ,nbsp:S,leadmultispace:.-+*', &listchars)
+  for i in range(1, 5)
+    call cursor(i, 1)
+    call assert_equal([expected[i - 1]], ScreenLines(i, virtcol('$')))
+  endfor
+
+  call assert_equal(expected, split(execute("%list"), "\n"))
+
+  " Test leadmultispace without multispace
+  normal ggdG
+  set listchars-=multispace:yYzZ
+  set listchars+=space:+,trail:>,eol:$
+  set list
+
+  call append(0, [
+	      \ '    ffff    ',
+	      \ '  i i     gg',
+	      \ ' h          ',
+	      \ '          j ',
+	      \ '    0  0    ',
+	      \ ])
+
+  let expected = [
+	      \ '.-+*ffff>>>>$',
+	      \ '.-i+i+++++gg$',
+	      \ '+h>>>>>>>>>>$',
+	      \ '.-+*.-+*.-j>$',
+	      \ '.-+*0++0>>>>$',
+        \ '$',
+	      \ ]
+
+  redraw!
+  call assert_equal('eol:$,nbsp:S,leadmultispace:.-+*,space:+,trail:>,eol:$', &listchars)
+  for i in range(1, 5)
+    call cursor(i, 1)
+    call assert_equal([expected[i - 1]], ScreenLines(i, virtcol('$')))
+  endfor
+
+  call assert_equal(expected, split(execute("%list"), "\n"))
+
+  " Test leadmultispace only
+  normal ggdG
+  set listchars&
+  set listchars=leadmultispace:.-+*
+  set list
+
+  call append(0, [
+	      \ '    ffff    ',
+	      \ '  i i     gg',
+	      \ ' h          ',
+	      \ '          j ',
+	      \ '    0  0    ',
+	      \ ])
+
+  let expected = [
+	      \ '.-+*ffff    ',
+	      \ '.-i i     gg',
+	      \ ' h          ',
+	      \ '.-+*.-+*.-j ',
+	      \ '.-+*0  0    ',
+        \ ' ',
+	      \ ]
+  redraw!
+  call assert_equal('leadmultispace:.-+*', &listchars)
+  for i in range(1, 5)
+    call cursor(i, 1)
+    call assert_equal([expected[i - 1]], ScreenLines(i, 12))
+  endfor
+  call assert_equal(expected, split(execute("%list"), "\n"))
+
+  " Test leadmultispace and lead and space
+  normal ggdG
+  set listchars&
+  set listchars+=lead:<,space:-
+  set listchars+=leadmultispace:.-+*
+  set list
+
+  call append(0, [
+	      \ '    ffff    ',
+	      \ '  i i     gg',
+	      \ ' h          ',
+	      \ '          j ',
+	      \ '    0  0    ',
+	      \ ])
+
+  let expected = [
+	      \ '.-+*ffff----$',
+	      \ '.-i-i-----gg$',
+	      \ '<h----------$',
+	      \ '.-+*.-+*.-j-$',
+	      \ '.-+*0--0----$',
+        \ '$',
+	      \ ]
+  redraw!
+  call assert_equal('eol:$,lead:<,space:-,leadmultispace:.-+*', &listchars)
+  for i in range(1, 5)
+    call cursor(i, 1)
+    call assert_equal([expected[i - 1]], ScreenLines(i, virtcol('$')))
+  endfor
+  call assert_equal(expected, split(execute("%list"), "\n"))
+
   " the last occurrence of 'multispace:' is used
+  set listchars&
+  set listchars+=multispace:yYzZ
   set listchars+=space:x,multispace:XyY
 
   let expected = [
@@ -181,9 +307,10 @@
 	      \ 'xhXyYXyYXyYX$',
 	      \ 'XyYXyYXyYXjx$',
 	      \ 'XyYX0Xy0XyYX$',
-              \ '$'
+        \ '$'
 	      \ ]
   redraw!
+  call assert_equal('eol:$,multispace:yYzZ,space:x,multispace:XyY', &listchars)
   for i in range(1, 5)
     call cursor(i, 1)
     call assert_equal([expected[i - 1]], ScreenLines(i, virtcol('$')))
@@ -199,7 +326,7 @@
 	      \ '>h<<<<<<<<<<$',
 	      \ '>>>>>>>>>>j<$',
 	      \ '>>>>0Xy0<<<<$',
-              \ '$'
+        \ '$'
 	      \ ]
   redraw!
   for i in range(1, 5)
@@ -219,7 +346,7 @@
 	      \ '>h<<<<<<<<<<$',
 	      \ '>>>>>>>>>>j<$',
 	      \ '>>>>0xx0<<<<$',
-              \ '$'
+        \ '$'
 	      \ ]
   redraw!
   for i in range(1, 5)
@@ -315,11 +442,13 @@
   call assert_fails('set listchars=x', 'E474:')
   call assert_fails('set listchars=x', 'E474:')
   call assert_fails('set listchars=multispace', 'E474:')
+  call assert_fails('set listchars=leadmultispace', 'E474:')
 
   " Too short
   call assert_fails('set listchars=space:', 'E474:')
   call assert_fails('set listchars=tab:x', 'E474:')
   call assert_fails('set listchars=multispace:', 'E474:')
+  call assert_fails('set listchars=leadmultispace:', 'E474:')
 
   " One occurrence too short
   call assert_fails('set listchars=space:,space:x', 'E474:')
@@ -328,6 +457,8 @@
   call assert_fails('set listchars=tab:xx,tab:x', 'E474:')
   call assert_fails('set listchars=multispace:,multispace:x', 'E474:')
   call assert_fails('set listchars=multispace:x,multispace:', 'E474:')
+  call assert_fails('set listchars=leadmultispace:,leadmultispace:x', 'E474:')
+  call assert_fails('set listchars=leadmultispace:x,leadmultispace:', 'E474:')
 
   " Too long
   call assert_fails('set listchars=space:xx', 'E474:')
@@ -340,6 +471,8 @@
   call assert_fails('set listchars=tab:xx·', 'E474:')
   call assert_fails('set listchars=multispace:·', 'E474:')
   call assert_fails('set listchars=multispace:xxx·', 'E474:')
+  call assert_fails('set listchars=leadmultispace:·', 'E474:')
+  call assert_fails('set listchars=leadmultispace:xxx·', 'E474:')
 
   " Has control character
   call assert_fails("set listchars=space:\x01", 'E474:')
@@ -354,6 +487,10 @@
   call assert_fails('set listchars=tab:xx\\x01', 'E474:')
   call assert_fails('set listchars=multispace:\\x01', 'E474:')
   call assert_fails('set listchars=multispace:xxx\\x01', 'E474:')
+  call assert_fails("set listchars=leadmultispace:\x01", 'E474:')
+  call assert_fails('set listchars=leadmultispace:\\x01', 'E474:')
+  call assert_fails("set listchars=leadmultispace:xxx\x01", 'E474:')
+  call assert_fails('set listchars=leadmultispace:xxx\\x01', 'E474:')
 
   enew!
   set ambiwidth& listchars& ff&
diff --git a/src/version.c b/src/version.c
index a131b35..34266c1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    5066,
+/**/
     5065,
 /**/
     5064,
diff --git a/src/window.c b/src/window.c
index 9b5ac97..992593b 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5188,6 +5188,7 @@
     clear_winopt(&wp->w_allbuf_opt);
 
     vim_free(wp->w_lcs_chars.multispace);
+    vim_free(wp->w_lcs_chars.leadmultispace);
 
 #ifdef FEAT_EVAL
     vars_clear(&wp->w_vars->dv_hashtab);	// free all w: variables
