我正在使用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`
内联标记。)
看起来你想要做的是clear特定的语法组:
要清除当前缓冲区的特定语法组:
:syntax clear {group-name} ..
这将删除
{group-name}
的所有模式和关键字。
但看起来您无法清除组的具体定义。只是整个团队:
:syn clear markdownCodeBlock
一个疯狂的猜测,与@ 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)
这是一个示例(查看我的光标所在的位置以及屏幕底部关联的高亮组):