Ошибка Vim: E474: Недопустимый аргумент: listchars = tab: "·, trail: ·

Резюме:

Я получаю следующую ошибку для того, чтобы следующая строка в моем файле .vimrc

Ошибка:

E474: Invalid argument: listchars=tab:»·,trail:·

.vimrc:

set list listchars=tab:»·,trail:·

Я исследовал это, и похоже, что он правильно связан с кодировкой UTF-8.

Настройка системы:

lsb_release:

Distributor ID: Ubuntu
Description:    Ubuntu 12.04 LTS
Release:        12.04
Codename:       precise

Язык:

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

Ответ 1

Решение:

Поместите следующие строки вверху .vimrc в сообщении об ошибке:

.vimrc:

scriptencoding utf-8
set encoding=utf-8

Ответ 2

Ни один из других решений не работал у меня.

Мой listchars выглядит следующим образом:

listchars=eol:~,tab:>.,trail:~,extends:>,precedes:<,space:_

Проблема заключалась в том, что мой Vim слишком стар для параметра space: в listchars. Как мы можем прочитать этот пост (я изменил цитату, чтобы сделать ее более читаемой):

space: был добавлен в listchars в v7.4.710 в 2015-04-21 by Bram. В дистрибутиве Debian Vim не предлагается 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

Ответ 3

Не настоящее решение вашей конкретной проблемы, но другой (не-utf8-safe) способ может быть просто для использования символов ASCII, например:

set listchars=tab:>-,trail:.,precedes:<,extends:>

Если у вас есть UTF-8, решение Justins, конечно, лучше.