modeline no funciona en vim

19

Tengo un archivo llamado .aliasesbash y zsh, pongo esta línea

# vim: set filetype=bash: 

pero si hago

: echo &ft

yo obtengo conf

Juan Pablo
fuente
He intentado todo aquí y nada ha funcionado. He estado usando vim durante 18 años. Esta es la primera vez que no logro que modeline funcione.
Bruno Bronosky
Lo averigué. Responda abajo. superuser.com/a/1174296/3376
Bruno Bronosky

Respuestas:

28

Eso debería funcionar. Probé esa línea yo mismo y funcionó. Podría ser que su opción 'modeline' se haya configurado en 'nomodeline'. Intenta ejecutar esto y mira lo que obtienes.

:verbose set modeline?

Eso le dirá el valor de la opción 'modeline' y, si no es la predeterminada, dónde se configuró por última vez.

Algunas distribuciones de Linux establecen 'nomodeline' en / etc / vimrc o / usr / share / vim / vimrc como medida de seguridad, a pesar de que los problemas de seguridad con 'modeline' se han solucionado durante mucho tiempo.

garyjohn
fuente
modeline Último set desde ~ / .vimrc
juanpablo
por seguridad, cambio la línea de modo para agregar esto a mi ~ / .vimrc au BufNewFile, BufRead. * aliases set filetype = sh
juanpablo
No todos han sido reparados por mucho tiempo. github.com/numirias/security/blob/master/doc/…
duckbrain
@duckbrain Es fundamentalmente imposible garantizar que todos los problemas de seguridad se hayan solucionado siempre que sea posible incluir instrucciones incrustadas para que el código las ejecute mirando los datos en los mismos datos. Es por eso que la documentación para el nvi de Keith Bostic siempre ha dicho modelinesque la opción no está implementada y que nunca lo estará. Esto es igual que todos los errores de seguridad derivados de comandos integrados en archivos o instrucciones de macro para ejecutar en PDF, Word, Excel, & c & c & c.
tchrist
14

Describo una lista de verificación de depuración completa en esta otra respuesta .

Realmente me quedé perplejo con esto porque la documentación no es del todo cierta.

Resulta que en la versión 8 (y tal vez antes) no puede usar la palabra seten su línea de modo. La documentación describe "la segunda forma" como tal, /* vim: set ai tw=75: */pero esto no funciona. Tienes que usar "la primera forma"// vim: ai tw=75

Nota: Puede usar cualquiera de esos tipos de indicadores de comentarios. O ninguno en absoluto.

Bruno Bronosky
fuente
Esto no es necesariamente cierto para todas las instalaciones de vim. El formulario con setfunciona bien para mí en vim 8.0 (aunque no en 7.4). También vale la pena señalar que con la segunda forma // vim: ai tw=75, no puede haber otros caracteres al final de la línea, o vim se quejará e ignorará la línea de modelo.
Josh
Esto definitivamente debe informarse como un error (o como documentaciones desactualizadas). Reproduje en VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:44:48) Inklusive der Korrekturen: 1-1689 Extra-Patches: 8.0.0056 Verändert von [email protected] Übersetzt von [email protected] Riesige Version mit GTK2-GNOME GUI. (Las últimas líneas significan modificado por ... , compilado por ... , versión enorme ... ).
LittleByBlue
Traté de abordarlo en la lista de correo. No estuvieron de acuerdo.
Bruno Bronosky
@BrunoBronosky, ¿tiene un enlace al hilo de correo? Me gustaría leer su razonamiento.
graywolf
Aquí hay un enlace al hilo. groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ Realmente no me tomé el tiempo para entender su razonamiento.
Bruno Bronosky
11

set modelines=1 (o cualquier valor que no sea 0) en mi ~ / .vimrc lo hizo funcionar para mí.

Asad R.
fuente
55
Esto no tiene ningún efecto si modelineno se establece también (que es por defecto en Vim a menos que sea root)
kynan
Gentoo tiene un sistema de amplia set nomodelineen /etc/vimrcdebido a todas las vulnerabilidades con modelines manipulación en vim.
MattBianco
En mi caso, también tuve que establecer modelinesun valor distinto de cero. La ayuda dice que el valor predeterminado es 5, así que eso es lo que configuré y eso me funcionó. Los estados que,If 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.
Ben
9

en ~ / .vimrc necesita establecer lo siguiente:

set nocompatible 
filetype plugin on
set modeline 
vahagn34
fuente
Esas líneas funcionan en Debian 9. ¡Gracias!
caligari
7

Agregando solo lo siguiente a mi ~/.vimrctrabajo para mí en mi caja Funtoo Linux:

set modeline
scifisamurai
fuente
¡No funciona en mac!
shuva
1

Dado que esto parece aparecer en las búsquedas:

Yo tuve el mismo problema:

# vim: set filetype=sh:

no funcionó, lo que resultó en ft = conf también. sin la línea de modelo en mi ~ / .bash_alias, ft está vacío, por lo que algo cambia.

mientras

# vim: filetype=sh:

trabajó. la última presencia ":" parece ser irrelevante.

Estoy en OSX con una versión elaborada de Vim8, para los registros.

es raro porque de la ayuda modeline tanto

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

y

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

Parece ser compatible.

La salida de

verbose set ft?

con "vim: filetype = sh" es

filetype=sh
      Last set from modeline

sin modeline:

filetype=

con "vim: set filetype = sh"

filetype=conf
     Last set from /usr/local/Cellar/vim/8.0.1350/share/vim/vim80/filetype.vim

Puede haber un efecto secundario en alguna parte de mi conf, pero la sintaxis de modeline no compatible es la única que funciona como se esperaba para mí.

kalfa
fuente
1

/usr/share/vim/vim80/debian.vimdesde vim-commonen distribuciones basadas en Debian se deshabilita modelinepor defecto.

" modelines have historically been a source of security/resource
" vulnerabilities -- disable by default, even when 'nocompatible' is set
set nomodeline

Usted tiene que permitir modelineexplícitamente en su .vimrco ~/.vim/vimrcarchivo.

set modeline
Simba
fuente
0

Lo más probable es que se deba a que la línea de modelo está deshabilitada.

Yo trabajo alrededor de eso por:

  1. mantenerlo desactivado en general para evitar problemas de seguridad.
  2. Instalación del complemento securemodelines .
  3. Incluyendo en la lista blanca solo las modelinas que uso.

En este caso, los comandos predeterminados de la lista blanca incluyen filetype.

Weshouman
fuente