如何在vim语法高亮中禁用语法区域?

时间:2019-04-12 05:56:39

标签: vim vim-syntax-highlighting

我正在使用Vim 8.0及其随附的默认syntax/markdown.vim,它是Collectable软件包的2016-08-20版本。

此软件包有一个确实使某些文件困扰我的错误:它将包含四个或更多空格的行视为代码块,包括列表连续。因此,如下所示:

1. Agenda Item 1: Frob the Bazzit
   - The bazzit is something that makes us have
     very _short_ lines indeed.
   - Further frobbing is necessary

very _short_ lines indeed行将被突出显示为一个代码块,而单词short将不会被斜体显示。

至少在这种情况下,我对完全禁用代码块突出显示感到满意,但是事后我不知道该怎么做。我一直在用~/.vim/after/syntax/markdown.vim进行测试以调整配置,但是一旦搞定,我就不知道怎么做

syn region markdownCodeBlock start="    \|\t" end="$" contained

已在系统markdown.vim中执行,我可以在我的after/syntax/markdown.vim中将其禁用。我该怎么做?

(我尝试使用highlight link markdownCodeBlock NONE,它确实禁用了这些行上的代码块颜色,但不幸的是,它们仍被标记为代码块区域,并且仍未突出显示其中的任何其他标记,例如{{ 1}}或_italic_内联标记。)

2 个答案:

答案 0 :(得分:2)

您似乎想要clear那个特定的语法组:

  

要清除当前缓冲区的特定语法组:

:syntax clear {group-name} ..
     

这将删除{group-name}的所有模式和关键字。

但是您似乎无法清除组的特定定义。只是整个小组:

:syn clear markdownCodeBlock

答案 1 :(得分:1)

一个疯狂的猜测,可以与@muru的答案结合使用,但是也许您可以创建一个自定义的多行组,例如NoSyntax,该组将作为注释(以便将.md编译为pdf或其他格式,将被忽略),例如:

[//]: # (IGNORE)
    - The bazzit is something that makes us have
      very _short_ lines indeed.
    - Further frobbing is necessary
[//]: # (ENDIGNORE)

然后在~/.vim/after/markdown.vim中使用:

syntax clear NoSyntax

我现在不在电脑旁看如何创建一个这样的小组,但是一旦我出现,我将和它一起玩,看看有什么可能(如果可能)。

编辑:这是一个将块突出显示为“正常”的解决方案(例如,没有斜体,但至少没有代码,可以回答I'm happy with just completely disabling code block highlighting, at least in these circumstances):

在设置颜色方案之前,在之前放置以下代码:

function! MyMarkdownHighlights() abort
    syntax region mdIgnore  start=+^\s*\[//\]: # (IGNORE)$+ end=+^\s*\[//\]: # (ENDIGNORE)$+ keepend excludenl
    highlight def link mdIgnore Normal
endfunction

augroup MyColors
    autocmd!
    autocmd BufEnter *.md call MyMarkdownHighlights()
augroup END

并在评论中使用它:

[//]: # (IGNORE)

[//]: # (ENDIGNORE)

这里是一个示例(看看我的光标所在的位置以及屏幕底部关联的高亮显示组):

enter image description here