Geany:对于某些单词的自定义文件类型进行语法高亮显示

6

Geany是一款简单、快速、但功能强大的文本编辑器。它对几乎所有编程语言都有相当强的语法高亮支持。

我想知道如何为我的特殊需求程序“Phosim”创建自定义语法高亮。该程序的文件扩展名为.cat

到目前为止,我已经完成了以下步骤:
首先,我创建了文件类型扩展配置文件:~/.config/geany/filetype_extensions.conf
其内容如下:

[Extensions]
Gnuplot=*.gp;*.gnu;*.plt;
Galfit=*.gal;
Phosim=*.cat;
[Groups]
Script=Gnuplot;Galfit;Phosim;  

在这里,我正在尝试为 Gnuplot、Galfit 和 Phosim 应用自定义的高亮显示。对于 Gnuplot 和 Galfit,它可以正常工作。但是对于 Phosim 我遇到了一些问题。

然后我创建了文件定义配置文件:~/.config/geany/filedefs/filetypes.Phosim.conf
其内容如下:

# Author  : Bhishan Poudel
# Date    : May 24, 2016
# Version : 1.0


[styling]
# Edit these in the colorscheme .conf file instead
default=default
comment=comment_line
function=keyword_1
variable=string_1,bold
label=label
userdefined=string_2
number=number_2


[keywords]
# all items must be in one line separated by space
variables=object Unrefracted_RA_deg SIM_SEED none
functions=
lables=10
userdefined=angle 30 Angle_RA 20.0 none  
numbers=0 1 2 3 4 5 6 7 8 9


[lexer_properties]
nsis.uservars=1
nsis.ignorecase=1


[settings]
# default extension used when saving files
extension=cat

# single comments, like # in this file
comment_single=#
# multiline comments
#comment_open=
#comment_close=


# This setting works only for single line comments
comment_use_indent=true

# context action command (please see Geany's main documentation for details)
 context_action_cmd=

# lexer filetype should be an existing lexer that does not use lexer_filetype itself
lexer_filetype=NSIS


[build-menu]
EX_00_LB=Execute
EX_00_CM=
EX_00_WD=
FT_00_LB=
FT_00_CM=
FT_00_WD=
FT_02_LB=
FT_02_CM=
FT_02_WD=

现在我的 example.cat 文件看起来像这样:
# example.cat
angle 30
Angle_RA 20.0
object none

# Till now, 
# Words highlighted    : angle 30 object none
# Words not highlighted: Angle_RA 20.0
# I like them also to be highlighted!

我只为两个词,即object和none获得了语法高亮效果。我尝试使用Fortran相同的样式,因为它有大写字母,但仍然不起作用。

我们如何为包含大写、小写和下划线的变量名称获得语法高亮效果?

例如:
我对单词objectnone进行了语法高亮标记。
但是,对于单词Angle_RA20.0,我没有获得语法高亮标记。

此外,我的数字01,..,9都可以高亮显示,但是小数不能高亮显示。我们如何也可以高亮小数?

例如:
我对单词11000进行了语法高亮标记,但是对于单词49552.3180.0,我没有获得语法高亮标记。

以下是一些有用的链接:
使Geany识别其他文件扩展名
自定义Geany的语法高亮效果
http://www.geany.org/manual/current/index.html#custom-filetypes http://www.geany.org/manual/#lexer-filetype


如果社区中有更好的答案,我欢迎并将其作为被采纳的答案,但同时,我已经在下面发布了一个解决方法作为答案。 - BhishanPoudel
1个回答

2

我没有创建新的文件定义文件,而是为Python添加了文件扩展名,这对我很有效。

例如,我想自定义突出显示具有扩展名.icat的文件(如果您感兴趣,这是天文学中Phosim软件的实例目录文件)。

缺点:附加的单词也会在Python脚本(.py、.pyc、.ipy)中被突出显示。

注意:如果有人发布使用新文件扩展名~/.config/geany/filedefs/filetypes.Phosim.conf的解决方案,我将非常欢迎。

我的example.pcat文件如下所示:

# example.pcat
Unrefracted_RA_deg 0
Unrefracted_Dec_deg 0
Unrefracted_Azimuth 0
Unrefracted_Altitude 89
Slalib_date 1994/7/19/0.298822999997
Opsim_rotskypos 0
Opsim_rottelpos 0
Opsim_moondec -90
Opsim_moonra 180
Opsim_expmjd 49552.3
Opsim_moonalt -90
Opsim_sunalt -90
Opsim_filter 2
Opsim_dist2moon 180.0
Opsim_moonphase 10.0
Opsim_obshistid 99999999
Opsim_rawseeing 0.65
SIM_SEED 1000
SIM_MINSOURCE 1
SIM_TELCONFIG 0
SIM_CAMCONFIG 1
SIM_VISTIME 15000.0
SIM_NSNAP 1
object 0 0.0 0.0 20 ../sky/sed_flat.txt 0 0 0 0 0 0 bhishan.fits 0.09 0.0 none

