2016-11-05 131 views
2

如何獲取目錄Vim正在「查看」?我想建立我的vimrc平臺獨立,所以我不想把明確的目錄。在Linux上,例如vim調查~/.vim和Windows的~\vimfiles。我怎樣才能得到使用的目錄,把我的文件放在那裏?獲取vim目錄下的vimrc文件

+2

答案比您預期的要複雜得多。有幾個相關的目錄,其中一些是硬編碼的。有關詳細信息,請參閱':h startup'。另請參閱'vim --version'的輸出。 –

+0

你在哪裏需要'.vimrc'中的vim文件夾?我剛剛檢查過我的'.vimrc',並且唯一使用它的地方是臨時文件。你能詳細說一下這個用例是什麼嗎? – pfnuesel

+0

首先是臨時文件。我在'.vim'的子目錄中保存'undo'和'backup'文件。其他的東西是我的插件。我使用'vim-plug'並需要指定文件夾。 我想把這個全部保存在一個文件夾中,我可以將我的'.vim'文件夾放在GitHub上並同步到沒有安裝Git的系統。 – DerWeh

回答

1

我不能說這是一個我們從不需要的信息,因爲我有一個用途。

在LH-VIM-lib下,我繼續這樣(在lh#path#vimfiles()):

  • 我首先從建立$ HOME正則表達式(即我全部更換斜線和backslahes到[/\\])::let regex = substitute($HOME, '[/\\]', '[/\\\\]', 'g')
  • 然後我追加可能的目錄:let regex .= '\(vimfiles\|.vim\)'
  • 最後,我搜索我的正則表達式到& rtp。最短的結果是好的。 :let paths = filter(split(&rtp, ','), 'match(v:val, regex) != -1') + :return paths[lh#list#arg_min(paths, function('len'))]

注:真正的代碼是多一點點複雜,通用和彈性(/耐?)錯誤。

PS:因爲cygwin,僅僅測試has('win32')是不夠的。

編輯:我被要求提供lh#list#arg_min()的定義。它可以在lh-vim-lib中找到。它的定義很簡單,有點繁瑣(IMO)

function! lh#list#arg_min(list, ...) abort 
    if empty(a:list) | return -1 | endif 
    let Transfo = a:0 > 0 ? a:1 : function(s:getSNR(id)) 
    let m = Transfo(a:list[0]) 
    let p = 0 
    let i = 1 
    while i != len(a:list) 
    let e = a:list[i] 
    let v = Transfo(e) 
    if v < m 
     let m = v 
     let p = i 
    endif 
    let i += 1 
    endwhile 
    return p 
endfunction 
+0

'&rtp'後面有一個括號(我不能編輯它,顯然我不得不改變更多的字符)。你也可以給出'lh#list#arg_min'的定義,我找不到它。 – DerWeh

+0

的確謝謝。我做了更正。關於'arg_min',它並不那麼複雜,但仍然有點麻煩。它的定義可以在這裏找到:https://github.com/LucHermitte/lh-vim-lib/blob/master/autoload/lh/list.vim#L430 –

0

您可以覆蓋默認'runtimepath'使Vim在Windows上使用相同的~/.vim/了。只需將其放入您的~/.vimrc

if has('win32') || has('win64') 
    let &runtimepath = substitute(&runtimepath, '\C\V' . escape($HOME.'/vimfiles', '\'), escape($HOME.'/.vim', '\&'), 'g') 
endif