我不喜歡雜波了我的備份文件夾如何vim的,所以我在我的.vimrc文件下面一行:如何從.vimrc創建一個文件夾(如果它不存在)?
set backupdir=~/.vim_backup
但是,有時此文件夾不因爲新機,其中存在我正在複製我的用戶文件。
如何從.vimrc中自動創建該文件夾(如果它不存在)?還是有更好的方法來處理這種情況?
我不喜歡雜波了我的備份文件夾如何vim的,所以我在我的.vimrc文件下面一行:如何從.vimrc創建一個文件夾(如果它不存在)?
set backupdir=~/.vim_backup
但是,有時此文件夾不因爲新機,其中存在我正在複製我的用戶文件。
如何從.vimrc中自動創建該文件夾(如果它不存在)?還是有更好的方法來處理這種情況?
你可以把這個到您的.vimrc:
silent !mkdir ~/.vim_backup > /dev/null 2>&1
這將嘗試創建您啓動Vim的〜/ .vim_backup各一次。如果它已經存在,mkdir會發出一個錯誤信息,但你永遠不會看到它。
我想要一個適用於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\"")
醜但可行。
看@ xer0x答案,你可以檢查目錄存在,然後只是調用系統,使您的解決方案醜陋,但在窗口主機上儘可能實用 – 2012-05-19 15:26:14
我更喜歡已經發布的單行內容。不過,我想我會分享什麼,我一直在使用:
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')
如果'mkdir'引發錯誤,則「創建」消息可能爲false – 2016-09-27 08:17:19
我在vimrc一個命令,使我能夠做出相應的目錄緩存目前最前面:
nmap <silent> ,md :!mkdir -p %:p:h<CR>
如果您有權限,可以通過netrw在本地或遠程放置任何地方創建目錄。
嗨。不是'命名一樣',這對我來說並不合適,所以什麼? – 2012-05-21 12:04:30
我認爲這是獨立於操作系統:
if !isdirectory("/my/directory")
call mkdir("/my/directory", "p")
endif
但在這種情況下,您必須使用$ HOME而不是〜 'silent!mkdir〜/ .vim_backup>/dev/null 2 >&1' 將變成 '沉默呼叫mkdir($ HOME。'/。vim_backup','p')' – m42e 2014-06-06 08:53:36
...爲什麼這不是被接受的答案? – 2017-11-03 03:48:06
...因爲只有@fragsworth可以指定答案爲「已接受」。但是,我們隨着他們的社羣投票選出我們接受的答案。 – 2017-12-06 16:41:20
您可以使用mkdir()
Vim的功能。它可以創建中間目錄並在目錄上設置適當的權限:
if !isdirectory($HOME . "/.vim/backup")
call mkdir($HOME . "/.vim/backup", "p", 0700)
endif
只是好奇......我試過這個解決方案,但'〜/ .vim/somepath /'不能正常工作,因爲它的工作方式是完整路徑而不是'〜'。無論如何,一旦我明白,它就是一種魅力。 – 2017-07-08 07:38:14
+1:很好的答案。假設Linux,你也可以執行'!mkdir -p〜/ .vim_backup',因爲'-p'選項會停止mkdir首先報告錯誤(並且如果需要的話還可以創建父目錄)。 – DrAl 2009-10-11 15:18:42
你爲什麼要做'!mkdir'?內置的vim函數'mkdir()'用於相同的目的並且更加便攜。更多的是,你的代碼沒有圍繞「if」正在做一個不必要的shell調用,這會降低啓動速度。 – ZyX 2011-12-11 07:38:32
@ZyX是的,所以問題是:你如何檢測文件夾是否存在?我知道filereadable(),是否有相當於文件夾? – 2012-05-19 12:50:41