Vim,如何重新加载语法高亮

99

当我在Vim中执行Rmodel、Rcontroller等命令时,只看到白色文本。但是当我切换到下一个缓冲区,然后通过:bn:bl返回时,颜色就正常了。

这是我的.vim文件夹:https://github.com/regedarek/dotvim

7个回答

112

使用:syntax sync fromstart

我从http://vim.wikia.com/wiki/Fix_syntax_highlighting得到了这个提示。

那篇文章还建议为该命令创建映射,例如将F12映射为:

noremap <F12> <Esc>:syntax sync fromstart<CR>
inoremap <F12> <C-o>:syntax sync fromstart<CR>

这个可以运行,但会移除拼写检查的下划线。有什么方法可以防止这种情况发生吗? - Alec Jacobson
1
抱歉,我不知道。我没有任何拼写检查的工作。这可能取决于您特定的插件。如果没有其他人回答,编写一个包含所有相关信息的问题可能是值得的。 - Mike Lippert
4
我最终使用“autocmd BufEnter,InsertLeave * :syntax sync fromstart”命令,以在进入缓冲区后强制进行语法同步。当发生“InsertLeave”事件时,也会触发语法同步。 - Samuel Li
也许有一天会有人发现这很有用。对于Bash和类似的语言,请使用filetype=shsyntax=sh,而不是bash。我花了一些时间才弄清楚这个问题。 - quapka
1
我正在使用 :do Syntax 的等效命令 :doautocmd Syntax,这样可以少打一点字,因此您不必绑定它(至少我不需要经常调用此命令,所以我只需键入它)。我主要在一些包含正则表达式的文件中使用它,当我通过 netrw 打开文件时,这些正则表达式会导致语法高亮出现问题。 - Rens Tillmann

68

尝试:

:e
如果文件没有未保存的更改。
或:
:syn off | syn on

创建一个映射以简化操作,类似于“nmap <F6> :Rmodel|e<CR>”。 - holygeek
2
似乎应该有一些内置命令来刷新语法高亮。另一种似乎有效的方法是跳转到文件的另一个部分,比如开头或结尾,然后再跳回来,例如:gg\`` - Keith Pinson
2
“:syntax sync fromstart”(不带引号)无法重新加载某些文件的语法高亮,这对我和Vim来说一直是个问题。但是,“:syn off | syn on”立即生效。使用“:e!”也可以实现重新加载,但要注意:未保存的更改将会丢失! - Victoria Stuart
:syn off | syn on 对我来说改变了颜色方案,很烦人。 - naught101

15

我尝试了以上所有方法,但都没有起作用。

唯一有效的方法是: :filetype detect 因此我重新映射了一个快捷键 :noremap <Leader>,ftd :filetype detect


10

有时候语法没问题,但是折叠功能出了点问题。这时候使用zx就很有用。

Vim文档中的说明:

zx

更新折叠:撤销手动打开和关闭的折叠:重新应用“foldlevel”,然后执行“zv”:查看光标行。 也会强制重新计算折叠。当使用“foldexpr”,且缓冲区被改变导致折叠没有被正确更新时,这个操作很有用。


5
另一个选择是:

还有一个选项:

doautocmd Syntax

1
就我所知,这是唯一一个在我遇到这个问题时修复语法高亮的答案(syntax sync fromstart 没有任何作用,也没有其他方法!) - TJ Ellis
3
这个的简短版本是 :do Syntax - Rens Tillmann

-1

你也可以尝试:

CTRL-L

从VIM文档(:h CTRL-L)中得知:
清除并重绘屏幕。重绘可能会在处理类型前瞻后稍后发生。

1
按下 Ctrl-L 可以刷新屏幕。无论您是否对相应的语法文件进行了更改都没有影响。 - Alexis Wilke

-2

尝试:

:Rrefresh!

这个命令可以刷新某些缓存设置,并重新加载rails.vim
它帮助我在Rails中刷新语法高亮。


这仅适用于rails.vim,并非通用解决方案。如果没有该插件,则不存在此命令。 - wchargin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接