Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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
C++ 基于Vim中的文件类型创建文件夹_C++_Vim - Fatal编程技术网

C++ 基于Vim中的文件类型创建文件夹

C++ 基于Vim中的文件类型创建文件夹,c++,vim,C++,Vim,我最近发现了维姆并爱上了它。我主要在Python和C++中编码。Python部分已经完成(虽然建议会受到欢迎):但是我在C++方面遇到了麻烦。 我看到vim可以运行Make命令,并带有适当的参数。所以我希望Vim在当前项目文件夹中创建一个build文件夹,只要它检测到一个C文件,如果这个build文件不存在的话。在谷歌搜索之后,我尝试了以下方法: BufNewFile,BufRead *.cpp \ if empty(glob('build')) | \ call mkdir(

我最近发现了维姆并爱上了它。我主要在Python和C++中编码。Python部分已经完成(虽然建议会受到欢迎):但是我在C++方面遇到了麻烦。 我看到vim可以运行Make命令,并带有适当的参数。所以我希望Vim在当前项目文件夹中创建一个build文件夹,只要它检测到一个C文件,如果这个build文件不存在的话。在谷歌搜索之后,我尝试了以下方法:

 BufNewFile,BufRead *.cpp
    \ if empty(glob('build')) |
    \ call mkdir("build", "p") |
    \ endif

但它似乎不起作用或抛出任何错误。任何帮助都将不胜感激。我是Vim的新手,请原谅我犯的愚蠢错误。

你可以这样做:

function! MkBuild(fname) abort            
    let root = finddir('.git', escape(fnamemodify(a:fname, ':p:h'), ' ') . ';')
    if root !=# '                         
        let build = fnamemodify(root, ':p:h') . (!exists('+shellslash') || &shellslash) ? '/' : '\') . 'build'              
        if !isdirectory(build)            
            call mkdir(build)             
        endif                             
    endif                                 
endfunction

autocmd BufNewFile,BufRead *.cpp call MkBuild(expand('<amatch>'))

你可以这样做:

function! MkBuild(fname) abort            
    let root = finddir('.git', escape(fnamemodify(a:fname, ':p:h'), ' ') . ';')
    if root !=# '                         
        let build = fnamemodify(root, ':p:h') . (!exists('+shellslash') || &shellslash) ? '/' : '\') . 'build'              
        if !isdirectory(build)            
            call mkdir(build)             
        endif                             
    endif                                 
endfunction

autocmd BufNewFile,BufRead *.cpp call MkBuild(expand('<amatch>'))

这是为
make
而不是为
vim
做的工作。您能详细介绍一下如何做吗?理想情况下,我也会这样做,制作一个类似于构建和运行IDE的快捷方式的快捷方式,比如VIsual StudioStudio@romainl,当我们在源目录外构建时,makefile可能还不存在(就像CMake一样)。在这种情况下,我们不能依靠SUBE来创建丢失的构建目录。@ PARTADAS,为什么不用它来创建它而不是使用自动命令?@ LucHermitte,对不起,我没有C++和CMake的经验。这是一个工作,用于<代码>制作< /COD>,而不是<代码> VIM<代码>。请您详细说明如何做?理想情况下,我也会这样做,制作一个类似于构建和运行IDE的快捷方式的快捷方式,比如VIsual StudioStudio@romainl,当我们在源目录外构建时,makefile可能还不存在(就像CMake一样)。在这种情况下,我们不能依靠SUBE来创建缺少的构建目录。@ PARTADAS,为什么不在自动创建它而不是使用自动命令?@ LucHermitte,对不起,我没有C++和CMake的经验。我尝试过,但它表示FNAMMODIFY行的无效表达式。(另外,我认为对root的检查应该是if!=''我确信这只是一个无意的打字错误。这样以后的任何人都不会发表关于它的文章。)好的,我关掉了那行,我想,既然目录需要建立在进行检查的同一路径上,尝试获取绝对路径是多余的。现在它工作了!谢谢@ParthaDas表示表达式无效-如果没有确切的错误消息,很难说为什么。另外,我认为root的检查应该是如果!='''-不,
=#是预期的<代码>=#
是区分大小写的比较,而
=取决于
ignorecase
。第一个稍微快一点。我试过了,但它说fnamemodify行的表达式无效。(另外,我认为对root的检查应该是if!=''我确信这只是一个无意的打字错误。这样以后的任何人都不会发表关于它的文章。)好的,我关掉了那行,我想,既然目录需要建立在进行检查的同一路径上,尝试获取绝对路径是多余的。现在它工作了!谢谢@ParthaDas表示表达式无效-如果没有确切的错误消息,很难说为什么。另外,我认为root的检查应该是如果!='''-不,
=#是预期的<代码>=#
是区分大小写的比较,而
=取决于
ignorecase
。第一个稍微快一点。