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

Juan Pablo
la source
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.

garyjohn
la source
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.

Bruno Bronosky
la source
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 [email protected] Übersetzt von [email protected] 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.

Asad R.
la source
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 
vahagn34
la source
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
scifisamurai
la source
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.

kalfa
la source
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
Simba
la source
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.

Weshouman
la source