patch 7.4.710
Problem: It is not possible to make spaces visibible in list mode. Solution: Add the "space" item to 'listchars'. (David Bürgin, issue 350)
This commit is contained in:
@ -4717,31 +4717,35 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
{not in Vi}
|
{not in Vi}
|
||||||
Strings to use in 'list' mode and for the |:list| command. It is a
|
Strings to use in 'list' mode and for the |:list| command. It is a
|
||||||
comma separated list of string settings.
|
comma separated list of string settings.
|
||||||
*lcs-eol*
|
*lcs-eol*
|
||||||
eol:c Character to show at the end of each line. When
|
eol:c Character to show at the end of each line. When
|
||||||
omitted, there is no extra character at the end of the
|
omitted, there is no extra character at the end of the
|
||||||
line.
|
line.
|
||||||
*lcs-tab*
|
*lcs-tab*
|
||||||
tab:xy Two characters to be used to show a tab. The first
|
tab:xy Two characters to be used to show a tab. The first
|
||||||
char is used once. The second char is repeated to
|
char is used once. The second char is repeated to
|
||||||
fill the space that the tab normally occupies.
|
fill the space that the tab normally occupies.
|
||||||
"tab:>-" will show a tab that takes four spaces as
|
"tab:>-" will show a tab that takes four spaces as
|
||||||
">---". When omitted, a tab is show as ^I.
|
">---". When omitted, a tab is show as ^I.
|
||||||
*lcs-trail*
|
*lcs-space*
|
||||||
|
space:c Character to show for a space. When omitted, spaces
|
||||||
|
are left blank.
|
||||||
|
*lcs-trail*
|
||||||
trail:c Character to show for trailing spaces. When omitted,
|
trail:c Character to show for trailing spaces. When omitted,
|
||||||
trailing spaces are blank.
|
trailing spaces are blank. Overrides the "space"
|
||||||
*lcs-extends*
|
setting for trailing spaces.
|
||||||
|
*lcs-extends*
|
||||||
extends:c Character to show in the last column, when 'wrap' is
|
extends:c Character to show in the last column, when 'wrap' is
|
||||||
off and the line continues beyond the right of the
|
off and the line continues beyond the right of the
|
||||||
screen.
|
screen.
|
||||||
*lcs-precedes*
|
*lcs-precedes*
|
||||||
precedes:c Character to show in the first column, when 'wrap'
|
precedes:c Character to show in the first column, when 'wrap'
|
||||||
is off and there is text preceding the character
|
is off and there is text preceding the character
|
||||||
visible in the first column.
|
visible in the first column.
|
||||||
*lcs-conceal*
|
*lcs-conceal*
|
||||||
conceal:c Character to show in place of concealed text, when
|
conceal:c Character to show in place of concealed text, when
|
||||||
'conceallevel' is set to 1.
|
'conceallevel' is set to 1.
|
||||||
*lcs-nbsp*
|
*lcs-nbsp*
|
||||||
nbsp:c Character to show for a non-breakable space (character
|
nbsp:c Character to show for a non-breakable space (character
|
||||||
0xA0, 160). Left blank when omitted.
|
0xA0, 160). Left blank when omitted.
|
||||||
|
|
||||||
@ -4754,7 +4758,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
:set lcs=tab:>-,eol:<,nbsp:%
|
:set lcs=tab:>-,eol:<,nbsp:%
|
||||||
:set lcs=extends:>,precedes:<
|
:set lcs=extends:>,precedes:<
|
||||||
< The "NonText" highlighting will be used for "eol", "extends" and
|
< The "NonText" highlighting will be used for "eol", "extends" and
|
||||||
"precedes". "SpecialKey" for "nbsp", "tab" and "trail".
|
"precedes". "SpecialKey" for "nbsp", "space", "tab" and "trail".
|
||||||
|hl-NonText| |hl-SpecialKey|
|
|hl-NonText| |hl-SpecialKey|
|
||||||
|
|
||||||
*'lpl'* *'nolpl'* *'loadplugins'* *'noloadplugins'*
|
*'lpl'* *'nolpl'* *'loadplugins'* *'noloadplugins'*
|
||||||
|
|||||||
@ -1163,6 +1163,7 @@ EXTERN int lcs_eol INIT(= '$');
|
|||||||
EXTERN int lcs_ext INIT(= NUL);
|
EXTERN int lcs_ext INIT(= NUL);
|
||||||
EXTERN int lcs_prec INIT(= NUL);
|
EXTERN int lcs_prec INIT(= NUL);
|
||||||
EXTERN int lcs_nbsp INIT(= NUL);
|
EXTERN int lcs_nbsp INIT(= NUL);
|
||||||
|
EXTERN int lcs_space INIT(= NUL);
|
||||||
EXTERN int lcs_tab1 INIT(= NUL);
|
EXTERN int lcs_tab1 INIT(= NUL);
|
||||||
EXTERN int lcs_tab2 INIT(= NUL);
|
EXTERN int lcs_tab2 INIT(= NUL);
|
||||||
EXTERN int lcs_trail INIT(= NUL);
|
EXTERN int lcs_trail INIT(= NUL);
|
||||||
|
|||||||
12
src/screen.c
12
src/screen.c
@ -4334,14 +4334,16 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
|||||||
#endif
|
#endif
|
||||||
++ptr;
|
++ptr;
|
||||||
|
|
||||||
/* 'list' : change char 160 to lcs_nbsp. */
|
/* 'list': change char 160 to lcs_nbsp and space to lcs_space. */
|
||||||
if (wp->w_p_list && (c == 160
|
if (wp->w_p_list
|
||||||
|
&& (((c == 160
|
||||||
#ifdef FEAT_MBYTE
|
#ifdef FEAT_MBYTE
|
||||||
|| (mb_utf8 && mb_c == 160)
|
|| (mb_utf8 && mb_c == 160)
|
||||||
#endif
|
#endif
|
||||||
) && lcs_nbsp)
|
) && lcs_nbsp)
|
||||||
|
|| (c == ' ' && lcs_space && ptr <= line + trailcol)))
|
||||||
{
|
{
|
||||||
c = lcs_nbsp;
|
c = (c == ' ') ? lcs_space : lcs_nbsp;
|
||||||
if (area_attr == 0 && search_attr == 0)
|
if (area_attr == 0 && search_attr == 0)
|
||||||
{
|
{
|
||||||
n_attr = 1;
|
n_attr = 1;
|
||||||
|
|||||||
@ -46,6 +46,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
|
|||||||
test_erasebackword.out \
|
test_erasebackword.out \
|
||||||
test_eval.out \
|
test_eval.out \
|
||||||
test_insertcount.out \
|
test_insertcount.out \
|
||||||
|
test_listchars.out \
|
||||||
test_listlbr.out \
|
test_listlbr.out \
|
||||||
test_listlbr_utf8.out \
|
test_listlbr_utf8.out \
|
||||||
test_mapping.out \
|
test_mapping.out \
|
||||||
@ -189,6 +190,7 @@ test_command_count.out: test_command_count.in
|
|||||||
test_erasebackword.out: test_erasebackword.in
|
test_erasebackword.out: test_erasebackword.in
|
||||||
test_eval.out: test_eval.in
|
test_eval.out: test_eval.in
|
||||||
test_insertcount.out: test_insertcount.in
|
test_insertcount.out: test_insertcount.in
|
||||||
|
test_listchars.out: test_listchars.in
|
||||||
test_listlbr.out: test_listlbr.in
|
test_listlbr.out: test_listlbr.in
|
||||||
test_listlbr_utf8.out: test_listlbr_utf8.in
|
test_listlbr_utf8.out: test_listlbr_utf8.in
|
||||||
test_mapping.out: test_mapping.in
|
test_mapping.out: test_mapping.in
|
||||||
|
|||||||
@ -45,6 +45,7 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \
|
|||||||
test_erasebackword.out \
|
test_erasebackword.out \
|
||||||
test_eval.out \
|
test_eval.out \
|
||||||
test_insertcount.out \
|
test_insertcount.out \
|
||||||
|
test_listchars.out \
|
||||||
test_listlbr.out \
|
test_listlbr.out \
|
||||||
test_listlbr_utf8.out \
|
test_listlbr_utf8.out \
|
||||||
test_mapping.out \
|
test_mapping.out \
|
||||||
|
|||||||
@ -67,6 +67,7 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \
|
|||||||
test_erasebackword.out \
|
test_erasebackword.out \
|
||||||
test_eval.out \
|
test_eval.out \
|
||||||
test_insertcount.out \
|
test_insertcount.out \
|
||||||
|
test_listchars.out \
|
||||||
test_listlbr.out \
|
test_listlbr.out \
|
||||||
test_listlbr_utf8.out \
|
test_listlbr_utf8.out \
|
||||||
test_mapping.out \
|
test_mapping.out \
|
||||||
|
|||||||
@ -47,6 +47,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
|
|||||||
test_erasebackword.out \
|
test_erasebackword.out \
|
||||||
test_eval.out \
|
test_eval.out \
|
||||||
test_insertcount.out \
|
test_insertcount.out \
|
||||||
|
test_listchars.out \
|
||||||
test_listlbr.out \
|
test_listlbr.out \
|
||||||
test_listlbr_utf8.out \
|
test_listlbr_utf8.out \
|
||||||
test_mapping.out \
|
test_mapping.out \
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
# Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
|
# Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
|
||||||
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
|
# Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
|
||||||
#
|
#
|
||||||
# Last change: 2015 Mar 24
|
# Last change: 2015 Apr 21
|
||||||
#
|
#
|
||||||
# This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
|
# This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
|
||||||
# Edit the lines in the Configuration section below to select.
|
# Edit the lines in the Configuration section below to select.
|
||||||
@ -106,6 +106,7 @@ SCRIPT = test1.out test2.out test3.out test4.out test5.out \
|
|||||||
test_erasebackword.out \
|
test_erasebackword.out \
|
||||||
test_eval.out \
|
test_eval.out \
|
||||||
test_insertcount.out \
|
test_insertcount.out \
|
||||||
|
test_listchars.out \
|
||||||
test_listlbr.out \
|
test_listlbr.out \
|
||||||
test_listlbr_utf8.out \
|
test_listlbr_utf8.out \
|
||||||
test_mapping.out \
|
test_mapping.out \
|
||||||
|
|||||||
@ -43,6 +43,7 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
|
|||||||
test_erasebackword.out \
|
test_erasebackword.out \
|
||||||
test_eval.out \
|
test_eval.out \
|
||||||
test_insertcount.out \
|
test_insertcount.out \
|
||||||
|
test_listchars.out \
|
||||||
test_listlbr.out \
|
test_listlbr.out \
|
||||||
test_listlbr_utf8.out \
|
test_listlbr_utf8.out \
|
||||||
test_mapping.out \
|
test_mapping.out \
|
||||||
|
|||||||
53
src/testdir/test_listchars.in
Normal file
53
src/testdir/test_listchars.in
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
Tests for 'listchars' display with 'list' and :list
|
||||||
|
|
||||||
|
STARTTEST
|
||||||
|
:so small.vim
|
||||||
|
:let g:lines = []
|
||||||
|
:function GetScreenCharsForLine(lnum)
|
||||||
|
: return join(map(range(1, virtcol('$')), 'nr2char(screenchar(a:lnum, v:val))'), '')
|
||||||
|
:endfunction
|
||||||
|
:nnoremap <expr> GG ":call add(g:lines, GetScreenCharsForLine(".screenrow()."))\<CR>"
|
||||||
|
:set listchars+=tab:>-,space:.,trail:<
|
||||||
|
:set list
|
||||||
|
:
|
||||||
|
/^start:/
|
||||||
|
:normal! jzt
|
||||||
|
GG
|
||||||
|
GG
|
||||||
|
GG
|
||||||
|
GG
|
||||||
|
GGH:
|
||||||
|
:set listchars-=trail:<
|
||||||
|
GG
|
||||||
|
GG
|
||||||
|
GG
|
||||||
|
GG
|
||||||
|
GG:
|
||||||
|
:put =g:lines
|
||||||
|
:'[,']w! test.out
|
||||||
|
ENDTEST
|
||||||
|
|
||||||
|
start:
|
||||||
|
aa
|
||||||
|
bb
|
||||||
|
cccc
|
||||||
|
dd ee
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
STARTTEST
|
||||||
|
:set listchars+=trail:<
|
||||||
|
:set nolist
|
||||||
|
:
|
||||||
|
/^start:/
|
||||||
|
:redir! >> test.out
|
||||||
|
:+1,$list
|
||||||
|
:redir END
|
||||||
|
:q!
|
||||||
|
ENDTEST
|
||||||
|
|
||||||
|
start:
|
||||||
|
fff
|
||||||
|
gg
|
||||||
|
h
|
||||||
|
iii
|
||||||
16
src/testdir/test_listchars.ok
Normal file
16
src/testdir/test_listchars.ok
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
>-------aa>-----$
|
||||||
|
..bb>---<<$
|
||||||
|
...cccc><$
|
||||||
|
dd........ee<<>-$
|
||||||
|
<$
|
||||||
|
>-------aa>-----$
|
||||||
|
..bb>---..$
|
||||||
|
...cccc>.$
|
||||||
|
dd........ee..>-$
|
||||||
|
.$
|
||||||
|
|
||||||
|
|
||||||
|
..fff>--<<$
|
||||||
|
>-------gg>-----$
|
||||||
|
.....h>-$
|
||||||
|
iii<<<<><<$
|
||||||
@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
710,
|
||||||
/**/
|
/**/
|
||||||
709,
|
709,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user