2011-12-20 38 views
8

Tengo un archivo de texto en un sistema Unix. El contenido siguiente archivo de texto crea el problema:vim e518: opción desconocida:

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

Así que si me quedo: vim test.txt, me sale el siguiente error:

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

Si elimino mi ~/.vimrc, el error desaparece. Pero lo que es extraño es que, incluso con un archivo ~/.vimrc vacío, aparece el error.

Entiendo que es porque la línea comienza con vi: que se ha creado el error, pero no entiendo por qué o cómo solucionarlo.

Respuesta

9

La línea vi: bad line está en un formato que Vim reconoce como modeline, como se menciona en el mensaje de error. Las líneas de modelado permiten establecer opciones dentro de un archivo.

La razón por la que no se activa cuando no tiene un ~/.vimrc es porque Vim requiere que tenga 'nocompatible' configurado para que las modelinas se habiliten de forma predeterminada, ya que es una función específica de Vim. La existencia de ~/.vimrc es suficiente para que Vim cambie del modo compatible con vi a no compatible, lo que dará lugar a que también se establezca la opción 'modeline'.

Para futuras consultas, puede encontrar fácilmente temas de ayuda en Vim a través del :help topic<Tab>. En este caso, :help modeline<Tab> le habría dado algunos temas para analizar en los que se explica esta característica y cómo controlarla.

+0

Gracias. Marcaré esto como una respuesta aceptada porque explica tanto lo que está sucediendo como por qué (presencia de vimrc). – Danosaure

+0

por lo que vim entiende las últimas líneas 'n' como' modelines' (es decir, las configuraciones vim) por lo que es deseable que las últimas 'n' líneas de su código sean líneas vacías o' vim modelines' reales para evitar este error. – shahjapan

10

Usted puede desactivar el procesamiento de modeline con

:set nomodeline 

Ver :help modeline para más información.

1

Bajo :help auto-setting a encontrar este párrafo:

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

Así que, probablemente, en su ~/.vimrc tiene una set nomodeline.

La línea que lee vi: bad line intenta establecer la opción bad y line que no se puede establecer, de ahí el error.

EDITAR: Como se ha señalado por respuesta DE jamessan (1), la opción modeline se establece mediante la fijación de nocompatible por la mera existencia de ~/.vimrc.

+0

Muchas gracias por la explicación. Lo extraño es que mi línea era solo una línea 696 en una línea de más de 1000 (es un gran archivo/etc/group like). Pero soluciona mi problema. – Danosaure

Cuestiones relacionadas