我想要一个简单的解决方案,在vim脚本的路径下获取目录名称。
以下是我尝试过的方法:代码。 https://gist.github.com/4307744 功能在L84行。
我将此函数用作input()的完整函数。 因此,此函数需要返回路径下的目录名列表。 e.g。
to/path/
- a/
- b/
我想获得a
和b
。
我试图用:help functions
找到vim内部函数。只找到globpath()
,但它会返回完整路径。
那么有人有一个简单的解决方案吗? (顺便说一句,为什么在Vim的路径下获取目录名很难?)
答案 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