为什么Vim会忽略我的modeline值?
我正在使用一个Python文件,文件末尾有以下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中) 还有一件
# 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行
(例如: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