Modeline funktioniert nicht in Vim


19

Ich habe eine Datei .aliasesfür bash und zsh aufgerufen , ich habe diese Zeile gesetzt

# vim: set filetype=bash: 

aber wenn ich mache

: echo &ft

Ich bekomme conf


Ich habe hier alles ausprobiert und nichts hat funktioniert. Ich benutze Vim seit 18 Jahren. Dies ist das erste Mal, dass ich Modeline nicht zum Laufen bringen konnte.
Bruno Bronosky

Herausgefunden. Antwort unten. superuser.com/a/1174296/3376
Bruno Bronosky

Antworten:


28

Das sollte funktionieren. Ich habe diese Linie selbst ausprobiert und es hat funktioniert. Ich könnte sein, dass Ihre Option 'modeline' auf 'nomodeline' gesetzt wurde. Versuchen Sie dies auszuführen und sehen Sie, was Sie bekommen.

:verbose set modeline?

Hier sehen Sie den Wert der Option 'modeline' und, falls nicht der Standardwert, den zuletzt festgelegten Wert.

Einige Linux-Distributionen haben 'nomodeline' in / etc / vimrc oder / usr / share / vim / vimrc als Sicherheitsmaßnahme festgelegt, obwohl die Sicherheitsprobleme mit 'modeline' schon lange behoben wurden.


modeline Letzter Satz von ~ / .vimrc
juanpablo

Aus Sicherheitsgründen ändere ich die Modeline, um sie zu meiner Datei ~ / .vimrc au BufNewFile, BufRead. * zu addieren. Aliase setzen filetype = sh
juanpablo

Nicht alle von ihnen wurden lange behoben. github.com/numirias/security/blob/master/doc/…
duckbrain

@duckbrain Es ist grundsätzlich unmöglich zu garantieren, dass alle Sicherheitsprobleme jemals behoben wurden, solange es jemals möglich ist, eingebettete Anweisungen, die vom Code ausgeführt werden sollen, der die Daten betrachtet, in die eigentlichen Daten aufzunehmen. Deshalb ist die Dokumentation für Keith Bostic des NVI hat gesagt , der immer , modelinesdass die Option ist nicht implementiert und dass es nie sein. Dies ist genau wie alle Sicherheitslücken, die sich aus in Dateien eingebetteten Befehlen oder Makroanweisungen ergeben und in PDF, Word, Excel, & c & c & c ausgeführt werden.
Donnerstag,

14

In dieser anderen Antwort beschreibe ich eine vollständige Debug-Checkliste .

Ich war wirklich auf diesem ein ratlos , weil die Dokumentation ist nicht ganz richtig.

Es stellt sich heraus, dass Sie in Version 8 (und möglicherweise früher) das Wort setin Ihrer Modeline nicht verwenden können. In der Dokumentation wird "das zweite Formular" als solches beschrieben /* vim: set ai tw=75: */, dies funktioniert jedoch nicht. Sie müssen "das erste Formular" verwenden// vim: ai tw=75

Hinweis: Sie können beide Arten von Kommentarindikatoren verwenden. Oder gar keine.


Dies gilt nicht unbedingt für alle vim-Installationen. Das Formular mit setfunktioniert gut für mich auf vim 8.0 (obwohl nicht auf 7.4). Erwähnenswert ist auch, dass bei der zweiten Form // vim: ai tw=75keine anderen Zeichen am Ende der Zeile stehen dürfen. Andernfalls beschwert sich vim und ignoriert die Modeline.
Josh

Dies sollte definitiv als Fehler (oder als veraltete Dokumentation) gemeldet werden. Ich reproduzierte auf 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. (Die letzten Zeilen bedeuten geändert von ... , zusammengestellt von ... , riesige Version ... ).
LittleByBlue

Ich habe versucht, es auf der Mailingliste zu adressieren. Sie waren sich nicht einig.
Bruno Bronosky

@BrunoBronosky hast du einen Link zum Mail-Thread? Möchte ihre Argumentation lesen.
Graywolf

Hier ist ein Link zum Thread. groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ Ich habe mir nicht wirklich die Zeit genommen, ihre Argumentation zu verstehen.
Bruno Bronosky

11

set modelines=1 (oder ein Wert ungleich 0) in meinem ~ / .vimrc hat es für mich funktioniert.


5
Dies hat keine Auswirkung, wenn modelinenicht auch festgelegt ist (was in Vim standardmäßig der
Fall

Gentoo hat eine systemweite set nomodelinein /etc/vimrcGrund alle Schwachstellen mit -Modelines in vim Handhabung.
MattBianco

In meinem Fall musste ich auch einen modelinesWert ungleich Null einstellen . In der Hilfe heißt es 5, dass die Standardeinstellung "" ist , und das hat mir geholfen . Die Staaten,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

In ~ / .vimrc müssen Sie Folgendes einstellen:

set nocompatible 
filetype plugin on
set modeline 

Diese Zeilen funktionieren in Debian 9. Danke!
Caligari

7

~/.vimrcFügen Sie meiner für mich auf meiner Funtoo Linux-Box ausgeführten Arbeit Folgendes hinzu:

set modeline

Funktioniert nicht in Mac!
Shuva

1

Da dies bei Suchanfragen auftaucht:

Ich hatte das gleiche problem:

# vim: set filetype=sh:

funktionierte nicht, was ebenfalls zu ft = conf führte. Ohne die Modeline in meinem ~ / .bash_alias ist ft leer, also ändert sich etwas.

während

# vim: filetype=sh:

hat funktioniert. das letzte ":" scheint irrelevant zu sein.

Ich bin auf OSX mit einer von Vim8 gebrauten Version für die Rekorde.

es ist komisch, weil von der modeline beide helfen

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

und

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

scheinen unterstützt zu werden.

Die Ausgabe von

verbose set ft?

mit "vim: filetype = sh" ist

filetype=sh
      Last set from modeline

ohne Modelin:

filetype=

mit "vim: set filetype = sh"

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

Möglicherweise gibt es irgendwo in meinem conf einen Nebeneffekt, aber die nicht kompatible Modeline-Syntax ist die einzige, die für mich wie erwartet funktioniert.


1

/usr/share/vim/vim80/debian.vimfrom vim-commonon Debian-basierte Distributionen modelinewerden standardmäßig deaktiviert .

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

Sie müssen modelineexplizit in Ihrer .vimrcoder ~/.vim/vimrcDatei aktivieren .

set modeline

0

Höchstwahrscheinlich liegt das daran, dass Modeline deaktiviert ist.

Daran arbeite ich vorbei:

  1. Deaktivieren Sie es im Allgemeinen, um Sicherheitsprobleme zu vermeiden.
  2. Installieren des SecureModelines- Plugins.
  3. Whitelisting nur die Modelines, die ich benutze.

In diesem Fall sind die Standardbefehle auf der Whitelist enthalten filetype.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.