modeline ne fonctionne pas dans vim


19

J'ai un fichier appelé .aliasesbash et zsh, je mets cette ligne

# vim: set filetype=bash: 

mais si je fais

: echo &ft

Je reçois conf


J'ai tout essayé ici et rien n'a fonctionné. J'utilise vim depuis 18 ans. C'est la première fois que je n'arrive pas à faire fonctionner la modeline.
Bruno Bronosky

Deviner. Réponse ci-dessous. superuser.com/a/1174296/3376
Bruno Bronosky

Réponses:


28

Cela devrait fonctionner. J'ai essayé cette ligne moi-même et cela a fonctionné. Je pourrais être que votre option «modeline» a été définie sur «nomodeline». Essayez d'exécuter cela et voyez ce que vous obtenez.

:verbose set modeline?

Cela vous indiquera la valeur de l'option 'modeline' et sinon la valeur par défaut, où elle a été définie pour la dernière fois.

Certaines distributions Linux définissent 'nomodeline' dans / etc / vimrc ou / usr / share / vim / vimrc comme mesure de sécurité, même si les problèmes de sécurité avec 'modeline' sont résolus depuis longtemps.


modeline Dernier set de ~ / .vimrc
juanpablo

pour des raisons de sécurité, je modifie la modélisation pour l'ajouter à mon ~ / .vimrc au BufNewFile, BufRead. * alias set filetype = sh
juanpablo

Tous n'ont pas été réglés depuis longtemps. github.com/numirias/security/blob/master/doc/…
duckbrain

@duckbrain Il est fondamentalement impossible de garantir que tous les problèmes de sécurité ont été résolus tant qu'il est toujours possible d'inclure des instructions intégrées à exécuter par le code qui examine les données dans les données elles-mêmes. C'est pourquoi la documentation du nvi de Keith Bostic a toujours dit modelinesque l'option n'est pas mise en œuvre et qu'elle ne le sera jamais. C'est comme tous les bogues de sécurité provenant de commandes intégrées à des fichiers ou d'instructions de macro à exécuter en PDF, Word, Excel, etc., etc.
tchrist

14

Je décris une liste de contrôle de débogage complète dans cette autre réponse .

J'étais VRAIMENT perplexe sur celui-ci car la documentation n'est pas entièrement vraie.

Il s'avère que dans la version 8 (et peut-être plus tôt), vous ne pouvez pas utiliser le mot setdans votre modélisation. La documentation décrit "le deuxième formulaire" comme étant /* vim: set ai tw=75: */mais cela ne fonctionne pas. Vous devez utiliser "le premier formulaire"// vim: ai tw=75

Remarque: vous pouvez utiliser l'un de ces types d'indicateurs de commentaire. Ou pas du tout.


Ce n'est pas nécessairement vrai pour toutes les installations vim. La forme avec setfonctionne bien pour moi sur vim 8.0 (mais pas sur 7.4). Il convient également de noter qu'avec le deuxième formulaire // vim: ai tw=75, il ne peut pas y avoir d'autres caractères à la fin de la ligne, ou vim se plaindra et ignorera la modeline.
Josh

Cela devrait être définitivement signalé comme un bug (ou comme des documentations obsolètes). J'ai reproduit sur 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 pkg-vim-maintainers@lists.alioth.debian.org Übersetzt von pkg-vim-maintainers@lists.alioth.debian.org Riesige Version mit GTK2-GNOME GUI. (Les dernières lignes signifient modifié par ... , compilé par ... , version énorme ... ).
LittleByBlue

J'ai essayé de l'adresser sur la liste de diffusion. Ils n'étaient pas d'accord.
Bruno Bronosky

@BrunoBronosky avez-vous un lien vers le fil de discussion? Aimerait lire son raisonnement.
graywolf

Voici un lien vers le fil. groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ Je n'ai pas vraiment pris le temps de comprendre leur raisonnement.
Bruno Bronosky

11

set modelines=1 (ou toute valeur différente de 0) dans mon ~ / .vimrc l'a fait fonctionner pour moi.


5
Cela n'a aucun effet si modelinen'est pas également défini (ce qui est par défaut dans Vim sauf si vous êtes root)
kynan

Gentoo a un système à l'échelle set nomodelineen /etc/vimrcraison de toutes les vulnérabilités avec la manipulation des modelines dans vim.
MattBianco

Dans mon cas, j'ai également dû définir modelinesune valeur non nulle. L'aide indique que la valeur par défaut est 5, c'est donc ce que je l'ai défini et cela a fait l'affaire pour moi. Le déclare 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

dans ~ / .vimrc, vous devez définir ce qui suit:

set nocompatible 
filetype plugin on
set modeline 

Ces lignes fonctionnent dans Debian 9. Merci!
caligari

7

Ajouter juste ce qui suit à mon ~/.vimrctravail pour moi sur ma boîte Funtoo Linux:

set modeline

Ne fonctionne pas sous mac!
shuva

1

Étant donné que cela semble apparaître dans les recherches:

J'ai eu le même problème:

# vim: set filetype=sh:

n'a pas fonctionné, ce qui entraîne également ft = conf. sans la modeline dans mon ~ / .bash_alias, ft est vide, donc quelque chose change.

tandis que

# vim: filetype=sh:

travaillé. la dernière présence ":" ne semble pas pertinente.

Je suis sur OSX avec une version brassée Vim8, pour mémoire.

c'est bizarre parce que la modeline aide à la fois

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

et

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

semblent être pris en charge.

La sortie de

verbose set ft?

avec "vim: filetype = sh" est

filetype=sh
      Last set from modeline

sans modeline:

filetype=

avec "vim: set filetype = sh"

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

Il peut y avoir un effet secondaire quelque part dans ma conf, mais la syntaxe de modeline non compatible est la seule qui fonctionne comme prévu pour moi.


1

/usr/share/vim/vim80/debian.vimfrom vim-commonsur les distributions basées sur Debian désactive modelinepar défaut.

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

Vous devez activer modelineexplicitement dans votre fichier .vimrcou ~/.vim/vimrc.

set modeline

0

Cela est probablement dû à la désactivation de la modeline.

Je travaille autour de cela en:

  1. le garder généralement désactivé pour éviter tout problème de sécurité.
  2. Installation du plugin securemodelines .
  3. Liste blanche uniquement les modèles que j'utilise.

Dans ce cas, les commandes par défaut sur liste blanche incluent filetype.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.