2009-10-10 136 views
21

我不喜欢杂波了我的备份文件夹如何vim的,所以我在我的.vimrc文件下面一行:如何从.vimrc创建一个文件夹(如果它不存在)?

set backupdir=~/.vim_backup 

但是,有时此文件夹不因为新机,其中存在我正在复制我的用户文件。

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

回答

25

你可以把这个到您的.vimrc:

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

这将尝试创建您启动Vim的〜/ .vim_backup各一次。如果它已经存在,mkdir会发出一个错误信息,但你永远不会看到它。

+9

+1:很好的答案。假设Linux,你也可以执行'!mkdir -p〜/ .vim_backup',因为'-p'选项会停止mkdir首先报告错误(并且如果需要的话还可以创建父目录)。 – DrAl 2009-10-11 15:18:42

+10

你为什么要做'!mkdir'?内置的vim函数'mkdir()'用于相同的目的并且更加便携。更多的是,你的代码没有围绕“if”正在做一个不必要的shell调用,这会降低启动速度。 – ZyX 2011-12-11 07:38:32

+0

@ZyX是的,所以问题是:你如何检测文件夹是否存在?我知道filereadable(),是否有相当于文件夹? – 2012-05-19 12:50:41

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\"") 

丑但可行。

+0

看@ xer0x答案,你可以检查目录存在,然后只是调用系统,使您的解决方案丑陋,但在窗口主机上尽可能实用 – 2012-05-19 15:26:14

8

我更喜欢已经发布的单行内容。不过,我想我会分享什么,我一直在使用:

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

如果'mkdir'引发错误,则“创建”消息可能为false – 2016-09-27 08:17:19

0

我在vimrc一个命令,使我能够做出相应的目录缓存目前最前面:

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

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

+1

嗨。不是'命名一样',这对我来说并不合适,所以什么? – 2012-05-21 12:04:30

59

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

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

但在这种情况下,您必须使用$ HOME而不是〜 'silent!mkdir〜/ .vim_backup>/dev/null 2 >&1' 将变成 '沉默呼叫mkdir($ HOME。'/。vim_backup','p')' – m42e 2014-06-06 08:53:36

+0

...为什么这不是被接受的答案? – 2017-11-03 03:48:06

+0

...因为只有@fragsworth可以指定答案为“已接受”。但是,我们随着他们的社群投票选出我们接受的答案。 – 2017-12-06 16:41:20

1

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

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

只是好奇......我试过这个解决方案,但'〜/ .vim/somepath /'不能正常工作,因为它的工作方式是完整路径而不是'〜'。无论如何,一旦我明白,它就是一种魅力。 – 2017-07-08 07:38:14

相关问题