Vim错误:E474:参数无效:listchars = tab:»·,trail:·

Jus*_*eck 46 vim

摘要:

我在.vimrc文件中包含以下行时收到以下错误

错误:

E474: Invalid argument: listchars=tab:»·,trail:·
Run Code Online (Sandbox Code Playgroud)

.vimrc中:

set list listchars=tab:»·,trail:·
Run Code Online (Sandbox Code Playgroud)

我研究了这个,它似乎与正确设置的UTF-8编码有关.

系统设置:

lsb_release:

Distributor ID: Ubuntu
Description:    Ubuntu 12.04 LTS
Release:        12.04
Codename:       precise
Run Code Online (Sandbox Code Playgroud)

地点:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=en_US
Run Code Online (Sandbox Code Playgroud)

Jus*_*eck 91

解:

将以下行放在.vimrc的顶部错误提及:

.vimrc中:

scriptencoding utf-8
set encoding=utf-8
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你。然而,`:h scriptsncoding` 说: _如果你在`.vimrc` 中设置了`encoding` 选项,`:scriptencoding` 必须放在它之后。这两行应该相反吗? (2认同)

Mat*_*ski 17

其他解决方案都不适合我.

listchars看起来像这样:

listchars=eol:~,tab:>.,trail:~,extends:>,precedes:<,space:_
Run Code Online (Sandbox Code Playgroud)

问题是我的Vim对于space:参数来说太旧了listchars.我们可以在这篇文章中看到(我修改了引用以使其更具可读性):

space:被Bram于2015-04-21 添加listchars进来v7.4.710.Vim的Debian安装版本不提供space:.

删除尾随,space:_解决了问题.


可是等等!我希望我的vimrc可以移植

好吧,正如816-8055建议您可以if has()在您的vimrc中使用:

if has("patch-7.4.710")
    listchars=eol:~,tab:>.,trail:~,extends:>,precedes:<,space:_
else
    listchars=eol:~,tab:>.,trail:~,extends:>,precedes:<
endif
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,为我修好了.我现在在我的*.vimrc*中使用`if has("patch-7.4.710")`因为我在不同的系统上有不同的版本. (3认同)

Ben*_*Ben 6

不是您特定问题的真正解决方案,但另一种(非 utf8 安全)方法可能只是使用 ASCII 字符,如下所示:

set listchars=tab:>-,trail:.,precedes:<,extends:>
Run Code Online (Sandbox Code Playgroud)

如果您有可用的 UTF-8,Justins 解决方案当然是更好的解决方案。


Tar*_*rei 6

只是放置set encoding=utf8在我的 _vimrc 中的任何位置,但在set lcs=tab:>-,trail:·,nbsp:·,extends:>,precedes:<解决它之前

  • 这对我有用,但只有在我正确拼写“encoding”之后;) (2认同)