使用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方式?任何帮助表示赞赏!
答案 0 :(得分:2)
好吧,不确定为什么要在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表达式将返回的列表转换为字典列表。最后,它返回带有“音频”键的字典,该字典包含列表,并使用json_encode()
函数将其转换为json。
要运行它,请在包含文件的目录中打开Vim,然后调用:call append('$', DirContents2Json())
。要正确格式化,您可以使用例如!!python -m json.tool
或类似的内容。
这至少需要一个Vim 8.1
答案 1 :(得分:0)
我不确定是否需要列出文件或生成整个json
。如果是后者,则Christian的答案是完美的,应该对您来说很有效!
如果通常在当前缓冲区中列出文件,那么可以使用一种更直观的方法。而且由于您是相对较新的人,请添加此内容,以防万一您以前不认识它(因为这真让我感到震惊,当我第一次认识这时:))
Vim可以运行外部Shell命令,并使用:r!
将命令的输出输入当前缓冲区。这非常强大,因为您可以通过管道传递多个命令以获得所需的输出。例如,您可以使用cat
过滤器读取大文件,使用grep
反向sort
输出,依此类推,依次类推 然后将其输入到当前文件中。缓冲。
例如,无论如何要为目录中的每个文件输入"file": "somefile.mp3""
,您可以使用以下命令:
:r! ls /some/directory/where/files/are | grep '.mp3' | awk '{$line = "\"file\": \"" $1 "\""; print $line }'
分解它,该命令执行3个步骤
ls
列出文件.mp3
个文件awk
的必需格式打印