18

C プロジェクトの TAGS ファイルを自動的に更新する (たとえば、バッファーの保存またはアクセス時)、または TAGS ファイルが存在しない場合に新しいファイルを作成するための emacs 用のプラグインはありますか?

私は Windows で (Cygwin なしで) 実行しているので、派手なシェル スクリプトは役に立ちません。外部スクリプトを使用しないネイティブの emacs ソリューションを期待していました。

私はすでにbuild-tags.eletags-table.el を試しましたが、これらのどれも実際には機能しませんでした (私が望んでいた方法)。

他のアイデアはありますか?

4

7 に答える 7

10

etags-updateがあなたの場合に役立つかもしれません。私はそれをテストしませんでしたが、readmeによると:

etags-update.el は、ファイルの保存時に TAGS を更新する Emacs グローバル マイナー モードです。

TAGSファイルを構築するためのEmacswikiページで見つけました

于 2010-04-23T12:54:51.743 に答える
4

ビルド スクリプトに ctags の実行を追加してみませんか? コンパイル時に新しいタグファイルが必要になるだけです (せいぜい)。私は毎晩タグファイルを構築するスケジュールされたタスクを書くだけです。かなりうまくいくようです。

于 2009-02-14T03:37:35.397 に答える
2

私の `ctags.el'[1] モジュールを試してみてください。

構成例:

(setq tags-revert-without-query t)
(global-set-key (kbd "<f5>") 'ctags-create-or-update-tags-table)

次に、 を押すだけで<f5>、TAGS ファイルを更新または作成できます。その関数は、現在のディレクトリとその親ディレクトリでファイル TAGS を探します。TAG ファイルが見つからない場合は、新しいファイルを作成する場所を尋ねます。

これは新しいライブラリであり、おそらくバグなどがあるため、どんな助けも大歓迎です。

[1] https://bitbucket.org/semente/ctags.el/

于 2011-06-18T12:43:04.863 に答える
1

これはあなたを近づけるかもしれません(テストされていません):

(defvar my-auto-update-tags-alist
  (list '("/some/path/to/TAGS" "command_to_build_tags")
        '("/another/path/to/TAGS" "another_build_command")))

(defun my-auto-update-tags ()
  "Automatically update TAGS files"
  (tags-table-check-computed-list)
  (let ((filename (buffer-file-name))
        build-cmd)
    (mapc (lambda (tag-file)
            (set-buffer tag-file)
            (when (member filename (tags-table-files))
              (setq build-cmd (cdr (assoc tag-file my-auto-update-tags-alist)))
              (when build-cmd
                (call-process build-cmd nil 0))))
          tags-table-computed-list)))

(add-hook 'after-save-hook 'my-auto-update-tags)

すでにTAGSファイルにあるファイルでのみ機能します(テストされていないことを述べましたか?)。新しいファイルを追加する場合は、最初にTAGSファイルを自分で再生成する必要があります。呼び出しプロセス部分は非同期で機能するはずなので、TAGSファイルが実際に再構築されるまでには少し時間がかかる場合があります(これが機能する場合でも;)

于 2009-02-14T12:53:35.950 に答える
1

find-and-ctags ( https://github.com/redguardtoo/find-and-ctags ) をインストールし、以下のコードを ~/.emacs に挿入します。

(defun my-setup-develop-environment ()
  (interactive)

  ;; you can use `find-and-ctags-current-full-filename-match-pattern-p' instead
  (when (find-and-ctags-current-path-match-pattern-p "/MYPROJ")
    (setq-local tags-table-list
                (list (find-and-ctags-run-ctags-if-needed "~/workspace/MYPROJ" ; project directory
               '(("-not -size +64k" "--exclude=*.min.js") ; (find-opts ctags-opts)
                                                            ;; you may add more find-opts ctags-opts pair HERE to run find&ctags again to APPEND to same TAGS file
                                                            ;; ctags-opts must contain "-a" to append
                                                            ;; (find-opts "-a")
                                                            )))))

  ;; for other projects
  ;; insert NEW `when' statements here
  )
(add-hook 'prog-mode-hook 'my-setup-develop-environment) ; prog-mode require emacs24+
(add-hook 'lua-mode-hook 'my-setup-develop-environment) ; lua-mode does NOT inherit from prog-mode

;; OPTIONAL
(add-hook 'after-save-hook 'find-and-ctags-auto-update-tags)

これは Windows で動作します。「~/workspace/MYPROJ」を「C:/workspace/MYPROJ」に置き換えるだけです。作成された TAGS には相対パスしか含まれていないため、CTags 実行可能ファイルは任意のバージョンである可能性があります。

于 2016-06-29T10:05:59.367 に答える