如何在Vim脚本中的路径下获取目录名称?

时间:2012-12-16 14:24:39

标签: function vim path directory complete

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

以下是我尝试过的方法:代码。 https://gist.github.com/4307744 功能在L84行。

我将此函数用作input()的完整函数。 因此,此函数需要返回路径下的目录名列表。 e.g。

to/path/
        - a/
        - b/

我想获得ab

我试图用:help functions找到vim内部函数。只找到globpath(),但它会返回完整路径。

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

1 个答案:

答案 0 :(得分:8)

我不知道它是否是故意的,但是glob()仅将目录限制为具有路径的目录,如果模式以/结尾:

let directories=glob(fnameescape(top_directory).'/{,.}*/', 1, 1)
call map(directories, 'fnamemodify(v:val, ":h:t")')

。一些解释:

  • fnameescape()转义top_directory(在示例中应将其设置为to/path),以防止其中的特殊字符被自己展开(我以前曾经有一个名为{{1的目录) }})。
  • *.*是必要的,因为在unix上vim不会列出默认以dot开头的文件。请注意,通常{,.}模式会匹配随后删除的特殊.*.目录,但由于某些原因..与它们不匹配。
  • {,.}*, 1, 1忽略glob()'suffixes'选项(第一个)并返回一个列表(第二个,需要最近的vim)。
  • 最后(第二)行仅用于保留您请求的目录名称。通常'wildignore'只返回父目录名,但:h:t输出glob()to/path/a/之类的路径,因此只删除尾部斜杠。 :h剥离目录路径(返回尾随路径组件)。如果没有:t剥离斜杠,则尾随路径组件将为空字符串。

您可以将所有内容合并为一行:

:h