如何在gedit中设置用户定义的函数名称?

问题描述:

我试图调整gedit风格,以便用户定义的函数具有不同的颜色。如何在gedit中设置用户定义的函数名称?

我通过http://library.gnome.org/devel/gtksourceview-2.0/stable/lang-reference.html搜索,但我找不到任何东西。

我认为<style name="def:function" />可能会这样做,但它似乎对gedit没有影响。

<?xml version="1.0" ?> 
<style-scheme id="wombat" name="Wombat" version="1.0"> 
     <author/> 
     <_description>Wombat theme</_description> 
     <style background="#2d2d2d" name="current-line"/> 
     <style background="#857b6f" bold="true" foreground="#fff000" name="bracket-match"/> 
     <style background="#242424" bold="true" foreground="#fff000" name="search-match"/> 
     <style background="#656565" name="cursor"/> 
     <style background="#242424" foreground="#f6f3e8" name="text"/> 
     <style background="#272727" foreground="#857b6f" name="line-numbers"/> 
     <style foreground="#363636" italic="true" name="def:comment"/> 
     <style foreground="#e5786d" name="def:constant"/> 
     <style foreground="#95e454" italic="true" name="def:string"/> 
     <style foreground="#cae682" name="def:identifier"/> 
     <style foreground="#000000" name="def:function"/> 
     <style foreground="#cae682" name="def:type"/> 
     <style foreground="#8ac6f2" name="def:statement"/> 
     <style foreground="#8ac6f2" name="def:keyword"/> 
     <style foreground="#e5786d" name="def:preprocessor"/> 
     <style foreground="#e5786d" name="def:number"/> 
     <style foreground="#e7f6da" name="def:specials"/> 
    </style-scheme> 

任何提示?谢谢!

+0

做(A,B,C):'要以不同的颜色突出显示?这是我的理解,也是我追求的。 – jozzas 2012-05-30 00:23:44

+0

我只注意到我你使用Python假设。我相信你可以为你想要做的任何语言提出类似的规则。 – jozzas 2012-05-30 05:04:31

您需要编辑语言定义文件以添加新节。语言的定义是python.lang,对我来说是/usr/share/gtksourceview-2.0/language-specs

您首先需要添加一个样式的风格ID,你要创建:

<style id="class-name" _name="Python Class Name" map-to="def:type"/> 

然后你需要一个新的环境下的<context-id="python"部分添加到该文件:

<context id="class-name" style-ref="class-name" style-inside="true"> 
    <start>\%{string-prefix}def\ </start> 
    <end>\(</end> 
    <include> 
     <context ref="python"/> 
     <context ref="format"/> 
     <context ref="escaped-char"/> 
    </include> 
</context> 

您需要style-inside="true"不将样式应用到我们匹配的def(。从文档:

风格,内部(可选) 如果该属性是“真”,则突出显示风格将被应用到开始和结束的比赛之间的区域;否则整个上下文将突出显示。

保存该信息,然后重新启动gedit并将函数名称设置为与错误相同的样式,例如,文本AttributeError会。您可以更改语言文件顶部的map-to行,以更改应用于您的函数名称的样式。

重用现有样式而不是为类名定义新样式的好处是,它可以用于将来安装的所有gedit主题 - 它们不需要修改以添加Python特定的函数名称部分。


编辑: 正如在评论中指出,这种核弹的“高清”的造型。在“类名”部分(我上面的代码)移动到已经存在的“关键字”部分下,修复了这个,因为它移动在层次结构我们的变更较低。我有机会的时候会更新图片。

前: enter image description here

后:你想在`高清FOO的`foo` enter image description here

+0

你会注意到,不过,这将删除高亮‘高清’的关键字。不太知道如何解决这个问题,但你可能想看看Vim的或崇高文本的语言定义。 – ptomato 2012-05-30 08:28:48

+0

通过@jozzas提供的答案是对于Gtksourceview 2.0来说很好,但是允许我为3.0版让你头疼: – venzen 2016-07-10 12:19:26

+0

你创建的

如果我正确首先是理解你,你需要在你的* .lang文件中定义新风格

<style id="function" _name="Functions"/> 

然后让所有需要的功能列表一样

<context id="functions" style-ref="function"> 
    <keyword>abs</keyword> 
    <keyword>acos</keyword> 
    <keyword>acosh</keyword> 
</context> 

然后在更新图块定义文件末尾添加新内容

<context ref="functions"/> 

其非常重要的正确orde r,上下文定义顺序应该在所有文件中都是相同的,一个元素随时都可以,不要混淆。

,并在你需要在你的风格定义的风格formmat/*。xml文件末尾,在我的情况下,它是

<style name="php:function" foreground="#0000ee" bold="false"/> 

其中i采用php应该是你的语言ID,同样在*。 lang文件。

+1

不,你将需要匹配“高清”,因为我相信海报想在'高清FOO(A,B,C)的'foo':'要以不同的颜色突出显示。你无法匹配'foo',因为用户可以随心所欲地调用函数。你几乎要能够抓住任何东西*后*'def'和开括号'('之前,我不知道如何做到这一点正则表达式。 我也想这样,因为它有助于一个文件更容易库内发现功能。 – jozzas 2012-05-30 00:22:45