2016-11-05 1 views
2

どのようにしてVimが探しているディレクトリを取得できますか? vimrcプラットフォームを独立して設定したいので、明示的なディレクトリを置いてはいけません。 Linuxの場合vimは~/.vimに、Windowsでは~\vimfilesになります。私のファイルをそこに置くために、使用されているディレクトリをどのように入手できますか?vimrcファイルのためのVimディレクトリを取得する

+2

答えは、あなたが予想しているよりも複雑です。関連するディレクトリがいくつかあり、そのうちのいくつかはハードコーディングされています。詳細は ':h起動 'を参照してください。 'vim --version'の出力も参照してください。 –

+0

'.vimrc'にはどこにvimフォルダが必要ですか?私はちょうど '.vimrc'をチェックしました。私が使っている唯一の場所は、一時ファイルです。あなたはユースケースが何であるか少し詳しく説明できますか? – pfnuesel

+0

最初は一時ファイルです。 '.vim'のサブディレクトリに' undo'と 'backup'ファイルを保存します。他のものは私のプラグインです。私は 'vim-plug'を使い、フォルダを指定する必要があります。 GitHubに '.vim'フォルダを置き、それをGitをインストールしていないシステムにも同期させることができます。 – DerWeh

答えて

1

これは私が必要とする情報ではないとは言えません。 LH-VIM-libに

、私は(lh#path#vimfiles()で)この道を進む::let regex = substitute($HOME, '[/\\]', '[/\\\\]', 'g')

  • まず私は$ HOME(つまり私は[/\\]にすべてのスラッシュとbackslahesを置き換える)から正規表現を構築します。
  • 次に、私は可能なディレクトリを追加します: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

あなたも、VimはWindows上で同じ~/.vim/を使用するために、デフォルト'runtimepath'を上書きすることができます。これをあなたの中に入れてください~/.vimrc

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