Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim插件YouCompleteMe递归添加头目录_Vim_Plugins_Syntax Highlighting - Fatal编程技术网

Vim插件YouCompleteMe递归添加头目录

Vim插件YouCompleteMe递归添加头目录,vim,plugins,syntax-highlighting,Vim,Plugins,Syntax Highlighting,我正在尝试配置vim插件“YouCompleteMe”。我的C++项目由许多头文件组成,它们都在目录树上传播。为了添加头目录,我必须将它们添加到“.ycm\u extra\u conf.py”中 摘录: '-I', './src/base/utils', '-I', './src/base/modules', 但这样的事情是行不通的: '-I', './src/base/*', 有没有办法告诉YCM递归搜索头文件 谢谢。我也遇到了同样的问题,所以我创建了一个函数来解决这个问题。 将以下

我正在尝试配置vim插件“YouCompleteMe”。我的C++项目由许多头文件组成,它们都在目录树上传播。为了添加头目录,我必须将它们添加到“.ycm\u extra\u conf.py”中

摘录:

'-I',
'./src/base/utils',
'-I',
'./src/base/modules',   
但这样的事情是行不通的:

'-I',
'./src/base/*',
有没有办法告诉YCM递归搜索头文件


谢谢。

我也遇到了同样的问题,所以我创建了一个函数来解决这个问题。 将以下内容添加到标记列表后的“.ycm_extra_conf.py”中:

import glob
flagsRec=['/opt/e17/include/*'] 

def AddDirsRecursively( flagsRec ):                

  global flags                                                                                                         
  new_flags = []                                                                        
  for flag in flagsRec:                                                                                                                                
    for d in glob.glob(flag) :
      if os.path.isdir(d):
            new_flags.append('-I')
            new_flags.append(d)                                                               


  flags += new_flags                                                                                                                                


AddDirsRecursively( flagsRec )

其中“flagsRec”是要遍历并添加到“flags”中的dir(正则表达式)列表

我添加了一个新语法
-ISUB
,以包括所有子目录

e、 g。
“-ISUB./Pods/Headers/Public”

import os
import ycm_core

flags = [
#custom definition, include subfolders
'-ISUB./Pods/Headers/Public',
'-I./Pod/Classes',
]

def Subdirectories(directory):
  res = []
  for path, subdirs, files in os.walk(directory):
    for name in subdirs:
      item = os.path.join(path, name)
      res.append(item)
  return res

def IncludeFlagsOfSubdirectory( flags, working_directory ):
  if not working_directory:
    return list( flags )
  new_flags = []
  make_next_include_subdir = False
  path_flags = [ '-ISUB']
  for flag in flags:
    # include the directory of flag as well
    new_flag = [flag.replace('-ISUB', '-I')]

    if make_next_include_subdir:
      make_next_include_subdir = False
      for subdir in Subdirectories(os.path.join(working_directory, flag)):
        new_flag.append('-I')
        new_flag.append(subdir)

    for path_flag in path_flags:
      if flag == path_flag:
        make_next_include_subdir = True
        break

      if flag.startswith( path_flag ):
        path = flag[ len( path_flag ): ]
        for subdir in Subdirectories(os.path.join(working_directory, path)):
            new_flag.append('-I' + subdir)
        break

    new_flags =new_flags + new_flag
  return new_flags