vim - 在 vim 中使用带有 synmaxcol 的折叠

标签 vim vim-syntax-highlighting

有时当我在做一个项目时,我想玩弄一些数据。很多时候数据在一行并且很大(>25k 个字符)。我知道我可以 set nowrap并让这条线从屏幕上消失,但我倾向于喜欢 set wrap其他原因。因此,作为一种解决方法,我想将这些长线隐藏在标记折叠中(例如 {{{ long line }}} )。这工作正常,但我遇到了 synmaxcol 的问题由于某些原因。如果折线超过synmaxcol然后当我打开文件时,语法突出显示就会结束。例如:

enter image description here

但是,只要我打开折叠,语法就会自行更正:

enter image description here

不过,每次都必须打开折叠很烦人。正如你在这个例子中看到的那样,这条线实际上并没有那么长——它只是超过了synmaxcol。 .由于synmaxcol在“字符串”元素处超出,文件的其余部分将突出显示为字符串(所以只有一个单引号会阻止它)。

为什么会发生这种情况,我该如何解决?我已经尝试过使用不同的语法文件和文件类型,但它仍然会发生。我也试过没有插件,一个最小的 vimrc(只包含 syn on )和一个模式行来设置 fdm=marker:synmaxcol=60它仍然发生。

最佳答案

可以手动输入: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)。
但是,当我包裹折叠标记时 {{{}}}在 block 注释中,vim 正确地呈现了语法。您可以使用 zf 创建适当包装的折叠标记。命令。见 Vim tips: Folding fun .

通常 Vim 会根据当前事件的语法选择正确的 block 注释字符串。然而,我的 Vim 非常普通,无法识别 Ruby 语法。我可以指定 autocmd FileType ruby set commentstring==begin%s=end在我的 .vimrc 文件中设置正确的 block 注释。见 :fold-create-marker更多细节。

另一个解决方案是 set synmaxcol=0 ,这将有效地将其设置为无穷大。这会导致 Vim 检查整行的语法,不管它有多长。但是,我不确定您必须为此付出什么样的性能损失。

关于vim - 在 vim 中使用带有 synmaxcol 的折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11873767/

相关文章:

Windows 上的 Python 和 vim?

git - 从命令行覆盖 .gitattributes

vim - vim 语法优先级可以颠倒吗?

Vim 窗口大小调整

vim - 如何保存 GVIM 设置?

Vim 在对字典和当前文件使用自动完成时卡住

更改颜色方案后 Vim 多个光标不可见

vim - 如何在 vim 配色方案中链接高亮组?

php - 使用 Vim 在 PHP 脚本中突出显示真正的 SQL 语法