vim - 以 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 中编写脚本的方法,它可能也可以使用宏和: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
推荐阅读
- python - 如何使用 Python API 为 Dataproc 集群激活计划删除?
- python - Python中具有列表整数的多个循环的正确语法
- c - 为什么我收到分段错误:11?
- javascript - 在 ajax 响应中处理文件(在本例中为视频)
- c++ - 问题是关于 C++ 中的数组,以便更多地了解编程主题
- botframework - 是否可以在自适应卡的 body 数组中添加 action.open url?
- wordpress - 将 Wordpress 网站部署到 Wix 购买的域中
- css - 从手机屏幕切换到平板电脑和电脑屏幕时,如何让徽标移动到页面的左侧?
- android - 底部导航栏导致滞后?
- crystal-reports - Crystal Reports 中没有导出到 MS Excel 97-2003