我不知道这是否是故意的,但glob()
将目录限制为仅路径以模式结尾的目录/
:
let directories=glob(fnameescape(top_directory).'/{,.}*/', 1, 1)
call map(directories, 'fnamemodify(v:val, ":h:t")')
. 一些解释:
fnameescape()
转义 top_directory (它应该to/path
在示例中设置为)以防止其中的特殊字符自行扩展(我曾经有一个名为 的目录*.*
)。
{,.}
是必要的,因为在 unix vim 默认情况下不会列出以点开头的文件。请注意,通常.*
模式匹配特殊.
和..
目录,然后将其删除,但由于某种原因{,.}*
不匹配它们。
, 1, 1
glob()
忽略'suffixes'
和选项(第一个)并'wildignore'
返回一个列表(第二个,需要最新的 vim)。
- 最后(第二)行用于仅保留您要求的目录名称。通常
:h:t
只会返回父目录名称,但会glob()
输出类似的路径to/path/a/
,:h
因此只删除尾部斜杠。:t
剥离目录路径(返回尾随路径组件)。如果不:h
剥离斜杠尾随路径组件将是空字符串。
您可以将所有内容合并为一行:
let directories=map(glob(fnameescape(top_directory).'/{,.}*/', 1, 1), 'fnamemodify(v:val, ":h:t")')