【问题标题】:How to generate a tags file for all C++ header files of the MSVC folder that couldn't be process by Ctags?如何为 Ctags 无法处理的 MSVC 文件夹的所有 C++ 头文件生成标签文件?
【发布时间】:2013-09-28 20:00:18
【问题描述】:

如果 Exuberant Ctags 无法在包含文件夹中处理,我如何为 Microsoft Visual C++ 的所有 C++ 头文件生成标签文件?

例如Microsoft Visual C++的头文件所在文件夹的路径为:“C:\Program Files\Microsoft Visual Studio 11.0\VC\include”

  1. 如何为包含文件夹中的所有 C++ 文件生成标签文件?
  2. 以及如何为包含文件夹中的所有 C++ 文件生成 及其子目录?

我已经试过命令了:

:!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f C:\Users\USR\vimfiles\tags\msvc C:\Program\ Files\Microsoft\ Visual\ Studio\ 11.0\VC\include

还有命令:

:!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f C:\Users\USR\vimfiles\tags\msvc C:\Program Files\Microsoft Visual Studio 11.0\VC\include

但是这些只是创建了一个标签文件"msvc",没有在\include 文件夹中标记任何文件。事实上,这是创建的标签文件的完整来源:

!_TAG_FILE_FORMAT   2   /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED   1   /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME  Exuberant Ctags //
!_TAG_PROGRAM_URL   http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.8 //

但我很确定,如果正在处理的文件夹位于 Windows 用户的 $HOME 上,例如它位于路径 "C:\Users\USR" .

【问题讨论】:

  • 你能解释一下这个问题和stackoverflow.com/questions/19068181/…的其他问题的区别吗?
  • 您能给我们举个例子,说明该目录中有哪些文件吗?
  • @GavinSmith 这里我们在路径 "C:\Program Files" 下处理,另一个在 Windows 用户路径下 "C:\Users\苏联”.
  • @romainl 有Visual C++的文件夹和一些头文件,包括iostreamistreamostream .

标签: c++ windows visual-studio visual-c++ vim


【解决方案1】:

我很确定这与您尝试处理的文件夹路径中的空格有关。尝试在它周围加上双引号,即:!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f C:\Users\USR\vimfiles\tags\msvc "C:\Program Files\Microsoft Visual Studio 11.0\VC\include"。用反斜杠转义空格不起作用,因为 Windows 使用它作为路径分隔符。

【讨论】:

  • 你做得很好,我忘了它是用shell执行的。现在,为什么我在测试时在生成的标记文件中看到的不是 C++ 文件,例如 test.java 标记?
  • Ctags 将读取并处理它可以读取的每个文件。您需要使用--exclude=*.java 来不处理java 文件,其他文件类型类似。你的--language-force=C++ 告诉 ctags 将每个文件都当作 C++ 对待(而不是只读取 C++ 文件),并且 java 语法足够接近,它必然会创建一些标签。
  • --language-force=c++ 解决了我来这里要解决的问题。 OP 中提到了它,但在这里看到它让我认为这就是标记标准 C++ 标头(<vector> 等)所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
相关资源
最近更新 更多