modeline nie działa w vimie

19

Mam plik o nazwie .aliasesbash i zsh, umieszczam tę linię

# vim: set filetype=bash: 

ale jeśli zrobię

: echo &ft

dostaję conf

juanpablo
źródło
Próbowałem już wszystkiego i nic nie działało. Używam vima od 18 lat. To pierwszy raz, kiedy nie udało mi się zmusić modeliny do pracy.
Bruno Bronosky,
Domyśliłam się. Odpowiedź poniżej. superuser.com/a/1174296/3376
Bruno Bronosky

Odpowiedzi:

28

To powinno działać. Sam spróbowałem tej linii i zadziałało. Możliwe, że twoja opcja „modeline” została ustawiona na „nomodeline”. Spróbuj wykonać to i zobacz, co otrzymujesz.

:verbose set modeline?

To powie ci wartość opcji „modeline”, a jeśli nie domyślną, to gdzie była ostatnio ustawiona.

Niektóre dystrybucje Linuksa ustawiają „nomodeline” w / etc / vimrc lub / usr / share / vim / vimrc jako środek bezpieczeństwa, mimo że problemy bezpieczeństwa z „modeline” zostały już dawno naprawione.

garyjohn
źródło
modeline Ostatni zestaw od ~ / .vimrc
juanpablo
dla bezpieczeństwa, zmienić modeline dodać to do mojego ~ / .vimrc au BufNewFile, BufRead * Aliasy set filetype = sh.
JuanPablo
Nie wszystkie z nich zostały od dawna naprawione. github.com/numirias/security/blob/master/doc/…
duckbrain
@duckbrain Zasadniczo niemożliwe jest zagwarantowanie, że wszystkie problemy bezpieczeństwa zostały kiedykolwiek naprawione, o ile możliwe jest dołączenie wbudowanych instrukcji, które mają być wykonane przez kod przeglądający dane w samych danych. Dlatego w dokumentacji nvi Keitha Bostica zawsze było powiedziane, modelinesże opcja jest niewdrożona i nigdy nie będzie. Jest to tak samo, jak wszystkie błędy bezpieczeństwa wynikające z poleceń osadzonych w plikach lub instrukcji makr, które można uruchamiać w plikach PDF, Word, Excel i C&C.
tchrist
14

W drugiej odpowiedzi opisuję pełną listę kontrolną debugowania .

NAPRAWDĘ mnie to zaskoczyło, ponieważ dokumentacja nie jest do końca prawdziwa.

Okazuje się, że w wersji 8 (i być może wcześniejszej) nie możesz użyć tego słowa setw swojej modelinie. Dokumentacja opisuje „drugą formę” jako istniejącą, /* vim: set ai tw=75: */ale to nie działa. Musisz użyć „pierwszej formy”// vim: ai tw=75

Uwaga: Możesz użyć jednego z tego rodzaju wskaźników komentarzy. Lub wcale.

Bruno Bronosky
źródło
To niekoniecznie jest prawdą dla wszystkich instalacji vima. Formularz z setdziała mi dobrze na vimie 8.0 (choć nie na 7.4). Warto również zauważyć, że w drugiej formie // vim: ai tw=75na końcu linii nie może być żadnych innych znaków, w przeciwnym razie vim będzie narzekał i ignorował modelinę.
Josh
Zdecydowanie należy to zgłosić jako błąd (lub jako przestarzałą dokumentację). Powtórzyłem 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. (Ostatnie wiersze oznaczają zmodyfikowane przez ... , skompilowane przez ... , ogromna wersja ... ).
LittleByBlue,
Próbowałem rozwiązać ten problem na liście mailingowej. Nie zgodzili się.
Bruno Bronosky,
@BrunoBronosky czy masz link do wątku pocztowego? Chciałbym przeczytać ich uzasadnienie.
graywolf
Oto link do wątku. groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ Tak naprawdę nie poświęciłem czasu na zrozumienie ich uzasadnienia.
Bruno Bronosky
11

set modelines=1 (lub dowolna wartość inna niż 0) w moim ~ / .vimrc sprawiło, że działał dla mnie.

Asad R.
źródło
5
Nie ma to żadnego efektu, jeśli modelinenie jest również ustawione (co jest domyślnie w Vimie, chyba że jesteś rootem)
kynan
Gentoo ma dla całego systemu set nomodelinew /etc/vimrcpowodu wszystkie luki z Modelines obchodzenia w vim.
MattBianco
W moim przypadku musiałem również ustawić modelineswartość niezerową. Pomoc mówi, że domyślnie jest 5, więc ustawiłem to i to załatwiło sprawę. Stwierdza, żeIf '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

w ~ / .vimrc musisz ustawić następujące ustawienia:

set nocompatible 
filetype plugin on
set modeline 
vahagn34
źródło
Te wiersze działają w Debianie 9. Dziękujemy!
caligari
7

Dodanie tylko następujących elementów do mojego ~/.vimrcdziałającego na moim pudełku Funtoo Linux:

set modeline
scifisamurai
źródło
Nie działa w systemie Mac!
shuva
1

Ponieważ wydaje się, że pojawia się to podczas wyszukiwania:

Miałem ten sam problem:

# vim: set filetype=sh:

nie działał, co skutkowało również ft = conf. bez modeliny w mojej ~ / .bash_alias, ft jest pusty, więc coś się zmienia.

podczas

# vim: filetype=sh:

pracował ostatnia obecność „:” wydaje się być nieistotna.

Jestem na OSX z zaparzoną wersją Vim8, dla przypomnienia.

to dziwne, ponieważ z modelki pomagają oba

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

i

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

wydają się być wspierani.

Dane wyjściowe

verbose set ft?

z „vim: filetype = sh” jest

filetype=sh
      Last set from modeline

bez modeliny:

filetype=

z „vim: set filetype = sh”

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

Gdzieś na moim koniu może występować efekt uboczny, ale niezgodna modelowa składnia jest jedyną, która działa zgodnie z oczekiwaniami.

kalfa
źródło
1

/usr/share/vim/vim80/debian.vimz vim-commonna dystrybucjach opartych na Debianiemodeline domyślnie wyłącza .

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

Musisz modelinewyraźnie włączyć w swoim .vimrclub ~/.vim/vimrcpliku.

set modeline
Simba
źródło
0

Najprawdopodobniej wynika to z wyłączenia modeliny.

Obejmuję to przez:

  1. utrzymanie go ogólnie wyłączone, aby uniknąć problemów z bezpieczeństwem.
  2. Instalowanie wtyczki securemodelines .
  3. Dodanie do białej listy tylko tych modelek, których używam.

W takim przypadku domyślnymi poleceniami z białej listy są filetype.

weshouman
źródło