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