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

问题描述 投票:2回答:2

我正在使用Vim 8.0和它附带的默认syntax/markdown.vim,这是2016-08-20版本的Tim Pope's vim-markdown包。

这个软件包有一个在某些文件上让我烦恼的错误:它将任何由四个或更多空格包含的行视为代码块,包括列表延续。因此,在以下内容中:

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,这会禁用这些行上的代码块颜色,但不幸的是它们仍然被标记为代码块区域,并且仍然没有突出显示其中的任何其他标记,例如_italic_`code`内联标记。)

vim vim-syntax-highlighting
2个回答
2
投票

看起来你想要做的是clear特定的语法组:

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

:syntax clear {group-name} ..

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

但看起来您无法清除组的具体定义。只是整个团队:

:syn clear markdownCodeBlock

2
投票

一个疯狂的猜测,与@ 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):

在设置colorscheme之前放置以下代码:

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

© www.soinside.com 2019 - 2024. All rights reserved.