2009-10-10 33 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

相關問題