![ConTeXt t-vim 模块:添加自定义关键字](https://linux22.com/image/436901/ConTeXt%20t-vim%20%E6%A8%A1%E5%9D%97%EF%BC%9A%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E5%85%B3%E9%94%AE%E5%AD%97.png)
我正在使用 t-vim 模块创建 Python 代码块。它通常运行良好,但我想添加一些特定行为来表示控制台输出。例如,在以下代码中:
\startpython
x, y, z = 1, 1, 2
x == y
[Out] True
x == z
[Out] False
\stoppython
我希望[Out]
以 [Out] 开头的行有颜色,而后面的行无颜色。这可行吗?如果可以,怎么做?
先感谢您,
======== 编辑 ========
DG 提出的解决方案几乎完美,我真的很喜欢做类似 IPython 的事情的想法。但是,在我的环境中,高亮仍然存在于“Out”行中。此外,由于我正在做这些视觉效果设置,所以我也想添加错误。我尝试调整代码,但似乎不起作用,可能是因为我对正则表达式非常无知。我在下面展示了 mwe 和输出。
\startvimrc[name=py_extras]
syn match InProc /^In\s*\[.*\]:/
syn match OutProc /^Out\s*\[.*\]:/
syn match ErrProc /^.*Error:/
\stopvimrc
\startcolorscheme[pscolor]
\definesyntaxgroup
[InProc]
[color=darkgreen]
\definesyntaxgroup
[OutProc]
[color=darkred]
\definesyntaxgroup
[ErrProc]
[color=darkred]
\stopcolorscheme
\definevimtyping[python][
syntax=python,
extras=py_extras]
\starttext
\startpython
In [1]: x, y, z, t = 2, 1, "a", True
In [2]: x == y
Out[1]: False
In [3]: x + z
TypeError: unsupported operand type(s) for +: 'int' and 'str'
\stoppython
\stoptext
在这张图片中,我不希望在“Out”和“Error”行中突出显示语法,并且不希望每个“*Error:”都以暗红色显示,即使它是一个已定义的关键字。
先感谢您,
答案1
[Out]
为此,您可以在 vimrc 文件中将其添加到关键字列表中。它在块中定义,并使用\startvimrc
加载:\definevimtyping
extras=
\usemodule[vim]
\startvimrc[name=py_extras]
syn match OutProc /^\[Out\]/
\stopvimrc
\startcolorscheme[pscolor]
\definesyntaxgroup
[OutProc]
[color=darkred]
\stopcolorscheme
\definevimtyping
[python]
[syntax=python,
extras=py_extras]
\starttext
\startpython
x, y, z = 1, 1, 2
x == y
[Out] True
x == z
[Out] False
\stoppython
\stoptext
您还可以使用稍微复杂一点的图案来模仿外观ipython
:
\usemodule[vim]
\startvimrc[name=py_extras]
syn match InProc /^In\s*\[.*\]:/
syn match OutProc /^Out\s*\[.*\]:/
\stopvimrc
\startcolorscheme[pscolor]
\definesyntaxgroup
[InProc]
[color=darkgreen]
\definesyntaxgroup
[OutProc]
[color=darkred]
\stopcolorscheme
\definevimtyping
[python]
[syntax=python,
extras=py_extras]
\starttext
\startpython
In [1]: x, y, z = 1, 1, 2
In [2]: x == y
Out[2]: True
In [3]: x == z
Out[3]: False
\stoppython
\stoptext
任何进一步和更复杂的格式问题都可以归结为编写自定义 vim 语法文件,最好在vi.stackexchange.com