【问题标题】:how to get directory names under a path in Vim script?如何在 Vim 脚本的路径下获取目录名称?
【发布时间】:2012-12-03 20:12:47
【问题描述】:

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

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

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

to/path/
        - a/
        - b/

我想得到ab

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

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

【问题讨论】:

  • 你想用这些名字做什么?你总是可以做一个替代来修剪那些完整的路径。
  • @romainl 不要为路径操作使用substitute(),很难同时做到正确、简单和便携。这个有fnamemodify()

标签: function vim directory path


【解决方案1】:

我不知道这是否是故意的,但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 make 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")')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2012-02-10
    • 2019-10-14
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多