有时当我正在开展一个项目时,我想要玩一些数据。通常,数据在一行上并且是巨大的(> 25k字符)。我知道我可以set nowrap
让这条线刚刚离开屏幕,但我倾向于因为其他原因而喜欢set wrap
。因此,作为一种解决方法,我想在标记折叠中隐藏这些长行(例如{{{ long line }}}
)。这工作正常,但由于某种原因我遇到synmaxcol
的问题。如果折叠线超过synmaxcol
,那么当我打开文件时,语法高亮显示会结束。例如:
但是,只要我打开折叠,语法就会自行纠正:
每次打开折叠都很烦人。正如您在本示例中所看到的那样,该行实际上并不长 - 它只是超过synmaxcol
。由于在“string”元素处超出了synmaxcol
,因此文件的其余部分将突出显示为字符串(因此只有单数双引号才会停止它)。
为什么会发生这种情况,我该如何解决?我已尝试使用不同的语法文件和文件类型,它仍然会发生。我也尝试过没有插件,最小的vimrc(仅包含syn on
)和设置fdm=marker:synmaxcol=60
的模式行,但它仍然会发生。
答案 0 :(得分:1)
您可以手动输入 :syntax sync fromstart
以强制Vim从打开文件的开头重新扫描语法。
为方便起见,我建议定义一个热键:
noremap <F5> <Esc>:syntax sync fromstart<CR>
inoremap <F5> <C-o>:syntax sync fromstart<CR>
现在您可以按F5清除大多数语法突出显示问题。
另外,看看Vim的fixing syntax highlighting - wiki page
此外,阅读:help :syn-sync-first可能会对此问题有所了解。
我能够在我的机器上重现这种行为(我正在运行Vim 7.3.429)
但是,当我在块注释中包装折叠标记{{{
和}}}
时,vim正确地呈现了语法。您可以使用zf
命令创建适当包装的折叠标记。见Vim tips: Folding fun。
通常,Vim会根据当前活动的语法选择正确的blockcomment字符串。但是,我的Vim非常香草,并且不识别Ruby语法。我可以在.vimrc文件中指定autocmd FileType ruby set commentstring==begin%s=end
来设置正确的块注释。有关详细信息,请参阅:fold-create-marker。
另一个解决方案是set synmaxcol=0
,它将有效地将其设置为无穷大。这会导致Vim检查整行的语法,无论它有多长。但是,我不确定你需要为此付出什么样的性能损失。