1

私はfind-tagandを使用して、次kill-this-bufferのようなキー バインディングを使用して Fortran 90 コードをナビゲートします。

(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_functionしかし、ファイルから名前を取得し、定義済みとしてリストされているすべての名前を ( で)TAGSフォントロックしたいと言っているのかもしれません。その場合は、はい、解析して定義された名前のリストを取得し、それぞれをforに追加できます。を使用して、タグ (定義済みの名前) のリストを取得できます。f90-modeTAGSTAGSfont-lock-keywordsf90-mode(tags-completion-table)TAGS

mapatomsによって返された obarray を反復するために使用するだけです(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)テーブルに定義されているすべてのシンボルを追加するため、.NET でフォントロックされることに注意してください。それは本当にあなたが望むものですか?テーブルが (のみ) Fortran ファイルから特別に作成されている場合、それは理にかなっているかもしれません。そうでなければ、そうではないかもしれません。TAGSf90-modeTAGS

しばらく時間がかかることがあるため、fooを入力するたびにではなく、1 回だけ呼び出しますf90-modeTAGSファイルを更新した後、変更を反映するためにもう一度行うことができます。(b) が考慮される場合は、関数 arg to にフィルタリング テストを追加してmapatoms、特定のシンボルのみがフォント ロックされるようにすることができます。

とにかく、おそらくこれで始められるでしょう。HTH。

于 2013-10-20T15:59:12.247 に答える