Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Emacs的.F90文件中以不同方式突出显示浮点数和整数?_Emacs_Fortran_Elisp - Fatal编程技术网

如何在Emacs的.F90文件中以不同方式突出显示浮点数和整数?

如何在Emacs的.F90文件中以不同方式突出显示浮点数和整数?,emacs,fortran,elisp,Emacs,Fortran,Elisp,如何在Emacs的.F90文件中以不同方式突出显示浮点数和整数?在我的24.4.1版中,浮点数和整数之间没有区别。如何以不同的颜色显示它们?默认的emacs fortran模式不会区分浮点数和整数的字体。但是,您可以使用突出显示数字软件包(通过M-x软件包列表软件包或) 将以下内容添加到.emacs以突出显示浮动(根据需要更改前景色和背景色): (add-hook 'fortran-mode-hook 'highlight-numbers-mode) (add-hook 'after-init-

如何在Emacs的.F90文件中以不同方式突出显示浮点数和整数?在我的24.4.1版中,浮点数和整数之间没有区别。如何以不同的颜色显示它们?

默认的emacs fortran模式不会区分浮点数和整数的字体。但是,您可以使用
突出显示数字
软件包(通过
M-x软件包列表软件包
或)

将以下内容添加到
.emacs
以突出显示浮动(根据需要更改前景色和背景色):

(add-hook 'fortran-mode-hook 'highlight-numbers-mode)
(add-hook 'after-init-hook
      (lambda ()
        (puthash 'fortran-mode
                 (rx (and symbol-start
                          (? "-")
                          (+ digit)
                          "."
                          (+ digit)
                          (*? any)
                          symbol-end))
                 highlight-numbers-modelist)
        (set-face-attribute 'highlight-numbers-number nil
                            :foreground "gray60" :background "black")))

我在两周前发布了这个问题。现在我有了自己的解决方案。所以,我在这里发布它,作为其他可能遇到同样问题的人的参考

首先,我要感谢@Justin之前的回答,并建议使用
突出显示数字模式
。他的解决方案可能有效。但是,我有一个稍微复杂的要求,所以我决定用不同的方式

另外,我必须承认我是一个非常初学编程的人。所以,你可能会在我的代码中发现一些愚蠢的行。如果你认为有更好的方法,请随时告诉我

这是我的解决方案

  • 在emacs中安装
    突出显示数字模式
    父模式
    (第一个模式需要第二个模式)。在我的情况下,它们安装在/
    ~/.emcas.d/elpa/

  • 据我所知,原来的
    突出显示数字模式
    不支持
    f90模式
    ,它突出显示所有数字(例如2、3.4、8e-2)同样,通过改变喜欢的颜色。这不符合我的要求。具体来说,我只想突出显示浮点数,我在.f90脚本中将它们表示为2..5。在Fortran 90中,浮点数和整数有不同的除法规则。因此,我希望以不同的方式对它们进行可视化,以减少r因此,我更改了源代码中的以下部分(
    突出显示数字.el
    ):

  • 如果您将上面的代码与Fanael Linithen的原始代码进行比较,您会注意到我添加了两个
    。正如Fanael所说(在私下讨论中),这可能是因为
    ”“
    在emacs的f90模式中被当作标点符号。因此,我必须相应地修改regexp和表

  • 完成上述操作后,我将行
    (添加hook'f90 mode hook'突出显示数字模式)
    放在我的
    init.el
    中,通过elpa加载此包

  • 之后,我的代码中的浮动将突出显示,例如

  • 你可以看到浮点数和整数的区别


    最后,我想补充一点,我已经用了好几天了。到目前为止还没有出现任何问题。所以,我想它正在工作!:)

    嗨,贾斯汀,谢谢你的回答。我已经安装了突出显示数字模式和父模式。但是,将您的建议放在我的init.el中会出现一个错误:“Symbol的变量值为void:highlight numbers modelist”。我还尝试直接在highlight-numbers.el中添加fortran模式,然后稍后手动启用此包。但它仍然不能区分浮点数和整数。它们一起变成不同的颜色。你能解释一下你在代码里写了什么吗?提前谢谢!我不确定把上面的代码放在
    init.el
    中是否有效,我把它添加到了我的
    ~/.emacs
    中。错误表明,
    突出显示数字
    包尚未初始化。至于您的第二条评论,这可能意味着,
    突出显示数字模式
    处于活动状态,但使用默认模式匹配,同时突出显示浮点和整数。我上面写的代码只会突出显示浮动。我试图将它放在~/.emacs中,但也不起作用。但是我可以通过第一个钩子初始化包(在我的例子中是f90模式)。所以,我试图修改source.el脚本。到目前为止,我只能突出显示d.d格式(如2.3),但不能突出显示2。或.2等(这是我最想要的)。你知道如何写一个rx,使d。和.d是否也可以突出显示?(lisp让我很困惑…
    ~/.emacs
    ~/.emacs.d/init.el
    在功能上是等效的。选择一个,不要使用另一个(我喜欢
    init.el
    ,因为这样所有东西都在一个目录中)<代码>高亮显示数字modelist未自动加载。只需将使用它的代码包装为
    (加载后使用eval'突出显示数字…
    )。这将在加载库后运行包装代码,因此所有内容都将被定义。它工作正常,谢谢!我更改了elpa文件夹中现有的highlight-numbers.el文件,并通过M-x字节重新编译目录RET~/.emacs.d/elpa重新编译/
    (defconst highlight-numbers-generic-regexp
      (rx (or
           "."
           (? (and
               symbol-start
               digit
               symbol-end)
              "."
              (* digit))))
      "Generic regexp for number highlighting.
    It is used when no mode-specific one is available.")
    
    (defvar highlight-numbers-modelist
      (copy-hash-table
       (eval-when-compile
         (let ((table (make-hash-table :test 'eq)))
    
           (puthash 'f90-mode
                    (rx (or
                         "."
                         (? (and
                             symbol-start
                             (or (and (+ digit) (? (or "." "e" ".e" "E" ".E")) (+ digit))
                             (and (+ digit) (? (or "e-" ".e-" "E-" ".E-")) (+ digit))
                             (and (+ digit) "." (+ digit) (? (or "e" "E")) (+ digit))
                             (* digit))        
                             symbol-end)
                            "."
                            (* digit))))
                     table)