意図的かどうかはわかりませんが、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, 1
glob()
無視'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")')