Bagaimana cara memasukkan semua file konfigurasi Vim dalam beberapa folder?

2

Saya ingin mengatur ulang vim direktori menjadi seperti ini:

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

di $HOME/.vimrc:

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

Pertanyaan saya adalah, bagaimana cara memasukkan semua file konfigurasi Vim ke dalam global, plugins, functions map?

Saya menemukan fungsi seperti ini:

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

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

call sourceConfig()

Tapi saya ingin sesuai dengan folder pemuatan yang ditentukan, bagaimana memodifikasi func, membuat globpath ubah menjadi array atau sesuatu, seperti di bawah ini.

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()

Gunakan sebelum / plugin dan setelah / plugin?

Sam
sumber

Jawaban:

4

Sebagai globpath() mengambil daftar direktori yang dipisahkan koma, Anda dapat membangun lokasi seperti ini (saya melakukan ini dengan cara primitif dengan duplikasi, karena Anda tampaknya tidak terlalu berpengalaman dalam Vimscript):

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

Kemudian, daftar ini dapat diteruskan untuk menghasilkan daftar file skrip, yang kemudian dapat bersumber (perhatikan bahwa sintaks Anda salah, dan disarankan untuk melakukan pelarian yang benar):

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

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

Kritik pendekatan

Anda tidak menyebutkan motivasi untuk reorganisasi itu, tetapi saya akan menyebutkannya merekomendasikan untuk tetap berpegang pada tata letak konfigurasi default , baik "all under .vim" atau "direktori bundel terpisah per plugin".

Misalnya, pendekatan Anda yang tercantum tidak menangani ftplugins atau pengisian otomatis , yang saya yakin beberapa plugin Anda telah / akan memilikinya.

Ingo Karkat
sumber