sta*_*ner 2 directory vim function path complete
我想要一个简单的解决方案来获取vim脚本中路径下的目录名称.
这是我尝试过的方法:代码.https://gist.github.com/4307744 功能位于L84行.
我使用此函数作为input()的完整函数.因此,此函数需要返回路径下的目录名列表.例如
to/path/
- a/
- b/
Run Code Online (Sandbox Code Playgroud)
我想得到a
和b
.
我试图找到vim内部函数:help functions
.只有找到了globpath()
,但它会返回完整路径.
那么有人有一个简单的解决方案吗?(顺便说一句,为什么在Vim的路径下获取目录名很难?)
我不知道它是否是故意的,但是glob()
如果模式结束时,只将目录限制为具有路径的目录/
:
let directories=glob(fnameescape(top_directory).'/{,.}*/', 1, 1)
call map(directories, 'fnamemodify(v:val, ":h:t")')
Run Code Online (Sandbox Code Playgroud)
.一些解释:
fnameescape()
转义top_directory(它应该to/path
在示例中设置),以防止它中的特殊字符被自己展开(我以前曾经有过目录命名*.*
).{,.}
是必要的,因为在unix上vim不会列出默认以dot开头的文件.请注意,通常.*
模式匹配特殊.
和..
目录,然后删除,但由于某些原因{,.}*
不匹配它们., 1, 1
make glob()
ignore 'suffixes'
和'wildignore'
options(第一个)并返回一个列表(第二个,需要最近的vim).:h:t
只返回父目录名,但glob()
输出路径to/path/a/
,:h
因此只删除尾部斜杠.:t
strip目录路径(返回尾随路径组件).没有:h
剥离斜杠尾随路径组件将是空字符串.您可以将所有内容合并为一行:
let directories=map(glob(fnameescape(top_directory).'/{,.}*/', 1, 1), 'fnamemodify(v:val, ":h:t")')
Run Code Online (Sandbox Code Playgroud)