2011-12-20 2 views
8

У меня есть текстовый файл в системе unix. Следующее содержание текстового файла создает проблему:vim e518: неизвестный вариант:

good: ok line 
vi: bad line 
ok: ok line

Так что, если я бегу: vim test.txt, я получаю следующее сообщение об ошибке:

"test.txt" 3L, 39C 
Error detected while processing modelines: 
line 2: 
E518: Unknown option: bad 
Press ENTER or type command to continue

Если удалить мой ~/.vimrc, ошибка исчезает. Но странно то, что даже с пустым файлом ~/.vimrc появляется ошибка.

Я понимаю, что это потому, что строка начинается с vi:, что ошибка создана, но я не понимаю, почему и как это исправить.

ответ

9

Линия vi: bad line находится в формате, который Vim распознает как modeline, как указано в сообщении об ошибке. Моделисты позволяют задавать параметры внутри файла.

Причина, по которой она не срабатывает, когда у вас нет ~/.vimrc, заключается в том, что у Vim требуется, чтобы у вас было установлено 'nocompatible', чтобы моделирование было включено по умолчанию, так как это специальная функция Vim. Существование ~/.vimrc достаточно для того, чтобы Vim переключился с vi-совместимого режима на несовместимый, хотя это также приведет к установке опции 'modeline'.

В будущем с помощью справки вы можете легко найти разделы справки в Vim через :help topic<Tab>. В этом случае :help modeline<Tab> дал бы вам несколько тем, в которых можно было бы объяснить эту функцию и как ее контролировать.

+0

Спасибо. Я буду отмечать это как принятый ответ, потому что он объясняет, как это происходит и почему (наличие vimrc). – Danosaure

+0

поэтому vim понимает последние строки 'n' как' modelines' (т. Е. Настройки vim), поэтому желательно, чтобы во избежание этой ошибки сохранялись последние строки 'n' его кода либо пустыми строками, либо фактическими' vim modelines'. – shahjapan

10

Вы можете отключить обработку режимной с

:set nomodeline 

См :help modeline для получения дополнительной информации.

1

Под :help auto-setting вы найдете этот пункт:

3. If you start editing a new file, and the 'modeline' option is on, a 
    number of lines at the beginning and end of the file are checked for 
    modelines. This is explained here. 

There are two forms of modelines. The first form: 
    [text]{white}{vi:|vim:|ex:}[white]{options} 

[text]  any text or empty 
{white}  at least one blank character (<Space> or <Tab>) 
{vi:|vim:|ex:} the string "vi:", "vim:" or "ex:" 
[white]  optional white space 
{options} a list of option settings, separated with white space or ':', 
     where each part between ':' is the argument for a ":set" 
     command (can be empty) 

Example: 
    vi:noai:sw=3 ts=6 ~ 

The second form (this is compatible with some versions of Vi): 

    [text]{white}{vi:|vim:|ex:}[white]se[t] {options}:[text] 

[text]  any text or empty 
{white}  at least one blank character (<Space> or <Tab>) 
{vi:|vim:|ex:} the string "vi:", "vim:" or "ex:" 
[white]  optional white space 
se[t]  the string "set " or "se " (note the space) 
{options} a list of options, separated with white space, which is the 
     argument for a ":set" command 
:  a colon 
[text]  any text or empty 

Example: 
    /* vim: set ai tw=75: */ ~ 

The white space before {vi:|vim:|ex:} is required. This minimizes the chance 
that a normal word like "lex:" is caught. There is one exception: "vi:" and 
"vim:" can also be at the start of the line (for compatibility with version 
3.0). Using "ex:" at the start of the line will be ignored (this could be 
short for "example:"). 

Так что, возможно, в вашем файле ~/.vimrc у вас есть set nomodeline.

Считывание строки vi: bad line пытается установить опцию bad и line, которая не может быть установлена, следовательно, ошибка.

EDIT: Как отметил ответ jamessan'S (+1), опция modeline устанавливается через установку nocompatible путем простого существования ~/.vimrc.

+0

Большое спасибо за объяснение. Странно, что моя строка была всего лишь строкой 696 в 1000+ (большой файл/etc/group like). Но это решает мою проблему. – Danosaure

Смежные вопросы