如果我使用lstlisting的内联版本,如下所示:
\lstinline{!$omp parallel for}
vim中的语法高亮显示错误,并且乳胶文件的其余部分显示为红色,就好像它是代码清单的所有部分一样。导致问题的是美元$
。我怎么能避免这个?
答案 0 :(得分:20)
让我们一劳永逸地解决这个问题!
我邮寄了tex.vim
的维护者Charles E. Campbell,建议他为列表包添加突出显示规则。然而事实证明,tex.vim
中缺少对列表包的支持实际上是故意的。可以找到推理:h tex-package
。简而言之,您应该创建自己的扩展语法突出显示规则(请参阅帖子底部):
特克斯:想要突出更多命令?
LaTeX是一种可编程语言,因此有数千个软件包已满 专业的LaTeX命令,语法和字体。如果你正在使用这样的 包你通常希望分布式语法/ tex.vim支持 它。但是,显然这是不切实际的。所以请考虑使用 mysyntaxfile-add中的技术可以扩展或修改提供的突出显示 通过syntax / tex.vim。请考虑上传您撰写的任何扩展程序, 通常会进入$ HOME / after / syntax / tex / [pkgname] .vim,to http://vim.sf.net/
就我个人而言,我认为它不会被包括在内有点不幸,因为它肯定会增加普通用户使用Vim编写他或她的LaTeX的门槛。查找和添加lstlisting
,lstinline
等语法突出显示并不太容易。在查看this线程时,它看起来不会很快改变。
DevSolar似乎已经找到了它(我很感激信用!),但坎贝尔提供了几个example LaTeX package support vimballs。第一个lstlisting.vba.gz包括lstlisting
和lstinputlisting
的突出显示规则。但它确实缺少lstinline
,这个主题是关于它的。
最后,我的listings.vim
位于$HOME/.vim/after/syntax/tex/
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中找到更多信息。
答案 1 :(得分:6)
这不是一个真正的错误 - 它是设计的。为了正确地突出显示这一点,Vim必须解析并解释整个TeX文档,直到此代码出现,因为TeX是一种上下文敏感的语言。这对于语法高亮插件来说太复杂且太耗时。
唯一可接受的修复方法是从头开始重写语法高亮显示,使用完整的TeX实现,为源代码中的每个标记发出元信息。这是一个巨大的项目。据我所知,目前没有可用的TeX实现提供了这样的信息,这意味着一个人真的必须自己写这个。
答案 2 :(得分:4)
这对我有用:
\lstinline[mathescape]{!$\$$omp parallel for}
据我了解,它在数学模式中排版美元符号,但我看不出任何明显的差异。
答案 3 :(得分:4)
最初的问题在我看来,tex-File的其余部分显示为混乱的语法高亮显示。因此,简单实用的解决方案可能是使用
%stopzone
在lstlisting-Region之后。
答案 4 :(得分:3)
我在tex文件中为knitr插入R命令时遇到了类似的问题。我在$
中有很多\rinline{}
和其他特殊字符。我修复了它,以便Vim忽略此命令中的文本。
你想编辑tex.vim文件,在我的发行版上是sudo vim /usr/share/vim/vim73/syntax/tex.vim
大约第228行:
syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
更改为:
syn match texInputFile "\\\(epsfig\|input\|usepackage\|rinline\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
...或lstinline
:
syn match texInputFile "\\\(epsfig\|input\|usepackage\|lstinline\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
答案 5 :(得分:1)
基于timss'答案,创建一个名为~/.vim/after/syntax/tex/listings.tex
的文件并添加以下规则。将YOURENV
替换为您要使其成为突出显示异常的环境!
syn region texZone start="\\begin{YOURENV}" end="\\end{YOURENV}\|%stopzone\>"
现在,下次使用现有的.tex
文件打开Vim时,应该自动加载此规则。
答案 6 :(得分:0)
我没有这个问题。我正在使用filetype = tex运行Vim 7.3.46。 (我的.tex文件默认为“plaintex”;您可能需要检查文件类型:set ft?)
答案 7 :(得分:0)
通过timss发布的关于user1174052答案的链接,我找到了Dr Chip's Vim Page,它提供了lstlisting.vba.gz Vimball插件。下载,在Vim中打开...
vim lstlisting.vba.gz
...执行vimball ......
:so %
...下次打开LaTeX文件时,语法突出显示会完全忽略lstlisting
个环境的内容。
信用转到用户timss,谁发布了LaTeX-Box票证的链接,他还在那里发布了Dr Chip的页面链接。我将这个答案仅仅作为“直接链接”的快捷方式添加了。