代码之家  ›  专栏  ›  技术社区  ›  Fragsworth

如果文件夹不存在,如何从.vimrc创建文件夹?

vim
  •  25
  • Fragsworth  · 技术社区  · 16 年前

    我不喜欢vim将我的文件夹与备份文件混在一起,所以在我的.vimrc文件中有以下行:

    set backupdir=~/.vim_backup
    

    但是,有时这个文件夹不存在,因为我在新机器上复制我的用户文件。

    如果这个文件夹不存在,我如何从.vimrc中自动创建它?还是有更好的方法来处理这种情况?

    6 回复  |  直到 9 年前
        1
  •  26
  •   ABentSpoon Ungue    16 年前

    你可以把它放到你的.vimrc中:

    silent !mkdir ~/.vim_backup > /dev/null 2>&1
    

    这将尝试在每次启动vim时创建~/.vim_备份。如果它已经存在,mkdir将发出一个错误信号,但您永远不会看到它。

        2
  •  78
  •   Chronial    13 年前

    我认为这是独立于操作系统的:

    if !isdirectory("/my/directory")
        call mkdir("/my/directory", "p")
    endif
    
        3
  •  9
  •   xer0x    14 年前

    我更喜欢已经贴好的一行。但是,我想我会分享我一直在使用的内容:

    function! EnsureDirExists (dir)
      if !isdirectory(a:dir)
        if exists("*mkdir")
          call mkdir(a:dir,'p')
          echo "Created directory: " . a:dir
        else
          echo "Please create directory: " . a:dir
        endif
      endif
    endfunction
    
    call EnsureDirExists($HOME . '/.vim_backup')
    
        4
  •  4
  •   Eugene Yarmash    9 年前

    你可以用 mkdir() VIM功能。它还可以创建中间目录并在目录上设置适当的权限:

    if !isdirectory($HOME . "/.vim/backup")
        call mkdir($HOME . "/.vim/backup", "p", 0700)
    endif
    
        5
  •  1
  •   Jonathan Hartley    16 年前

    我想要一个在Linux和Windows上都能工作的解决方案(路径上有cygwin二进制文件)——我的vim配置在两者之间共享。

    一个问题是,我认为“mkdir”内置于Windows上的cmd shell中,因此不能通过将cygwin mkdir可执行文件放在路径的前面来覆盖它。

    我通过调用一个新的bash shell来执行这个操作来解决这个问题:从这里,“mkdir”总是意味着路径上的任何mkdir可执行文件:

    !bash -c "mkdir -p ~/.vim-tmp"
    

    然而,这有一个问题。至少在Windows上,它会为命令shell弹出一个新窗口,显示“!”调用。不要每次我一开始就那样。然后我发现了vim函数“system”,它调用一个新的cmd shell(图标出现在Windows任务栏中),但窗口被最小化。因此:

    call system("bash -c \"mkdir -p ~/.vim-tmp\"")
    

    丑陋但工作。

        6
  •  1
  •   phildobbin    14 年前

    我有一个命令在我的 vimrc 这使我能够创建一个与当前最前面的缓冲区对应的目录:

    nmap <silent> ,md :!mkdir -p %:p:h<CR>

    如果您有权限,可以通过netrw在本地或远程创建目录。