【问题标题】:Vim - Custom Generic Syntax FileVim - 自定义通用语法文件
【发布时间】:2014-04-11 00:04:16
【问题描述】:

我创建了一个 vim 脚本,以便在我编码时轻松插入 sn-ps。我使用<#placeholder#> 形式的占位符并遍历它们。我想将占位符突出显示为 cmets,以便 vim 不会尝试为这些块着色:

syntax match abridgePlaceholder "<#.[^#]*#>"
highlight link abridgePlaceholder Comment

这在实时会话中运行良好,但我尝试将其打包到 .vim/syntax 内的语法文件中,但它不起作用。我认为 vim 不会在运行时加载这个语法文件。

我也尝试将这种语法放在我的 .vimrc 中,但也没有用...

所以我希望将该语法应用于 all 文件类型。有没有办法做到这一点?

【问题讨论】:

  • 它没有太大区别,但您可能应该删除."&lt;#[^#]*#&gt;"。我想如果“占位符”文本是可选的并且您想匹配&lt;##&gt;,它有所作为。

标签: vim


【解决方案1】:

是的,这是可能的。您需要挂钩Syntax 事件;每当文件类型/语法发生变化时都会触发。你可以把它放到你的~/.vimrc 中,但是在:syntax on 之后,这样默认的语法处理(清除现有的东西)首先出现:

:autocmd Syntax * syntax match abridgePlaceholder "<#.[^#]*#>"

高亮只需要定义一次:

:highlight link abridgePlaceholder Comment

注意事项

语法添加可能会干扰现有文件类型的语法,添加containedin=ALL可能会缓解问题,但没有完美的解决方案。

另类

或者,您可以使用:match / call matchadd(),这与语法突出显示完全分开,但这需要为每个窗口定义(同样,使用:autocmds)。

【讨论】:

  • “替代”解决方案就像一个魅力。我没想过使用自动逗号!谢谢!
猜你喜欢
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多