la modelina non funziona in vim


19

Ho un file chiamato .aliasesper bash e zsh, ho messo questa riga

# vim: set filetype=bash: 

ma se lo faccio

: echo &ft

ottengo conf


Ho provato di tutto qui e niente ha funzionato. Uso vim da 18 anni. Questa è la prima volta che non riesco a far funzionare la modeline.
Bruno Bronosky,

Risposte:


28

Dovrebbe funzionare. Ho provato quella linea da solo e ha funzionato. Potrei essere che la tua opzione "modeline" sia stata impostata su "nomodeline". Prova a eseguire questo e vedi cosa ottieni.

:verbose set modeline?

Questo ti dirà il valore dell'opzione 'modeline' e, se non il valore predefinito, dove è stato impostato l'ultima volta.

Alcune distribuzioni Linux impostano 'nomodeline' in / etc / vimrc o / usr / share / vim / vimrc come misura di sicurezza, anche se i problemi di sicurezza con 'modeline' sono stati risolti da tempo.


modeline Ultimo set da ~ / .vimrc
juanpablo

per sicurezza, cambio la modeline per aggiungerla al mio ~ / .vimrc au BufNewFile, BufRead. * aliases set filetype = sh
juanpablo

Non tutti sono stati riparati a lungo. github.com/numirias/security/blob/master/doc/…
duckbrain

@duckbrain È fondamentalmente impossibile garantire che tutti i problemi di sicurezza siano mai stati risolti fintanto che è possibile includere istruzioni incorporate che devono essere eseguite dal codice guardando i dati nei dati stessi. Questo è il motivo per cui la documentazione per la nvi di Keith Bostic ha sempre affermato modelinesche l'opzione non è stata implementata e che non lo sarà mai. Questo è proprio come tutti i bug di sicurezza derivanti da comandi incorporati nel file o istruzioni macro da eseguire in PDF, Word, Excel, ecc.
Tchrist

14

Descrivo una checklist completa di debug in questa altra risposta .

Sono stato DAVVERO sconcertato su questo perché la documentazione non è del tutto vera.

Si scopre che nella versione 8 (e forse prima) non puoi usare la parola setnella tua modeline. La documentazione descrive "il secondo modulo" come se fosse /* vim: set ai tw=75: */ma questo non funziona. Devi usare "il primo modulo"// vim: ai tw=75

Nota: è possibile utilizzare uno di questi tipi di indicatori di commento. O niente affatto.


Questo non è necessariamente vero per tutte le installazioni di VIM. Il modulo con setfunziona bene per me su vim 8.0 (anche se non su 7.4). Vale anche la pena notare che con il secondo modulo // vim: ai tw=75, non ci possono essere altri personaggi alla fine della riga, o vim si lamenterà e ignorerà la modina.
Josh,

Questo dovrebbe essere sicuramente segnalato come un bug (o come documentazione obsoleta). Ho riprodotto su 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. (Le ultime righe significano modificate da ... , compilate da ... , versione enorme ... ).
LittleByBlue,

Ho provato ad indirizzarlo sulla mailing list. Non erano d'accordo.
Bruno Bronosky,

@BrunoBronosky hai un link al thread della posta? Vorrei leggere il loro ragionamento.
Lupo grigio,

Ecco un link al thread. groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ Non ho davvero avuto il tempo di capire il loro ragionamento.
Bruno Bronosky,

11

set modelines=1 (o qualsiasi valore diverso da 0) nel mio ~ / .vimrc è riuscito a farlo funzionare per me.


5
Questo non ha alcun effetto se modelinenon è impostato anche (che è di default in Vim a meno che tu non sia root)
kynan

Gentoo ha un sistema set nomodelinea /etc/vimrccausa di tutte le vulnerabilità con la gestione dei modelli in vim.
MattBianco,

Nel mio caso, ho anche dovuto impostare modelinesun valore diverso da zero. L'aiuto dice che l'impostazione predefinita è 5, quindi è quello che ho impostato e che ha fatto il trucco per me. Lo afferma che,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 devi impostare quanto segue:

set nocompatible 
filetype plugin on
set modeline 

Quelle righe funzionano in Debian 9. Grazie!
caligari,

7

Aggiungendo solo quanto segue al mio ha ~/.vimrcfunzionato per me sul mio box Funtoo Linux:

set modeline

Non funziona in Mac!
shuva,

1

Dal momento che questo sembra apparire nelle ricerche:

Ho avuto lo stesso problema:

# vim: set filetype=sh:

non ha funzionato, risultando anche in ft = conf. senza la modeline nel mio ~ / .bash_alias, ft è vuoto, quindi qualcosa cambia.

mentre

# vim: filetype=sh:

lavorato. l'ultima presenza ":" sembra essere irrilevante.

Sono su OSX con una versione prodotta da Vim8, per la cronaca.

è strano perché dalla modeline aiutano entrambi

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

e

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

sembra essere supportato.

L'output di

verbose set ft?

con "vim: filetype = sh" è

filetype=sh
      Last set from modeline

senza modeline:

filetype=

con "vim: set filetype = sh"

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

Potrebbe esserci un effetto collaterale da qualche parte nella mia configurazione, ma la sintassi della modelina non compatibile è l'unica che funziona come previsto per me.


1

/usr/share/vim/vim80/debian.vimda vim-commonsu Le distribuzioni basate su Debian disabilitano modelinedi default.

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

Devi abilitare modelineesplicitamente nel tuo .vimrco ~/.vim/vimrcfile.

set modeline

0

Molto probabilmente ciò è dovuto al fatto che la modelina è disabilitata.

Ci lavoro attorno a:

  1. tenerlo disabilitato in generale per evitare problemi di sicurezza.
  2. Installazione del plugin securemodelines .
  3. Autorizzo solo le modeline che uso.

In questo caso, includono i comandi della whitelist predefiniti filetype.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.