我不喜欢vim如何使我的文件夹与备份文件混乱,所以我的.vimrc文件中有以下行:
set backupdir=~/.vim_backup
但是,有时这个文件夹不存在,因为我正在复制我的用户文件的新机器。
如何从.vimrc中自动创建此文件夹(如果不存在)?或者有更好的方法来处理这种情况吗?
答案 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 mkdir
或the vim manual online。
答案 7 :(得分:0)
这是我目前在.vimrc文件中使用的文件,我认为它看起来非常干净和简单:
if empty(glob($HOME . '/.vim/undodir'))
call mkdir($HOME . '/.vim/undodir', 'p')
endif