find + xargs + ctags 以某种方式缺少整个子目录的标签
find + xargs + ctags is somehow missing tags for entire subdirectories
(我正在使用 RHEL7)。
对于 Vim 我创建了一个 tags
文件 find
和 ctags
,运行 它来自包含我的许多目录的目录 Python 打包源代码。
最初我是这样做的:
find . -name \*.py | xargs ctags
但在某些时候我发现它丢失了一些完整的包。
奇怪的是,当我决定跳过所有测试目录时它得到了修复:
find . -name \*.py -not \( -path \*/tests\*/\* \) | xargs ctags
我最近又添加了一些 Python 包,现在这个修复程序又跳过了一些目录。
顺便说一句,这个有效:
find . -name \*.py > files_for_ctags.txt; ctags -L files_for_ctags.txt
所以现在这将是我的解决方案。
但如果能理解为什么 xargs
版本有时会跳过整个标签目录,那就更好了。
有什么建议吗?
find 可能会通过管道向 xargs 发送太多行。
您可以用 find . -name \*.py | wc -l
.
确认
在这种情况下,xargs 启动 ctags 进程超过两次。
第 n 个启动的 ctags 进程可能会覆盖第 (n-1) 个启动的 ctags 进程生成的标签文件。这可能是你观察到的跳过技巧
正如我在评论中所写,您可以使用 find . -name \*.py | ctags -L -
来避免跳过。
关于“-L -”存在一个已知问题。
如果find发送一个以“--”开头的文件名给ctags,就麻烦了; ctags 将其识别为一个选项。
参见 https://github.com/universal-ctags/ctags/issues/1883。
(我正在使用 RHEL7)。
对于 Vim 我创建了一个 tags
文件 find
和 ctags
,运行 它来自包含我的许多目录的目录 Python 打包源代码。
最初我是这样做的:
find . -name \*.py | xargs ctags
但在某些时候我发现它丢失了一些完整的包。
奇怪的是,当我决定跳过所有测试目录时它得到了修复:
find . -name \*.py -not \( -path \*/tests\*/\* \) | xargs ctags
我最近又添加了一些 Python 包,现在这个修复程序又跳过了一些目录。
顺便说一句,这个有效:
find . -name \*.py > files_for_ctags.txt; ctags -L files_for_ctags.txt
所以现在这将是我的解决方案。
但如果能理解为什么 xargs
版本有时会跳过整个标签目录,那就更好了。
有什么建议吗?
find 可能会通过管道向 xargs 发送太多行。
您可以用 find . -name \*.py | wc -l
.
在这种情况下,xargs 启动 ctags 进程超过两次。 第 n 个启动的 ctags 进程可能会覆盖第 (n-1) 个启动的 ctags 进程生成的标签文件。这可能是你观察到的跳过技巧
正如我在评论中所写,您可以使用 find . -name \*.py | ctags -L -
来避免跳过。
关于“-L -”存在一个已知问题。 如果find发送一个以“--”开头的文件名给ctags,就麻烦了; ctags 将其识别为一个选项。 参见 https://github.com/universal-ctags/ctags/issues/1883。