2011-12-20 14 views
8

Ho un file di testo su un sistema unix. Il seguente contenuto del file di testo crea il problema:vim e518: opzione sconosciuta:

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

Quindi, se corro: vim test.txt, ottengo il seguente errore:

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

Se cancello la mia ~/.vimrc, l'errore scompare. Ma ciò che è strano è che, anche con un file vuoto ~/.vimrc, appare l'errore.

Capisco che è perché la linea inizia con vi: che l'errore è stato creato, ma non capisco perché o come risolvere questo problema.

risposta

9

La riga vi: bad line è in un formato che Vim riconosce come modeline, come indicato nel messaggio di errore. Le modeline consentono di impostare le opzioni all'interno di un file.

Il motivo per cui non viene attivato quando non si dispone di un ~/.vimrc è perché Vim richiede di avere 'nocompatible' impostato per modelines per essere abilitati di default, dal momento che è una caratteristica specifica per Vim. L'esistenza di ~/.vimrc è sufficiente per consentire a Vim di passare dalla modalità vi-compatibile a nocompatible, il che comporterà l'impostazione dell'opzione 'modeline'.

Per riferimento futuro, è possibile trovare facilmente gli argomenti della guida in Vim tramite :help topic<Tab>. In questo caso, :help modeline<Tab> ti avrebbe dato alcuni argomenti da esaminare in cui spiegare questa funzione e come controllarla.

+0

Grazie. Segnalo come risposta accettata perché spiega sia cosa stia succedendo e perché (presenza di vimrc). – Danosaure

+0

così vim capisce le ultime righe 'n' come' modelines' (cioè le impostazioni di vim) quindi è desiderabile che si debbano mantenere le ultime righe 'n' del proprio codice su linee vuote o su' vim modelines' per evitare questo errore. – shahjapan

10

è possibile disattivare l'elaborazione modeline con

:set nomodeline 

Vedere :help modeline per ulteriori informazioni.

1

Sotto :help auto-setting a trovare questo paragrafo:

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:"). 

Quindi, probabilmente, nel vostro ~/.vimrc si dispone di un set nomodeline.

La riga che legge vi: bad line tenta di impostare l'opzione bad e line che non può essere impostata, quindi l'errore.

EDIT: Come sottolineato da risposta jamessan'S (1), l'opzione modeline è impostata attraverso la definizione di nocompatible dalla mera esistenza di ~/.vimrc.

+0

Grazie mille per la spiegazione. La cosa strana è che la mia linea era solo qualche riga 696 in una linea 1000+ (è grande/etc/group come file). Ma risolve il mio problema. – Danosaure

Problemi correlati