我希望Geany能够将所有的首字母标记为黄色,数字标记为品红色,单词“none”标记为蓝色。
首先,我创建(或编辑,如果已存在)该文件:
~/.config/geany/filetype_extensions.conf

并在其中添加以下内容。

[Extensions]
Gnuplot=*.gp;*.gnu;*.plt;
Galfit=*.gal;
Phosim=*.pcat;
Python=*.py;*.pyc;*.ipy;*.icat;*.pcat
[Groups]
Script=Gnuplot;Galfit;Phosim;Python; 

接下来,我将额外的关键词添加到已有的Python文件类型的关键词中。
为此,我创建了一个文件(如果已经存在,则进行编辑):

~/.config/geany/filedefs/filetypes.python

现在,文件~/.config/geany/filedefs/filetypes.python看起来像这样:
# Author  : Bhishan Poudel
# Date    : June 9, 2016
# Version : 1.0
# File    : Filetype for both python and phosim_instance_catalogs

[styling]
default=default
commentline=comment_line
number=number_1
string=string_1
character=character
word=keyword_1
triple=string_2
tripledouble=string_2
classname=type
defname=function
operator=operator
identifier=identifier_1
commentblock=comment
stringeol=string_eol
word2=keyword_2
decorator=decorator


[keywords]
# all items must be in one line
primary=and as assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while with yield False None True  Words_after_this_are_for_Phosim_pcat_files Unrefracted_RA_deg Unrefracted_Dec_deg Unrefracted_Azimuth Unrefracted_Altitude Slalib_date Opsim_moondec Opsim_rotskypos Opsim_rottelpos Opsim_moondec Opsim_moonra Opsim_expmjd Opsim_moonalt Opsim_sunalt Opsim_filter Opsim_dist2moon Opsim_moonphase Opsim_obshistid Opsim_rawseeing SIM_SEED SIM_MINSOURCE SIM_TELCONFIG  SIM_CAMCONFIG SIM_VISTIME SIM_NSNAP object


identifiers=ArithmeticError AssertionError AttributeError BaseException BufferError BytesWarning DeprecationWarning EOFError Ellipsis EnvironmentError Exception FileNotFoundError FloatingPointError FutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexError KeyError KeyboardInterrupt LookupError MemoryError NameError NotImplemented NotImplementedError OSError OverflowError PendingDeprecationWarning ReferenceError RuntimeError RuntimeWarning StandardError StopIteration SyntaxError SyntaxWarning SystemError SystemExit TabError TypeError UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateError UnicodeWarning UserWarning ValueError Warning ZeroDivisionError __debug__ __doc__ __import__ __name__ __package__ abs all any apply basestring bin bool buffer bytearray bytes callable chr classmethod cmp coerce compile complex copyright credits delattr dict dir divmod enumerate eval execfile exit file filter float format frozenset getattr globals hasattr hash help hex id input int intern isinstance issubclass iter len license list locals long map max memoryview min next object oct open ord pow print property quit range raw_input reduce reload repr reversed round set setattr slice sorted staticmethod str sum super tuple type unichr unicode vars xrange zip array arange Catagorical cStringIO DataFramedate_range genfromtxt  linspace loadtxt matplotlib none numpy np pandas pd plot plt pyplot savefig scipy Series sp StringIO


[lexer_properties]
fold.comment.python=1
fold.quotes.python=1


[settings]
# default extension used when saving files
extension=py

# the following characters are these which a "word" can contains, see documentation
wordchars=_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

# MIME type
mime_type=text/x-python
comment_single=#
comment_open="""
comment_close="""
comment_use_indent=true

# context action command (please see Geany's main documentation for details)
context_action_cmd=


[indentation]
width=4
# 0 is spaces, 1 is tabs, 2 is tab & spaces
type=0


[build_settings]
# %f will be replaced by the complete filename
# %e will be replaced by the filename without extension
# (use only one of it at one time)
compiler=python -m py_compile "%f"
run_cmd=python "%f"


[build-menu]
FT_00_LB=Execute
FT_00_CM=python %f
FT_00_WD=
FT_01_LB=
FT_01_CM=
FT_01_WD=
FT_02_LB=
FT_02_CM=
FT_02_WD=
EX_00_LB=Execute
EX_00_CM=clear; python %f
EX_00_WD=
error_regex=([^:]+):([0-9]+):([0-9:]+)? .*
EX_01_LB=
EX_01_CM=
EX_01_WD=

现在,我重新启动了Geany,我可以看到所有的第一个单词都是黄色的,数字是其他颜色,'none'这个单词是蓝色的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接