1

我在 Fortran 90 代码的帮助下使用find-tagkill-this-buffer导航,例如

(global-set-key [(control return)] 'find-tag ) ;
(global-set-key (kbd "C-w") 'kill-this-buffer) ;

这提供了相对流畅的代码浏览体验。不幸的是,并非我的所有标签都具有相同的突出显示。因此,我最终使用以下表达式手动将目标添加到 font-lock-keywords

(add-hook 'after-change-major-mode-hook
          (lambda ()
            (font-lock-add-keywords 'f90-mode
              '(
                ("\\(my_function\\)" 1 font-lock-function-name-face t )
                ))))

在我的~/.emacs.d/init.el.

TAGS如果文件中列出的每个名称出现在 f90 模式下的缓冲区中,是否有解决方案突出显示每个名称?

我对 的解决方案最感兴趣f90-mode,但当然通用解决方案会更好。

4

1 回答 1

1

也许吧,但是“这样的突出显示”,尤其是“基于 TAGS 文件的内容”,您的意思并不太清楚。

  • “此类突出显示” - 字体锁定突出显示用于查看缓冲区,在本例中为f90-mode. 因此,无论如何,您确实需要为该模式添加字体锁定。这与您如何进入该模式(通过访问TAGS或以其他方式)无关。

  • “基于 TAGS 文件的内容” ——这些内容将告诉您定义了哪些名称(以及在何处定义),但仅此而已。

但也许您是说您my_functionTAGS文件中获取名称,并且您希望将字体锁定(in f90-mode)列出的每个名称TAGS作为定义。如果是这种情况,那么可以,您可以解析TAGS以获取已定义名称的列表,并将它们中的每一个添加到font-lock-keywordsfor f90-mode。您可以使用(tags-completion-table)TAGS.

只需用于mapatoms迭代由(tags-completion-table). 函数参数将为font-lock-keywords符号添加一个条目。像这样的东西(未经测试):

(defun foo ()
  (require 'etags)
  (let ((defined-symbs  (tags-completion-table)))
    (mapatoms (lambda (symb)
                (font-lock-add-keywords
                  'f90-mode `((,(format "\\(%s\\)" symb)
                              1 font-lock-function-name-face t)))))))

但请注意,(a)这将需要一段时间才能执行,并且(b)添加表中定义的每个符号TAGS,因此它将被字体锁定在f90-mode. 这真的是你想要的吗?如果您的TAGS表是专门从(仅)Fortran 文件创建的,那么这可能是有道理的;否则,也许不是。

因为它可能需要一段时间,所以您只会调用foo一次,而不是每次输入f90-mode. 您可以在更新TAGS文件后再次执行此操作,以获取任何更改。如果 (b) 是一个考虑因素,那么您也许可以在函数 arg to 中添加一些过滤测试mapatoms,以便只有某些符号被字体锁定。

无论如何,也许这会让你开始。HTH。

于 2013-10-20T15:59:12.247 回答