为什么Vim会忽略我的模式线值?

cmc*_*nty 22 vim

我在最后使用了一个带有以下模式的Python文件:

# vim: sts=4:ts=4:sw=4
Run Code Online (Sandbox Code Playgroud)

如果我使用此文件启动Vim,则忽略模式行.我怎样才能解决这个问题?顺便说一句,我已经入手nocompatible.vimrc.

Bru*_*sky 36

这是你检查的......

步骤1

确保您的设置正确.做...

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

如果您看到返回了这些值中的任何一个,那么它将不起作用.

  nomodeline
  modelines=0
Run Code Online (Sandbox Code Playgroud)

你需要看到的是(其中5是任何大于0的东西)

  modeline
        Last set from /usr/share/vim/vimrc
  modelines=4
        Last set from ~/.vim/vimrc
Run Code Online (Sandbox Code Playgroud)

第2步

你有一行verbose 不会触及文档最后<modelines>行中的任何其他行吗?

说真的,这就是全部.

这些模型都有效......

# 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.
Run Code Online (Sandbox Code Playgroud)

第3步

这是一个重要的!你用的是这个词set吗?(如选项文档中的"第二种形式"所述)取出nomodeline或添加冒号到最后.

这些都不起作用......

# vim: set cursorline
       ^^^ issue: use of the word set without a trailing colon (:)

# vim:cursorline
      ^ issue: no space after the colon

#vim: cursorline
 ^ issue: no space before the word vim
Run Code Online (Sandbox Code Playgroud)

第4步

你已经醒了18个多小时了吗?在你失去理智之前,先睡个好觉.它明天还会被打破.当您再次浏览此列表时,您将更有可能注意到该问题.

更新说明

这个答案过去包括这个说法:

你使用的是单词集吗?(如选项文档中的"第二种形式"所述)嗯,这在版本8中不起作用,我不知道它什么时候停止工作.使用"第一个表格".

我错了.@Amadan指出了这一点,我已经纠正了第3步.

  • 我总是忘记第4步.好的提醒和一点幽默都有很长的路要走. (7认同)
  • 这里的所有内容都为我检查过,但是在 Mint 18/Ubuntu 上,在 `/usr/share/vim/vim74/debian.vim` 中有一个 vim 配置文件,其中包含了 `set nomodeline`,尽管所有这些都阻止了它们的工作其他设置。要从 vim 中找出这一点,请运行 `:verbose set modeline?` 它将输出类似 `modeline Last set from /usr/share/vim/vim74/debian.vim` 的内容,这是我发现并注释掉冲突的地方环境。在那之后,Modelines 工作得很好。 (2认同)
  • 如果人们注意两种形式的语法,那么“set”就会起作用。`# vim: setcursorline` 不起作用,因为第二种 (`set`) 形式需要一个终止冒号。`# vim: 设置光标线:` 有效。 (2认同)
  • @Amadan我立即意识到了这一点的重要性,并将其包含在我的编辑中。https://stackoverflow.com/posts/41994024/revisions#rev7c9c43d4-19b1-48b5-a1cf-d823d95ca840 (2认同)

cmc*_*nty 5

我将问题跟踪到一个名为local_vimrc.vim的本地插件.模式行不起作用的事实是插件的副作用.

  • 您可以运行`vim -u NONE`来启动vim而不加载vimrc(没有包或插件).如果文件加载正确,那么你知道它是你的vimrc或你的包.您可以逐个重新添加捆绑包,直到模式行中断以跟踪哪个捆绑包导致问题. (3认同)
  • 你是如何追踪这个问题的?有没有办法找出什么阻止了这个?错误日志等? (2认同)

sci*_*rai 5

我的Modeline无法运作时,我也遇到类似的问题。该线程中的答案帮助我找到了答案(将set modeline添加到我的〜/ .vimrc中)

https://superuser.com/questions/323712/modeline-not-work-in-vim

帮我调试的另一件事是在vim中键入:set。这将告诉您当前设置的不同值。

  • 确保同时拥有“ set modeline”和“ set modelines = N”。 (2认同)

Ian*_*ter 5

如果您正在保存和加载视图,例如使用如下所示的视图,则当您重新打开文件时,您的模型行将不会被重新评估。

autocmd BufWinLeave *.* mkview
autocmd BufWinEnter *.* silent loadview
Run Code Online (Sandbox Code Playgroud)