如何从.vimrc创建一个文件夹(如果它不存在)?

Fra*_*rth 28 vim

我不喜欢vim如何使我的文件夹与备份文件混乱,所以我的.vimrc文件中有以下行:

set backupdir=~/.vim_backup
Run Code Online (Sandbox Code Playgroud)

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

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

jdg*_*jdg 86

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

if !isdirectory("/my/directory")
    call mkdir("/my/directory", "p")
endif
Run Code Online (Sandbox Code Playgroud)

  • 但在这种情况下你必须使用$ HOME而不是〜`silent!mkdir~/.vim_backup>/dev/null 2>&1`将变成`沉默调用mkdir($ HOME.'/.vim_backup','p') ` (14认同)

ABe*_*oon 27

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

silent !mkdir ~/.vim_backup > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

每次启动vim时都会尝试创建〜/ .vim_backup.如果它已经存在,mkdir将发出错误信号,但你永远不会看到它.

  • 你为什么要做`!mkdir`?有内置的vim函数`mkdir()`,它具有相同的用途,更便携.更多的是,你的代码没有包含`if`正在做一个不必要的shell调用,这会减慢启动速度. (11认同)
  • +1:很好的答案.假设Linux,您还可以执行`!mkdir -p~/.vim_backup`,因为`-p`选项将阻止mkdir首先报告错误(以及在需要时创建父目录). (9认同)

xer*_*r0x 9

我更喜欢已发布的单行.但是,我想我会分享我一直在使用的东西:

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')
Run Code Online (Sandbox Code Playgroud)


Eug*_*ash 7

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

if !isdirectory($HOME . "/.vim/backup")
    call mkdir($HOME . "/.vim/backup", "p", 0700)
endif
Run Code Online (Sandbox Code Playgroud)