意図的かどうかはわかりませんが、glob()ディレクトリを、パターンが で終わるパスを持つディレクトリのみに制限します/。
let directories=glob(fnameescape(top_directory).'/{,.}*/', 1, 1)
call map(directories, 'fnamemodify(v:val, ":h:t")')
. いくつかの説明:
fnameescape()top_directory をエスケープし (to/pathこの例では に設定する必要があります)、その中の特殊文字が独自に展開されるのを防ぎます (以前は という名前のディレクトリがありました*.*)。
{,.}UNIX では、vim はデフォルトでドットで始まるファイルをリストしないため、これが必要です。通常、.*pattern は special.および..directory に一致し、その後削除されますが、何らかの理由{,.}*で一致しないことに注意してください。
, 1, 1glob()無視'suffixes'してオプションを作成'wildignore'し(最初)、リストを返します(2番目、最新のvimが必要です)。
- 最後の (2 番目の) 行は、要求どおりにディレクトリ名のみを保持するためのものです。通常
:h:tは親ディレクトリ名のみを返しますが、次のglob()ようなパスを出力するため、末尾のスラッシュのみを削除します。ディレクトリ パスを取り除きます (末尾のパス コンポーネントを返します)。末尾のパス コンポーネントのスラッシュを削除しないと、空の文字列になります。to/path/a/:h:t:h
すべてを 1 行に結合できます。
let directories=map(glob(fnameescape(top_directory).'/{,.}*/', 1, 1), 'fnamemodify(v:val, ":h:t")')