如何在Emacs中而不是在Fortran模式下突出显示Fortran固定格式连续行符号?

如何在Emacs中而不是在Fortran模式下突出显示Fortran固定格式连续行符号?,emacs,fortran,Emacs,Fortran,我正在使用f90代码,但使用固定格式的文件。因此,我为这些代码文件创建了一个特定的主模式(实际上只是使用fortran模式缩进函数的f90模式)。但有一件事我没有处理好:第6列中连续行字符的着色。如何在我修改的f90.el中使用它 非常感谢 编辑: 以下是派生模式: (require 'fortran) (define-derived-mode epx-mode f90-mode "EPX" (set (make-local-variable 'indent-line-function)

我正在使用f90代码,但使用固定格式的文件。因此,我为这些代码文件创建了一个特定的主模式(实际上只是使用fortran模式缩进函数的f90模式)。但有一件事我没有处理好:第6列中连续行字符的着色。如何在我修改的f90.el中使用它

非常感谢

编辑:

以下是派生模式:

(require 'fortran)

(define-derived-mode epx-mode f90-mode "EPX"
  (set (make-local-variable 'indent-line-function) 'fortran-indent-line)
  (set (make-local-variable 'indent-region-function)
       (lambda (start end)
         (let (fortran-blink-matching-if ; avoid blinking delay
               indent-region-function)
           (indent-region start end nil))))
  (set (make-local-variable 'font-lock-syntactic-keywords)
     epx-font-lock-syntactic-keywords)
  )

(defvar epx-font-lock-syntactic-keywords nil
  "`font-lock-syntactic-keywords' for F90.
These get fixed-format comments fontified.")
(let ((comment-chars "cd\\*")       ; `d' for `debugging' comments
      )
  (setq epx-font-lock-syntactic-keywords
    ;; Fixed format comments.  (!-style handled normally.)
    (list
     (list (concat "^[" comment-chars "]") 0 '(11))
     (list (concat "^[^" comment-chars "\t\n]" ".\\{71\\}"
               "\\([^\n]+\\)")
           1 '(11))))
  )

(provide 'epx)
它将
indet line函数
indent region函数
更改为fortran版本,而不是f90。它还修改
字体锁定语法关键字
,为固定格式的注释着色

和一个示例代码:

      module foo

* This is a fixed format comment                                                                                                                                              

      call bar(a, ! this is a f90 comment and a fortran splitted line                                                                                                         
     &     b)
 42   ! this is a label for a ugly goto                                                                                                                                       
      end module foo
我还注意到标签没有突出显示

编辑:Ok;我添加了以下内容以使其正常工作:

(font-lock-add-keywords 'epx-mode
  '(("^ *\\([0-9]+\\)" . font-lock-constant-face)
    ("^ \\{5\\}\\([^ 0\n]\\)" 1 font-lock-string-face)
    ("^\t\\([1-9]\\)"         1 font-lock-string-face)))

非常感谢

这是因为您继承的是
f90模式
,而不是
fortran模式
。这两种模式提供了非常不同的字体锁定关键字集,只有在
fortran模式下
才会突出显示
&
字符和标签

编辑:如果您想要f90编辑功能,但仍然使用fortran模式的突出显示,我想您可以在代码中添加以下代码(取自fortran.el):

(set (make-local-variable 'font-lock-defaults)
     '((fortran-font-lock-keywords
        fortran-font-lock-keywords-1
        fortran-font-lock-keywords-2
        fortran-font-lock-keywords-3
        fortran-font-lock-keywords-4)
       nil t ((?/ . "$/") ("_$" . "w"))
       fortran-beginning-of-subprogram))

或者,您可以从fortran模式中选择单个字体锁定规则,并使用
字体锁定添加关键字将它们添加到您的模式中。(您可以使用一条一条地逐步浏览字体锁定规则,看看它们有什么效果。)

您可以发布一个代码示例吗?以及修改后的el.f90的示例。并描述它现在的功能。相关的@林迪丹瑟:我加上code@AlexanderVogt:是的,这是相关的,但在我看来,这篇文章并没有提供一个有效的解决方案。是的,但这正是我想做的:从f90模式的功能中获益,通过修改来处理fortran固定格式。所以我修正了缩进和格式,但我无法处理
&
和标签。。。