web-dev-qa-db-ja.com

すべてのVim設定ファイルをいくつかのフォルダに含めるにはどうすればよいですか?

vimディレクトリを次のように再編成したいと思います。

- dotfiles
  |- vim
  |  |- config
  |  |  |- global
  |  |  |  |- basic.vim
  |  |  |  |...
  |  |  |- plugins
  |  |  |  |- ctrl-p.vim
  |  |  |  |...
  |  |  |- functions
  |  |  |  |...
  |  |  |...
  |  |- bootstrap.vimrc

$HOME/.vimrc

if isdirectory(expand('$HOME/dotfiles/vim'))
  source $HOME/dotfiles/vim/bootstrap.vimrc
endif

私の質問は、すべてのVim設定ファイルをglobalpluginsfunctionsフォルダーに含める方法です。

私はこのような関数を見つけます:

function! SourceConfig()
  let file_list = split(globpath('$HOME/dotfiles/vim/', '.vim'), '\n')

  for file in file_list
    execute('source '.file)
  endfor
endfunction

call sourceConfig()

しかし、指定されたロードフォルダーに従って、funcを変更する方法、globpatharrayなどに変更したいと思います。

let $path=[global, plugins, functions] // this will be source files in turn.

function! SourceConfig()
  let file_list = split(globpath($path, '.vim'), '\n')

  for file in file_list
    execute('source '.file)
  endfor
endfunction

call sourceConfig()

Before/pluginとafter/pluginを使用しますか?

2
Sam

globpath()はディレクトリのコンマ区切りのリストを取得するため、次のように場所を作成できます(Vimscriptにあまり精通していないように見えるため、これは複製を使用して原始的な方法で行っています)。

function! sourceConfig()
  let path = $HOME  . '/dotfiles/vim/config/global'
  let path .= ',' . $HOME  . '/dotfiles/vim/config/plugins'
  let path .= ',' . $HOME  . '/dotfiles/vim/config/functions'

次に、このリストを渡してスクリプトファイルのリストを生成し、それをソースにすることができます(構文が間違っていたため、適切にエスケープすることをお勧めします)。

  let file_list = split(globpath(path, '*.vim'), '\n')

  for file in file_list
    execute 'source' fnameescape(file)
  endfor
endfunction

アプローチの批評

その再編成の動機については言及していませんが、私はデフォルトの構成レイアウトに固執することをお勧めします、「すべて.vimの下」または「プラグインごとの個別のバンドルディレクトリ」のいずれかです。

たとえば、リストされているアプローチはftpluginsまたはautoloadを処理しません。あなたのプラグインのいくつかは持っている/持っていると確信しています。

4
Ingo Karkat