根据Vim中的文件类型创建文件夹

Create folders based on filetypes in Vim

本文关键字:类型 创建 文件夹 文件 Vim 根据      更新时间:2023-10-16

我最近发现了Vim并爱上了它。我主要用Python和C++编写代码。python部分已经完成(尽管建议是受欢迎的:),但我在C++方面遇到了问题。我看到vim可以运行Make命令,也可以使用适当的参数。因此,我希望Vim在当前项目文件夹中创建一个构建文件夹,无论何时检测到C文件,如果构建文件不存在。经过一些谷歌搜索,我尝试了这个:

 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>'))

这段代码试图通过向上查找名为.git的目录来确定项目的根目录,如果它发现它在项目的根中创建了一个目录build

当然,您可以用其他东西代替.git的测试。F.i.向上查找名为CMakeLists.txt:的文件

let root = findfile('CMakeLists.txt', escape(fnamemodify(a:fname, ':p:h'), ' ') . ';')