modeline在vim中不起作用


Answers:


28

那应该工作。我自己尝试了这条线,并且行得通。我可能是您的“ modeline”选项设置为“ nomodeline”。尝试执行此操作,看看会得到什么。

:verbose set modeline?

这将告诉您“ modeline”选项的值,如果不是默认值,则为最后设置的位置。

一些Linux发行版在/ etc / vimrc或/ usr / share / vim / vimrc中将'nomodeline'设置为安全措施,即使'modeline'的安全问题早已得到解决。


上次发布日期:〜/ .vimrc
juanpablo,2011年

为了安全起见,我更改了modeline将其添加到我的〜/ .vimrc au BufNewFile,BufRead中。*别名设置filetype = sh
juanpablo,2011年

并非所有人都已被长期修复。github.com/numirias/security/blob/master/doc/...
duckbrain

@duckbrain从根本上讲,不可能保证所有安全性问题都已得到解决,只要有可能包含嵌入的指令,这些指令将由查看数据本身的数据的代码来执行。这就是为什么Keith Bostic的nvi文档总是说modelines该选项未实现,并且永远不会实现。就像所有安全漏洞一样,这些安全漏洞源于文件嵌入式命令或宏指令,它们可以在PDF,Word,Excel和&c&c&c中运行。
tchrist

14

在另一个答案中描述了完整的调试清单

我真的就这一个难倒,因为文件不完全正确的。

事实证明,在版本8(甚至更早版本)中,您不能set在modeline中使用该词。该文档将“第二种形式”描述为是,/* vim: set ai tw=75: */但这不起作用。您必须使用“第一种形式”// vim: ai tw=75

注意:您可以使用任何一种注释指示符。或根本没有。


对于所有vim安装而言,不一定是正确的。with的形式set对我来说在vim 8.0上很好用(尽管在7.4上不是)。同样值得注意的是,使用第二种形式// vim: ai tw=75时,该行的末尾不能有任何其他字符,否则vim会抱怨并忽略modeline。
乔什(Josh)

绝对应该将其报告为错误(或过时的文档)。我重现了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. (最后几行的意思是通过修改......通过......编译巨大的版本...)。
LittleByBlue

我试图在邮件列表中解决它。他们不同意。
布鲁诺·布罗诺斯基

@BrunoBronosky您是否具有到邮件线程的链接?想阅读他们的推理。
graywolf

这是线程的链接。groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ我并没有花时间去理解他们的理由。
布鲁诺·布罗诺斯基

11

set modelines=1 (或任何非0值)在我的〜/ .vimrc中为我工作。


5
如果modeline未设置,则没有任何效果(除非您是root用户,否则在Vim中是默认设置)
kynan

由于所有漏洞,Gentoo在全系统范围set nomodeline/etc/vimrc都有在Vim中进行模式行处理。
MattBianco 2014年

就我而言,我还必须设置modelines为非零值。帮助说默认值是5,所以这就是我设置的值,这对我有用。该指出,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.

9

在〜/ .vimrc中,您需要设置以下内容:

set nocompatible 
filetype plugin on
set modeline 

这些行在Debian 9中有效。谢谢!
caligari18年

7

~/.vimrc在Funtoo Linux机器上,为我的工作添加以下内容:

set modeline

在Mac中不起作用!
舒瓦

1

由于这似乎出现在搜索中:

我有同样的问题:

# vim: set filetype=sh:

不起作用,也导致ft = conf。在我的〜/ .bash_alias中没有modeline的情况下,ft为空,因此发生了某些变化。

# vim: filetype=sh:

工作了。最后一个“:”的出现似乎无关紧要。

我正在OSX上使用Vim8酿造的版本,以供记录。

这很奇怪,因为在Modeline的帮助下

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

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

似乎受到支持。

输出

verbose set ft?

“ vim:filetype = sh”是

filetype=sh
      Last set from modeline

没有Modeline:

filetype=

用“ vim:set filetype = sh”

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

我的conf中可能有副作用,但是不兼容的modeline语法是唯一对我有用的语法。


1

/usr/share/vim/vim80/debian.vimvim-common基于Debian的发行版禁用modeline默认。

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

您必须modeline.vimrc~/.vim/vimrc文件中明确启用。

set modeline

0

很有可能是由于modeline被禁用。

我通过以下方法解决此问题:

  1. 通常保持禁用状态,以避免任何安全问题。
  2. 安装securemodelines插件。
  3. 仅将我使用的模式行列入白名单。

在这种情况下,默认列入白名单的命令包括filetype

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.