我在我的Windows 10系统上安装了gVim 8.0.69以及Cygwin。我使用相同的.vimrc来保持它们同步。有些设置不适用于两者,所以我在.vimrc中使用了一些条件表达式来有选择地应用设置:
if !(has("gui_running"))
if version >= 747
" line 199 is the next line
set listchars=eol:-|,tab:>_,trail:~,extends:>,precedes:<,space:_
else
set listchars=eol:-|,tab:>_,trail:~,extends:>,precedes:<,
endif
endif
gVim在启动时报告以下错误:
Error detected while processing C:\Users\<user name>\.vimrc:
line 199:
E488: Trailing characters: ,tab:>_,trail:~,extends:>,precedes:<,space:_
行号是指第一个set listchars
命令。
在gVim窗口中执行:echo !(has("gui_running"))
报告0
,:echo has("gui_running")
返回1
,因此我知道条件在程序启动后正确评估
为什么这条线甚至被执行?
答案 0 :(得分:3)
问题不仅来自|
字符,而且主要来自输入字符串设置eol
的字符数。
从:help listchars
开始说:
*lcs-eol*
eol:c Character to show at the end of each line. When
omitted, there is no extra character at the end
这意味着eol
最多需要 1个单一字符,但您给了它两个:-
和|
。< / p>
如果您仍想按eol
列出|
,则需要转义,以便它不会被解释为管道。
在这种情况下确切的set
cmd:
set listchars=eol:\|,tab:>_,trail:~,extends:>,precedes:<,space:_
答案 1 :(得分:2)
我不确定,但vim仍然需要扫描命令才能找到相应的else
或endif
。
那里有一个|
; |
是一个命令分隔符。你可以写
if ...
set foo=bar|endif
所以vim必须查看管道后面的部分才能看到它是什么命令。
我认为您需要使用set listchars=eol:-\|,tab:>_,...
转义管道。