首页 > 解决方案 > 以 JSON 格式列出给定文件夹的文件

问题描述

使用 Vim。假设我有一个包含很多文件的文件夹,我需要以某种方式列出它们......

choere_01.mp3 choere_02.mp3 choere_03.mp3 choere_04.mp3 choere_05.mp3 choere_06.mp3 choere_07.mp3 choere_08.mp3 choere_09.mp3 choere_10.mp3 choere_11.mp3 choere_12.mp3 ...

生成 JSON 文件最方便的方法是什么,例如:

 {
   "audio":[
     {"file":"choere_01.mp3"},
     {"file":"choere_02.mp3"},
     {"file":"choere_03.mp3"},
     {"file":"choere_04.mp3"},
     {"file":"choere_05.mp3"},
     {"file":"choere_06.mp3"},
     {"file":"choere_07.mp3"},
     {"file":"choere_08.mp3"},
     {"file":"choere_09.mp3"},
     {"file":"choere_10.mp3"},
     {"file":"choere_11.mp3"},
     {"file":"choere_12.mp3"},
     ...
    ]
  }

我已经使用 Vim 8 个月了,并且认为自己是新手。此任务在其他编辑器中很快完成。什么是神奇的 vim 方式?任何帮助表示赞赏!

标签: vim

解决方案


好吧,不知道为什么要在 Vim 中执行此操作,可能有更好的工具可以执行此操作。

然而,这是一种在 Vim 中编写脚本的方法,它可能也可以使用宏和:s魔法以交互方式完成;)

首先定义一个 Vim 函数:

func DirContents2Json()
  let list=glob('*.mp3', 0, 1)
  let b=map(sort(copy(list)), { i, v -> {'file': v}})
  return json_encode({'audio': b})
endfunc

该函数首先返回当前目录中所有 mp3 文件的列表,然后使用 lambda 表达式将返回的列表转换为字典列表。最后,它返回一个带有“audio”键的字典,其中包含列表并使用该json_encode()函数将其转换为 json。

要运行它,请在包含文件的目录中打开 Vim,然后调用:call append('$', DirContents2Json()). 要正确格式化它,您可以使用 eg!!python -m json.tool或类似的东西。

这至少需要一个 Vim 8.1


推荐阅读