Vimの'path'オプションは、コマンドが好きなディレクトリを指定することができますgfし、:findファイルを検索します。
この機能を特定のファイルセットに対してのみトリガーする場合は、autocmdを使用して、:editコマンドを'path'ディレクトリの1つにあるファイルに自動的に「リダイレクト」できます。
set path+=~/
function! FindInPath(name)
    let found = findfile(a:name)
    if !empty(found)
        exe 'silent keepalt file '. fnameescape(found)
        edit
    endif
endfunction
autocmd BufNewFile .vimrc,.zshrc nested call FindInPath(expand('<afile>'))
これは、BufNewFileautocmdをのトリガーとして使用しfile not found, so try to find it somewhere elseます。そのような状況が検出されたら、を使用findfile()して、'path'ディレクトリ内のファイルを見つけようとします。見つかった場合は、現在のバッファの名前をそのファイルに変更し、バッファを再編集します。そうでない場合は、新しいバッファの使用を続けます。
nestedautocmdsが正常に巣をしないので、修飾子は、ここで必要とされます。この場合、:editコマンドがファイルを開いたときに典型的なautocmdsがトリガーされるようにします。
これにより、ファイルを手動で編集するだけの場合と比較して、追加のバッファーが作成されることに注意してください。BufNewFile実行されるまでに、最初に指定されたファイル名のバッファがすでに作成されています。を使用:fileしてバッファの名前を変更すると、元の名前でアンロードされた新しいバッファが作成されます。
で常に検索する'path'場合は、*特定のファイルを指定するのではなく、ファイルパターンを使用するようにautocmdを変更できます。
ここにあなたの要件によりよく一致するはずの更新されたバージョンがあります。:findの結果に基づいてバッファ名を設定する代わりに、ファイルを直接開くために使用しますfindfile()。
function! FindInPath(name)
    let path=&path
    " Add any extra directories to the normal search path
    set path+=~,~/.vim,/etc
    " If :find finds a file, then wipeout the buffer that was created for the "new" file
    setlocal bufhidden=wipe
    exe 'silent! keepalt find '. fnameescape(a:name)
    " Restore 'path' and 'bufhidden' to their normal values
    let &path=path
    set bufhidden<
endfunction
autocmd BufNewFile * nested call FindInPath(expand('<afile>'))
これにより、:file-namedバッファーを保存しようとするとVimが文句を言う以前の関数の問題が解決されます。
               
              
keepalt fileに割り当てるのと同じ欠点がありvim.current.buffer.nameます-変更を保存しようとすると、vimはファイルがすでに存在することを警告します。