ConTeXt t-vim 模块:添加自定义关键字

ConTeXt t-vim 模块:添加自定义关键字

我正在使用 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加载:\definevimtypingextras=

\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

相关内容