如果我使用lstlisting的内联版本,如下所示:
\lstinline{!$omp parallel for}vim中的语法突出显示出错,latex文件的其余部分显示为红色,就好像它是代码清单的一部分。是美元$导致了这个问题。我怎样才能避免这种情况?
发布于 2014-02-09 04:16:28
让我们一劳永逸地解决这个问题!
我给tex.vim的维护者Charles E.Campbell发了一封邮件,建议他为列表包添加突出显示规则。然而,事实证明,在tex.vim中缺少对listings包的支持实际上是有意为之。原因可以在:h tex-package上找到。简而言之,你应该创建自己的扩展语法突出显示规则(参见文章的底部):
Tex:想要突出显示更多命令吗?
LaTeX是一种可编程语言,因此有成千上万的包充满了专门的LaTeX命令、语法和字体。如果您正在使用这样的包,您通常会希望分布式语法/tex.vim能够支持它。然而,这显然是不切实际的。因此,请考虑使用mysyntaxfile-add中的技术来扩展或修改语法/tex.vim提供的突出显示。请考虑将您编写的任何扩展上载到http://vim.sf.net/,这些扩展通常位于$HOME/after/syntax/tex/pkgname.vim中。
就我个人而言,我认为这有点不幸,因为它不会被包括在内,因为它肯定会增加普通用户使用Vim编写自己的LaTeX的门槛。查找并添加lstlisting、lstinline等的语法突出显示并不是一件容易的事情。在查看this线程时,它看起来也不会很快改变。
DevSolar似乎已经找到了它(我很感谢你的功劳!),但Campbell提供了几个example LaTeX package support vimballs。第一个是lstlisting.vba.gz,包括突出显示lstlisting和lstinputlisting的规则。然而,它确实缺少本主题所要讨论的lstinline。
最后,下面是驻留在$HOME/.vim/after/syntax/tex/中的listings.vim
syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>"
syn region texZone start="\\lstinputlisting" end="{\s*[a-zA-Z/.0-9_^]\+\s*}"
syn match texInputFile "\\lstinline\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt-

这似乎是首选的解决方案。它不需要在/usr/share/vim/..中更改系统范围的文件,您不需要下载和源代码vimball或更改环境,而不是修复语法突出显示本身。我可能会考虑将其作为一个简单的插件发布,以使其更易于访问。
最后,记住要检查您是否实际运行的是tex文件类型,而不是plaintex文件类型,因为它缺少太多文件类型而无法运行。我已经在上面的评论中发表了这篇文章,但更多信息可以在ticket I added to LaTeX-Box中找到。
发布于 2011-08-28 00:00:46
这并不是一个真正的bug --它是设计出来的。为了正确地突出显示这一点,由于TeX是一种上下文敏感语言,因此Vim必须解析和解释整个TeX文档,直到代码出现为止。对于一个语法突出显示的插件来说,这既太复杂又太耗时。
唯一可接受的修复方法是从头开始重写语法高亮工具,使用完整的TeX实现,为源代码中的每个标记发出元信息。这是一个庞大的项目。据我所知,目前还没有可用的TeX实现提供这样的信息,这意味着人们真的必须自己编写这篇文章。
发布于 2014-05-28 15:39:00
在我看来,最初的问题是,tex-File的其余部分以混乱的语法突出显示。因此,也许简单可行的解决方案可能是使用
%stopzone在lstlisting-Region之后。
https://stackoverflow.com/questions/6738902
复制相似问题