我使用find-tag
和kill-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
的解决方案,但当然一般解决方案会更好。
答案 0 :(得分:1)
也许吧,但是“你这样的突出显示”是什么意思,特别是“基于TAGS文件的内容”,这一点并不太清楚。
“此类突出显示” - 字体锁定突出显示用于查看缓冲区,在本例中为f90-mode
中的缓冲区。因此,您确实需要为该模式添加字体锁定,无论如何。这与您进入模式的方式无关(从访问TAGS
或以其他方式)。
“基于TAGS文件的内容” - 这些内容将告诉您定义了哪些名称(以及在哪里),但仅此而已。
但也许你说你从my_function
文件中得到名称TAGS
,并且你想要字体锁定(在f90-mode
中)每个名字在TAGS
中列出已定义。如果是这种情况,那么您可以解析TAGS
以获取已定义名称的列表,并将font-lock-keywords
中的每一个添加到f90-mode
。您可以使用(tags-completion-table)
获取TAGS
中的标记列表(已定义的名称)。
只需使用mapatoms
迭代(tags-completion-table)
返回的obarray。函数参数将为符号添加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中添加一些过滤测试到mapatoms
,这样只有某些符号才能被字体锁定。
无论如何,也许这会让你开始。 HTH。