Das Festlegen des vim-Dateityps mit Modeline funktioniert nicht wie erwartet


12

Gemäß der akzeptierten Antwort auf diese Frage versuche ich, Modelines in vim zu verwenden, um die Erkennung von Dateitypen in einigen Dateien zu erzwingen.

Beispielsweise habe ich am Anfang einer Datei mit dem Namen gitconfig(beachten Sie, dass es keine führenden Zeichen gibt .) die folgende Zeile:

# vim: set filetype=gitconfig : 

modelineist auf meinem System aktiviert. Allerdings, wenn ich die Datei in vim, öffnen Sie set filetype?kehrt conf, anstatt die erwartete gitconfig.

Ist es möglich, dass andere Teile meiner vim-Konfiguration (z. B. Dateityp.vim) dieses seltsame Verhalten verursachen?

Als Antwort auf Kommentare bearbeitet:

set compatible? kehrt zurück nocompatible

set modeline? kehrt zurück modeline

verbose set filetype? kehrt zurück:

filetype=conf
      Last set from /usr/share/vim/vim73/filetype.vim

Ich verstehe nicht, warum das systemweite Dateityp-Plugin das überschreibt, was ich in der Datei selbst festgelegt habe.

Ein letzter Hinweis: Dies ist die mit OSX gelieferte Version von Vim 7.3.

Die neueste Version von MacVim wird auf demselben System ausgeführt und .vimrcverhält sich erwartungsgemäß mit der set ft?Rückkehr filetype=gitconfig.


Normalerweise sah ich diese Optionen am Ende (letzte Zeile) von Dateien - vielleicht ist das das Problem ...
rozcietrzewiacz

Nur um sicherzugehen: Haben Sie überprüft, dass set modeline?nicht gedruckt wird nomodeline?
rozcietrzewiacz

Ich finde, die häufigste Ursache dafür, dass Modeline nicht funktioniert, compatibleist die eingestellte Ursache . Das wäre auch eine Prüfung wert.
Edd Steel

Siehe aktualisierte Frage für Antworten.
Murali Suriar

Antworten:


21

Also, nach einiger Graben heraus , dass das System vimrcausgeliefert mit OSX stellt die modelines( man beachte die Hinter ‚s‘) Variable auf 0. Diese Variable steuert die Anzahl der Zeilen in einer Datei , die für Set - Befehle überprüft werden. Das Setzen von Modelines auf einen Wert ungleich Null .vimrclöste das Problem.

Volle Ausgabe, für Neugierige: Die Ausgabe von vim --versionhat mich dazu veranlasst, das System zu überprüfen. Vimrc:

% vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jun 24 2011 20:00:09)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
...
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -D_FORTIFY_SOURCE=0 -Iproto -DHAVE_CONFIG_H -arch i386 -arch x86_64 -g -Os -pipe
Linking: gcc -arch i386 -arch x86_64 -o vim -lncurses

Betrachtet man das System vimrc:

% cat /usr/share/vim/vimrc 
" Configuration file for vim
set modelines=0         " CVE-2007-2438
...

Führte mich zu der modelinesVariablen. Es sieht so aus, als würde MacVim diese Systemdatei nicht als Quelle verwenden (wenn Sie stattdessen nach einem System-GVIMRC suchen, :help startupist dies nicht klar).

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jul 27 2011 19:46:24)
MacOS X (unix) version
Included patches: 1-260
Compiled by XXXXX
Huge version with MacVim GUI.  Features included (+) or not (-):
...
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/Applications/MacVim.app/Contents/Resources/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MACVIM -Wall -Wno-unknown-pragmas -p
ipe  -DMACOS_X_UNIX -no-cpp-precomp  -g -O2 -D_FORTIFY_SOURCE=1
Linking: gcc   -L.         -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -L/usr/local/lib -o V
im -framework Cocoa -framework Carbon      -lncurses  -liconv -framework Cocoa    -fstack-prote
ctor -L/usr/local/lib  -L/System/Library/Perl/5.10/darwin-thread-multi-2level/CORE -lperl -lm -
lutil -lc -framework Python   -framework Ruby

1

Damit dies auf meinem macOS-System funktioniert, musste ich einige Einstellungen in ~ / .vimrc vornehmen:

modeline
modelines=2

Wobei ' modeline ' die Verwendung von Einstellungen in der Datei aktiviert und ' modelines = # ' die Anzahl der Zeilen festlegt, die vim / vi auf gesetzte Befehle überprüft.

Nachdem diese Parameter festgelegt wurden, konnte ich die Syntax wie in der folgenden Zeile in meinen Dateien verwenden, um die festgelegten Parameter zu überschreiben.

# vim: ts=4 sw=4 ai
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.