为什么Vim会忽略我的modeline值?

为什么Vim会忽略我的modeline值?,vim,Vim,我正在使用一个Python文件,文件末尾有以下modeline: # vim: sts=4:ts=4:sw=4 如果我用这个文件启动Vim,modeline将被忽略。我怎样才能解决这个问题?顺便说一句,我在我的.vimrc中设置了nocompatible,我跟踪了一个本地插件,名为local_vimrc.vim。modeline不工作是插件的一个副作用。我的modeline不工作也有类似的问题。此线程中的答案帮助我找到了答案(将set modeline添加到我的~/.vimrc中) 还有一件

我正在使用一个Python文件,文件末尾有以下modeline:

# vim: sts=4:ts=4:sw=4

如果我用这个文件启动Vim,modeline将被忽略。我怎样才能解决这个问题?顺便说一句,我在我的
.vimrc
中设置了
nocompatible
,我跟踪了一个本地插件,名为local_vimrc.vim。modeline不工作是插件的一个副作用。

我的modeline不工作也有类似的问题。此线程中的答案帮助我找到了答案(将set modeline添加到我的~/.vimrc中)

还有一件事帮助我调试它:在vim中输入set。这将告诉您当前设置的不同值

这是你要检查的。。。 第一步 确保您的设置正确。做

:verbose set modeline? modelines?
如果您看到返回的这些值中有一个,则不起作用

  nomodeline
  modelines=0
(通过在
set
命令之前添加
verbose
,您将被告知是哪个文件生成了该设置。谢谢。)

您需要看到的是这个(其中4是大于0的任何值)

注释注释:如果您有
nomodeline
modeline=0
,则需要添加
set
和上一个代码块中的相应设置。(谢谢你@pilat)

步骤2 您是否有一行带有
vim:
,且在文档的最后几行中未触及任何其他内容

说真的,就这些

这些模型线都能工作

# vim: cursorline

// vim: cursorline

; vim: cursorline

vim: cursorline

# anything here vim: cursorline

even without a valid comment vim: cursorline

literally anything as long a space separates> vim: cursorline

# vim: set cursorline: <-that colon is required if you use the word "set" and this comment after the colon does not affect it.
步骤4 你已经醒了18个多小时了吗?在你失去理智之前,先睡一觉。明天它还是会坏的。当您再次查看此列表时,您将更有可能注意到这个问题

更新说明 这一回答曾包括这一主张:

您使用的是单词集吗?(如中的“第二种形式”所述)嗯,这在版本8中不起作用,我不知道它何时停止工作。使用“第一种形式”


我错了。@Amadan和我已经纠正了步骤3。

如果您正在保存和加载视图,例如使用以下内容,则在重新打开文件时不会重新计算模型线

autocmd BufWinLeave *.* mkview
autocmd BufWinEnter *.* silent loadview

第一步是始终查看

/usr/share/vim/vim74/debian.vim
并注释掉nomodeline行

Kuuntuu分布认为它是安全的。 威胁。
(例如:libcal允许您运行任意程序)

只有当系统外的人可以通过网页运行vim时,这才是一个问题。(不信任用户输入。)


还可以使用拼写检查器进行ddos攻击。(不要相信用户输入。)

我的modeline和“noexpandtab”有这样的问题:

但如果我写:

# vim: ft=python noexpandtab

它又起作用了。(感谢大家了解:详细设置…!)

您是如何跟踪问题的?有没有办法找出是什么阻止了这一切?错误日志等?您可以运行
vim-u NONE
来启动vim,而无需加载vimrc(无捆绑包或插件)。如果文件加载正确,那么您就知道它是您的vimrc或bundle。您可以一个接一个地重新添加捆绑包,直到modeline出现故障,以跟踪导致问题的捆绑包。请确保您同时拥有
set modeline
set modeline=N
。我总是忘记步骤4。好的提醒和一点幽默会让我受益匪浅。
#
vim
之间的空格。在我自己找到问题所在后阅读。感谢这里为我签出的所有内容,但是在Mint 18/Ubuntu上,在
/usr/share/vim/vim74/debian.vim
中有一个vim配置文件,该文件中设置了
nomodeline
,使得它们无法在所有其他设置下工作。要从vim中找出这一点,请运行
:verbose set modeline?
,它将输出类似于/usr/share/vim/vim74/debian.vim中的
modeline Last set的内容,我在这里找到并注释了冲突的设置。Modelines在那之后工作得很好。
set
如果注意这两种形式的语法就可以工作
#vim:set cursorline
不起作用,因为第二个(
set
)表单需要一个终止冒号
#vim:set cursorline:
有效。@Amadan我立即意识到了这一点的重要性,并将其包含在我的编辑中。我也遇到了同样的问题,modeline不工作——在~/.中注释掉“set nocompatible”。vimrc解决了这个问题。如果您有.vimrc,甚至不需要此选项,设置它会重置其他选项(请参阅:vim help compatible)。最好在个人vimrc中添加
set nomodeline
,而不是通过编辑系统配置为根用户打开潜在的安全漏洞,这可能会在升级过程中被清除。这是我的问题。有没有办法添加一个follwup autocmd来触发modeline执行并覆盖视图设置?
/usr/share/vim/vim74/debian.vim
# vim: noexpandtab ft=python
# vim: ft=python noexpandtab