修改gedit语法突出显示文件


9

我正在尝试从Gedit更改突出显示文件。我已经修改了/usr/share/gtksourceview-3.0/language-specs/fortran.lang文件,因为我想更改编辑器将语句作为注释的情况。我的问题是,当我选择新的突出显示方案时,没有任何突出显示,而是仅保留为纯文本。

使用su权限打开了文件fortran.lang,我只是将所有内容复制粘贴到新的Gedit文件中,然后将其另存为fortran_enhanced.lang在同一文件夹中。我对原始文件所做的更改是:

原始的fortran.lang文件:

<language id="fortran" _name="Fortran 95" version="2.0" _section="Sources">
  <metadata>
    <property name="mimetypes">text/x-fortran</property>
    <property name="globs">*.f;*.f90;*.f95;*.for</property>
    <property name="line-comment-start">!</property>
  </metadata>
  <styles>
    <style id="comment" _name="Comment" map-to="def:comment"/>
    <style id="floating-point" _name="Floating Point" map-to="def:floating-point"/>
    <style id="keyword" _name="Keyword" map-to="def:keyword"/>
    <style id="intrinsic" _name="Intrinsic function" map-to="def:builtin"/>
    <style id="boz-literal" _name="BOZ Literal" map-to="def:base-n-integer"/>
    <style id="decimal" _name="Decimal" map-to="def:decimal"/>
    <style id="type" _name="Data Type" map-to="def:type"/>
  </styles>
  <default-regex-options case-sensitive="false"/>
  <definitions>
    <!-- Note: contains an hack to avoid considering ^COMMON a comment -->
    <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
      <start>!|(^[Cc](\b|[^OoAaYy]))</start>
      <include>
        <context ref="def:escape"/>
        <context ref="def:in-line-comment"/>
      </include>
    </context>
(...)

修改的fortran_enhanced.lang文件:

                     <!-- Note: changed language id and name -->
<language id="fortran_enhanced" _name="Fortran 95 2.0" version="2.0" _section="Sources">
  <metadata>
    <property name="mimetypes">text/x-fortran</property>
                     <!-- Note: removed *.f and *.for from file extensions -->
    <property name="globs">*.f90;*.f95;</property>
    <property name="line-comment-start">!</property>
  </metadata>
  <styles>
    <style id="comment" _name="Comment" map-to="def:comment"/>
    <style id="floating-point" _name="Floating Point" map-to="def:floating-point"/>
    <style id="keyword" _name="Keyword" map-to="def:keyword"/>
    <style id="intrinsic" _name="Intrinsic function" map-to="def:builtin"/>
    <style id="boz-literal" _name="BOZ Literal" map-to="def:base-n-integer"/>
    <style id="decimal" _name="Decimal" map-to="def:decimal"/>
    <style id="type" _name="Data Type" map-to="def:type"/>
  </styles>
  <default-regex-options case-sensitive="false"/>
  <definitions>
                     <!-- Note: I want comments only beginning with !, not C -->
    <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
      <start>!</start>
      <include>
        <context ref="def:escape"/>
        <context ref="def:in-line-comment"/>
      </include>
    </context>
(...)

我已经阅读过此问题[ 傻瓜的自定义gedit语法突出显示?],并尝试使新的fortran_enhanced.lang文件可读

$ cd /usr/share/gtksourceview-3.0/language-specs
$ sudo chmod 0644 fortran_enhanced.lang

但这没什么区别。

我不得不说,我以前从未做过这样的事情,而且我什至都不了解大多数语言文档,因此我对所有批评持开放态度,因为我纯粹是凭直觉进行指导的。

谢谢高级!


在帖子的底部,您说过cd /usr/share/gtksourceview-3.0/language-specs。那是您实际运行的命令吗?如果是这样,则只需将文件移至/usr/local/share/gtksourceview-3.0/language-specs
evan.bovie 2011年

@ emb1995我已按照您的建议将gtksourceview-3.0文件夹复制到/ usr / local / share(我说复制是因为该文件夹位于我计算机的/ usr / share /中)。无论如何,这似乎对我不起作用,当在gedit中选择新的突出显示文件时,我仍然得到纯文本:(
Oscar Saleta Reig 2011年

Answers:


4

我想我发现了您出了什么问题:

更改标记中的id(和_name)很好,这是正确的<language ...>。毕竟,这是您创建的新的突出显示方案。

但是,然后您还必须更改文件中使用此ID的其他位置。在语言定义的最下方(问题的引号中省略),您会发现:

<context id="fortran" class="no-spell-check">

显然,您必须具有一个与您的语言具有相同ID的上下文,包括/引用所有使用的上下文定义,以便gedit / GtkSourceView在选择特定方案时使用它。

我是怎么找到的

我根本不是专家。我的全部限定条件是,我以前看过XML文件;)因此,我只能做“有根据的”猜测。

提示我的是从终端窗口启动gedit时显示的警告

(gedit:6786):GtkSourceView-警告**:无法加载'/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang':缺少主要语言定义(id =“ frtrn”。)

(我在测试时使用“ frtrn ”作为id,名称和文件扩展名,您应该使用“ fortran_enhanced ” 得到相同的警告。)

这使我非常怀疑,无法在文件的其余部分中搜索原始ID。在尝试了上述解决方案之后,我还找到了以下行来支持我的解释:

[定义]在这里,我们应该定义一个主上下文,即我们在文件开头输入的上下文:为此,我们使用标记,其ID等于元素[...]的ID。

它来自GtkSourceView文档中的语言定义文件教程

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.