模式行在 vim 中不起作用

jua*_*blo 32 vim modeline

我有一个叫.aliasesbash 和 zsh的文件,我把这一行

# vim: set filetype=bash: 
Run Code Online (Sandbox Code Playgroud)

但如果我做

: echo &ft
Run Code Online (Sandbox Code Playgroud)

我得到 conf

gar*_*ohn 36

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

:verbose set modeline?
Run Code Online (Sandbox Code Playgroud)

这将告诉您 'modeline' 选项的值,如果不是默认值,则是上次设置的位置。

一些 Linux 发行版在 /etc/vimrc 或 /usr/share/vim/vimrc 中设置了 'nomodeline' 作为安全措施,尽管 'modeline' 的安全问题早已得到修复。

  • @duckbrain 从根本上不可能保证所有安全问题都已得到修复,只要有可能包含由查看数据本身中的数据的代码执行的嵌入式指令。这就是为什么 Keith Bostic 的 *nvi* 的文档总是说 `modelines` 选项未实现并且永远不会实现。这就像在 PDF、Word、Excel、&c&c&c 中运行的文件嵌入命令或宏指令所产生的所有安全漏洞一样。 (2认同)

Bru*_*sky 20

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

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

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

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


小智 16

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

  • 如果还没有设置`modeline`,则这不起作用(除非您是root,否则在Vim中默认设置) (5认同)

小智 10

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

set nocompatible 
filetype plugin on
set modeline 
Run Code Online (Sandbox Code Playgroud)


小智 7

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

set modeline
Run Code Online (Sandbox Code Playgroud)