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

时间:2009-10-10 22:30:29

标签: vim

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

set backupdir=~/.vim_backup

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

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

8 个答案:

答案 0 :(得分:82)

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

if !isdirectory("/my/directory")
    call mkdir("/my/directory", "p")
endif

答案 1 :(得分:25)

您可以将其放入.vimrc:

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

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

答案 2 :(得分: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')

答案 3 :(得分:5)

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

if !isdirectory($HOME . "/.vim/backup")
    call mkdir($HOME . "/.vim/backup", "p", 0700)
endif

答案 4 :(得分:1)

我想要一个适用于Linux和Windows的解决方案(在路径上使用Cygwin二进制文件。) - 我的Vim配置在两者之间共享。

一个问题是,我认为'mkdir'内置于Windows上的cmd shell,因此无法通过在路径中先前放置Cygwin mkdir可执行文件来覆盖它。

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

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

然而,这有问题。至少在Windows上,它会为cmd shell弹出一个新窗口'!'调用。我不想每次都开始使用vim。然后我发现了vim函数'system',它调用了一个新的cmd shell(该图标出现在Windows任务栏中)但是窗口被最小化了。因此:

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

丑陋但有效。

答案 5 :(得分:1)

我的vimrc中有一个命令,可以让我创建一个与当前缓冲区对应的目录:

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

如果您有权这样做,可以通过netrw在本地或远程放置任何地方创建目录。

答案 6 :(得分:0)

这是Vim内置的,因此您只需:

call mkdir($HOME . "/tmp")

您还可以指定p标志,以使命令以与mkdir -p相同的方式操作:

call mkdir($HOME . "/tmp", "p")

有关详细信息,请参见:help mkdirthe vim manual online

答案 7 :(得分:0)

这是我目前在.vimrc文件中使用的文件,我认为它看起来非常干净和简单:

if empty(glob($HOME . '/.vim/undodir'))
  call mkdir($HOME . '/.vim/undodir', 'p')
endif