【问题标题】:Context sensitive word wrap in vi/vimvi/vim 中的上下文相关自动换行
【发布时间】:2011-10-26 22:12:54
【问题描述】:

我怎样才能对特定标签进行特定的自动换行。例如,在 LaTex 中,我希望我的段落自动换行,而不是我的图形命令(它们总是很长并且超出屏幕)。

或者使用 Javascript,我希望代码的右边距为 50 列,但 cmet 仅为 40 列

【问题讨论】:

    标签: vim word-wrap


    【解决方案1】:

    这不是内置的

    您可能会使用 `formatexpr`synID() 的巧妙组合自己编写脚本。我建议你先看看后者的帮助,因为它包含了鼓舞人心的样本:

    for id in synstack(line("."), col("."))
        echo synIDattr(id, "name")
    endfor
    

    取自:he synstack

    formatexpr 通常设置为类似

    :set formatexpr=mylang#Format()
    

    因此委托给一个文件类型插件。您可以实现该函数以针对不同的语法上下文使用不同的边距。


    记住

    • 默认的 formatexpr(如果不存在,formatprg)可能对源文件没有好处(根据我的经验,它倾向于将行串在一起,就好像它们是文本段落)。但话又说回来,你可以用任何你想要的方式来实现它
    • 语法高亮可能会变得不同步。我不确定当光标位于大文档的 70% 并且您发出 ggVGgq 时会发生什么。它可能不会一直更新突出显示的语法(这意味着您的 formatexpr 函数会得到“错误的”synID() 值。您可以通过说类似的话来解决这个问题

       :syntax sync fromstart
      

      这可能再次影响突出显示性能,具体取决于源和突出显示脚本的大小/复杂性

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 2016-09-11
      • 2012-02-26
      • 2019-05-23
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      相关资源
      最近更新 更多