2

我想要一个简单的解决方案来获取 vim 脚本路径下的目录名称。

这是我尝试过的方法:代码。https://gist.github.com/4307744 函数在 L84 行。

我将此函数用作 input() 的完整函数。所以这个函数需要返回一个路径下的目录名列表。例如

to/path/
        - a/
        - b/

我想得到ab

我试图用:help functions. only found globpath(),但它会返回完整路径。

那么有没有人有一个简单的解决方案?(顺便说一句,为什么很难在 Vim 的路径下获取目录名称??)

4

1 回答 1

10

我不知道这是否是故意的,但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, 1glob()忽略'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")')
于 2012-12-17T04:30:03.217 回答