是否有任何插件可以让emacs自动更新我的C项目中的TAGS文件(例如缓冲区保存或访问)或者如果没有TAGS文件,可以创建一个新插件?
我在Windows上运行(没有Cygwin),所以所有花哨的shell脚本都无济于事。我希望本机emacs解决方案不使用任何外部脚本。
我已经尝试了build-tags.el和etags-table.el,但这些都没有用(我想要的方式)。
还有其他想法吗?
答案 0 :(得分:9)
以下是我为C项目生成TAGS文件的方法:
这将在当前目录中为所有子目录和文件创建一个TAGS文件。
这是一个完全相同的emacs函数:
(defun compile-tags ()
"compile etags for the current project"
(interactive)
(cd "YOUR_DIRECTORY")
(compile "find . -name \"*.[chCH]\" -print | etags -"))
注意:如果您在Windows上,则需要安装cygwin并确保c:\cygwin\bin
在您的路径中,以便在您的路径中获得find
。还要确保emacs bin目录位于您的路径中,以便您也可以获得etags
。
答案 1 :(得分:9)
etags-update可能对您有所帮助。我没有测试它,但根据自述文件:
上找到了它etags-update.el是一种Emacs全局次要模式,可在保存文件时更新您的TAGS。
答案 2 :(得分:4)
为什么不在构建脚本中添加执行ctags?编译时(最多),您只需要一个新的标签文件。我倾向于每晚编写一个计划任务来构建标签文件。似乎工作得很好。
答案 3 :(得分:2)
我将semantic + gnu global的组合用于我的日常工作。 GNU Global的数据库每天更新一次,而语义使用它们进行基本导航,并动态地重新解析更改的文件。
中找到有关这些软件包的更多信息答案 4 :(得分:2)
试试我的`ctags.el'[1]模块。
配置示例:
(setq tags-revert-without-query t)
(global-set-key (kbd "<f5>") 'ctags-create-or-update-tags-table)
然后只需按<f5>
即可更新或创建TAGS文件。那个功能
如果是TAG,在当前及其父目录中查找文件TAGS
找不到文件,它会问你在哪里创建一个新文件。
这是一个新的库,可能有bug等,所以欢迎任何帮助。
答案 5 :(得分: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文件(如果这样可行;)
答案 6 :(得分: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,您需要的只是替换&#34;〜/ workspace / MYPROJ&#34;用&#34; C:/ workspace / MYPROJ&#34;。 CTags可执行文件可以是任何版本,因为生成的TAGS只包含相对路径。