gedit 中的 Python 语法高亮

gedit 中的 Python 语法高亮

我使用的是默认设置。我正在寻找一个简单的图例,上面写着“这个颜色表示那个”或“注释是蓝色,函数是绿色”,等等。我认为这个需求对所有人来说都是显而易见的,但我找不到它(gedit 帮助毫无用处)。

此外,从周围看,似乎有一种方法可以设置我自己的配色方案,但我怎么知道我已将所有可能的术语和形式着色? 有没有一个列表?

例如,我不想错过字符串和函数并让它们最终都变成黑色,因此我无法获得语法突出显示的好处 - 我想无论如何我都无法获得语法突出显示的好处,因为我不知道我现在看到的所有颜色意味着什么。

谢谢。

编辑/更新

@ Maythux 这是否仅适用于 gedit 本身,而不适用于 Python?我创建了一个文本文件,并以 .py 扩展名保存。例如:

import this:  | 'import' is purple  <br/>
var = some_variable  | both sides of the equation are black <br/>
'This is a string'  | It is pink  <br/>
for is a special word, so is in  | 'for', 'is', 'is', and 'in' are all blood red  <br/>
"""This is still a string"""   | Triple quotes are pink <br/>
# This is a comment | but this string is dark blue  <br/>  

这些颜色规则从何而来?解释什么颜色代表什么的图例又在哪里?PS-我讨厌降价

答案1

我知道我来晚了,但我也遇到过类似的问题,而且这个帖子是第一个出现的。所以我想我应该添加一个详尽的答案来解释发生了什么。

我发现有关突出显示如何工作的最佳文档是 GTKSourceView 的文档(Gedit 用于突出显示): https://www.manpagez.com/html/gtksourceview/gtksourceview-3.12.2/ch02.php 但它并没有直接回答 OP 的问题。

因此,为了更直接地回答 OP 的问题。我不知道一个简单的列表,但是如果您对突出显示的工作原理有所了解,您就可以找到所需的信息。

突出显示的工作原理有两个重要部分:

  1. .lang 文件(每个支持的编程语言都有一个)定义了 Gedit(或者更确切地说 GTKSourceView)应如何理解编程语言的语法。例如,在 python.lang 中定义,# 标记注释,“for”、“if”和“else”是关键字,“...”是字符串等等。

  2. 然后,颜色方案会根据您当前使用的语言的 .lang 文件中注释、关键字、字符串等的定义方式,告诉 Gedit 如何为通用注释、通用关键字等着色。

您正在使用的语言在 Gedit 的底部指定:语言选择对话框目前为 python (2.x)

您正在使用的配色方案是在以下位置设置的:菜单 -> 首选项 -> 字体和颜色 -> 配色方案颜色方案对话框

.lang 文件(可能)位于:

/usr/share/gtksourceview-3.0/styles/language-specs

或者

/usr/share/gtksourceview-4/styles/language-specs

取决于您的 GTK 版本。

并且颜色方案/样式如下:

/usr/share/gtksourceview-3.0/styles/

或者

/usr/share/gtksourceview-4/styles/

这又取决于你的 GTK 版本。

那么,回答 OP 的问题。您可以转到您感兴趣的语言的 .lang 文件,例如 python.lang 或 python3.lang。在顶部,您将找到如下所示的样式列表:

    <style id="keyword"           name="Keyword"               map-to="def:keyword"/>

这表示,python 关键字(在 python.lang 文件中稍后定义)的着色样式应该以与“def:keyword”相同的方式着色,这是任何受支持语言中关键字的默认设置(“def”代表默认,def: 指的是在 def.lang 中找到的默认样式)。

然后,如果您在如下块中搜索“style-ref="keyword"”,就可以找到 Python 中关键字的定义:

<context id="keywords" style-ref="keyword">
  <keyword>and</keyword>
  <keyword>assert</keyword>
  ...

这里的 'id="keywords" 表示接下来的条目是我们定义的 python 关键字,'style-ref="keyword" 表示下面列出的内容要用 python 关键字着色样式进行着色,然后列出了关键字:“and”、“assert”、“if”、“for”等等。

现在,我们从 .lang 文件中知道了不同样式的名称以及每种样式对应的颜色。现在,我们可以在配色方案中指定所有抽象样式要使用的实际颜色,这些颜色已在 .lang 文件中定义。

在颜色主题文件(例如 tango.xml)中,你会发现类似这样的行:

  <style name="def:keyword"                 foreground="#0000ff"/>

“def:keyword” 是默认的关键字样式,用于根据 .lang 文件为事物着色。而 'foreground="#0000ff" 意味着文本将用 RGB 十六进制值 00-00-ff 着色 - 即纯蓝色。

这会将 python 关键字涂成蓝色,因为 python.lang 中定义的关键字样式被映射到 def:keyword ,我们现在声明它应该是蓝色。

它还应该将所有其他语言的关键字涂成蓝色(只要它们也映射到其 .lang 文件中的 def:keyword)。

您还可以通过以下方式专门为 Python 关键字指定颜色:

  <style name="python:keyword"                 foreground="#00ff00"/>

冒号前面的部分是语言的 id(写在 .lang 文件的顶部),冒号后面的部分是该 .lang 文件中样式的名称。

未指定颜色的样式将由 Gnome/Ubuntu 的默认颜色主题决定,遗憾的是我无法理解 ¯_(ツ)_/¯

答案2

这与你在 gedit 的字体和颜色偏好设置中选择的配色方案有关。对我来说,我选择经典

在此处输入图片描述

现在来看看它是如何突出显示打开颜色方案的 xml

gedit /usr/share/gtksourceview-3.0/styles/classic.xml 

以下是输出示例:

<!-- Bracket Matching -->
  <style name="bracket-match"               foreground="#white" background="#grey" bold="true"/>
  <style name="bracket-mismatch"            foreground="#white" background="#red" bold="true"/>

  <!-- Search Matching -->
  <style name="search-match"                background="yellow"/>  

  <!-- Comments -->
  <style name="def:comment"                 foreground="blue"/>
  <style name="def:shebang"                 foreground="blue" bold="true"/>
  <style name="def:doc-comment-element"     italic="true"/>

然后你就可以知道灰色用于括号匹配,蓝色用于评论,黄色用于搜索等......

您可以从以下路径中找到的 xml 文件中检查其他方案:

/usr/share/gtksourceview-3.0/styles/

另外,作为提示,您可以使用此 xml 随意更改颜色,以便您可以根据自己的需要或喜好自定义每个方案

相关内容