modeline não funciona no vim


Respostas:


28

Isso deve funcionar. Eu mesmo tentei essa linha e funcionou. Poderia ser que sua opção 'modeline' tenha sido definida como 'nomodeline'. Tente executar isso e veja o que você recebe.

:verbose set modeline?

Isso informará o valor da opção 'modeline' e, se não for o padrão, onde foi a última configuração.

Algumas distribuições Linux definem 'nomodeline' em / etc / vimrc ou / usr / share / vim / vimrc como uma medida de segurança, mesmo que os problemas de segurança com 'modeline' tenham sido corrigidos.


modeline Último conjunto de ~ / .vimrc
juanpablo

para a segurança, eu mudar o modeline adicionar este para o meu ~ / .vimrc au BufNewFile, BufRead * aliases conjunto filetype = sh.
juanpablo

Nem todos eles foram corrigidos por muito tempo. github.com/numirias/security/blob/master/doc/…
duckbrain

@duckbrain É fundamentalmente impossível garantir que todos os problemas de segurança já tenham sido corrigidos, desde que seja possível incluir instruções incorporadas a serem executadas pelo código que analisa os dados nos próprios dados. É por isso que a documentação do nvi de Keith Bostic sempre disse modelinesque a opção não é implementada e que nunca será. Isso é como todos os bugs de segurança decorrentes de comandos incorporados a arquivos ou instruções de macro para serem executados em PDF, Word, Excel, & c & c & c.
tchrist 17/06

14

Descrevo uma lista de verificação de depuração completa nesta outra resposta .

Eu realmente fiquei perplexo com isso porque a documentação não é totalmente verdadeira.

Acontece que na versão 8 (e talvez antes) você não pode usar a palavra setem sua modelagem. A documentação descreve "o segundo formulário" como sendo, /* vim: set ai tw=75: */mas isso não funciona. Você precisa usar "a primeira forma"// vim: ai tw=75

Nota: Você pode usar qualquer um desses tipos de indicadores de comentários. Ou nenhum.


Isso não é necessariamente verdade para todas as instalações do vim. O formulário com setfunciona bem para mim no vim 8.0 (embora não no 7.4). Também é importante notar que, com a segunda forma // vim: ai tw=75, não pode haver outros caracteres no final da linha, ou o vim irá reclamar e ignorar a modelagem.
21717 Josh

Definitivamente, isso deve ser relatado como um bug (ou como documentação desatualizada). Reproduzi 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 pkg-vim-maintainers@lists.alioth.debian.org Übersetzt von pkg-vim-maintainers@lists.alioth.debian.org Riesige Version mit GTK2-GNOME GUI. (As últimas linhas significam modificado por ... , compilado por ... , versão enorme ... ).
LittleByBlue 10/09

Eu tentei abordá-lo na lista de discussão. Eles discordaram.
Bruno Bronosky

@BrunoBronosky você tem um link para o tópico do email? Gostaria de ler o seu raciocínio.
GrayWolf

Aqui está um link para o tópico. groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ Eu realmente não tive tempo para entender o raciocínio deles.
Bruno Bronosky

11

set modelines=1 (ou qualquer valor diferente de 0) no meu ~ / .vimrc o fez funcionar para mim.


5
Isto não tem efeito se modelinenão é também definido (que é por padrão no vim menos que você seja root)
Kynan

Gentoo tem um sistema de largura set nomodelineem /etc/vimrcdevido a todas as vulnerabilidades com modelines manipulação no vim.
23814 MattBianco

No meu caso, também tive que definir modelinesum valor diferente de zero. A ajuda diz que o padrão é 5, então é isso que eu defini e que fez o truque para mim. Os estados em 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.
01/06 Ben

9

Em ~ / .vimrc, você precisa definir o seguinte:

set nocompatible 
filetype plugin on
set modeline 

Essas linhas funcionam no Debian 9. Obrigado!
Caligari

7

Adicionando apenas o seguinte ao meu ~/.vimrctrabalho para mim na minha caixa do Funtoo Linux:

set modeline

Não funciona no mac!
Shuva

1

Como isso parece surgir nas pesquisas:

Eu tive o mesmo problema:

# vim: set filetype=sh:

não funcionou, resultando em ft = conf também. sem a modeline no meu ~ / .bash_alias, ft está vazio, então algo muda.

enquanto

# vim: filetype=sh:

trabalhou. a última presença ":" parece irrelevante.

Estou no OSX com uma versão Vim8, para os registros.

é estranho, porque a partir da modelagem ajuda ambos

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

e

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

parece ser suportado.

A saída de

verbose set ft?

com "vim: tipo de arquivo = sh" é

filetype=sh
      Last set from modeline

sem modelagem:

filetype=

com "vim: set filetype = sh"

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

Pode haver um efeito colateral em algum lugar do meu conf, mas a sintaxe da modeline não compatível é a única que funciona conforme o esperado para mim.


1

/usr/share/vim/vim80/debian.vimdas distros baseadasvim-common no Debian desabilita modelinepor padrão.

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

Você precisa habilitar modelineexplicitamente em seu arquivo .vimrcou ~/.vim/vimrc.

set modeline

0

Provavelmente, isso se deve à desativação da modelagem.

Eu trabalho em torno disso:

  1. mantendo-o desativado geralmente para evitar problemas de segurança.
  2. Instalando o plugin securemodelines .
  3. Na lista de permissões, apenas as modelines que eu uso.

Nesse caso, os comandos padrão da lista de permissões incluem filetype.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.