我可以使用 VS Code 批量编辑多个文件吗?
Can I bulk edit multiple file with VS Code?
我有大约 50 个带有 frontmatter 的 markdown 文件。像这样:
---
title: Funny Title
date: 2020-01-09
---
我想编辑所有文件,以便我具有以下内容:
---
title: Conference Volunteering
dateCreated: 2020-01-09
dateUpdated: 2020-01-09
就是这样。我能够在 Vim 中正确设置一个宏来为我执行此操作,但没有找到在多个文件上 运行 执行此操作的方法。现在我在想一定有一种方法可以在 VS Code 中做到这一点。
例如,我可以在所有 *.md
个文件中搜索并用 dateCreated
替换 date
。那会让我走到一半,我只是不知道如何复制这一行并将 dateCreated
替换为 dateUpdated
感谢任何帮助。如果您需要更多 details/explanations,请告诉我。
如果你有一个宏,你可以在 Vim 中完成,不需要 VS 代码。
看看这里的第二个答案(Rich):https://vi.stackexchange.com/questions/119/how-can-i-run-a-function-or-macro-across-a-folder-of-files
您可以像这样开始 vim 来填充您的参数列表:
vim my/directory/*md
之后,如我链接的答案所示,您可以 运行(在 vim 内):
:argdo normal @<macro label>
确保宏包含到文件中正确行的导航:我不确定光标的初始位置是文件的开头还是上次关闭文件时它所在的位置,但无论如何,我会通过转到页面顶部然后导航到您要更改的行来启动宏。
PS:请注意,在我链接到的答案中有关于如何保存更改的讨论,我会留给您研究。
使用
进行正则表达式搜索
搜索:date: (.*)
替换:dateCreated: \ndateUpdated:
在 vim 中你可以这样尝试:
设置hidden
选项以允许vim跳转到下一个文件而不保存::set hidden
打开你所有的降价:
vim *.md
然后运行一个
:silent argdo 3s/^\v(date)(:.*)/Created\rUpdated/ge
silent ........... does not show messages on each substitution
argdo ............ acts over all files opened
3s ............... substitute on the third line
^ ................ start of the line
\v ............... very magic (allow more sane regex)
(date) ........... first regex group -->
(:.*) ............ second regex group -->
\r ............... adds a new line
e (flag) ......... ignore files where the pattern does not appear
在保存所有文件(arglist)之前先看看结果是否正确,然后:
:argdo update!
在相反的情况下,有一个错误你可以恢复你所做的一切:
:silent argdo edit!
我有大约 50 个带有 frontmatter 的 markdown 文件。像这样:
---
title: Funny Title
date: 2020-01-09
---
我想编辑所有文件,以便我具有以下内容:
---
title: Conference Volunteering
dateCreated: 2020-01-09
dateUpdated: 2020-01-09
就是这样。我能够在 Vim 中正确设置一个宏来为我执行此操作,但没有找到在多个文件上 运行 执行此操作的方法。现在我在想一定有一种方法可以在 VS Code 中做到这一点。
例如,我可以在所有 *.md
个文件中搜索并用 dateCreated
替换 date
。那会让我走到一半,我只是不知道如何复制这一行并将 dateCreated
替换为 dateUpdated
感谢任何帮助。如果您需要更多 details/explanations,请告诉我。
如果你有一个宏,你可以在 Vim 中完成,不需要 VS 代码。 看看这里的第二个答案(Rich):https://vi.stackexchange.com/questions/119/how-can-i-run-a-function-or-macro-across-a-folder-of-files
您可以像这样开始 vim 来填充您的参数列表:
vim my/directory/*md
之后,如我链接的答案所示,您可以 运行(在 vim 内):
:argdo normal @<macro label>
确保宏包含到文件中正确行的导航:我不确定光标的初始位置是文件的开头还是上次关闭文件时它所在的位置,但无论如何,我会通过转到页面顶部然后导航到您要更改的行来启动宏。
PS:请注意,在我链接到的答案中有关于如何保存更改的讨论,我会留给您研究。
使用
进行正则表达式搜索搜索:date: (.*)
替换:dateCreated: \ndateUpdated:
在 vim 中你可以这样尝试:
设置hidden
选项以允许vim跳转到下一个文件而不保存::set hidden
打开你所有的降价:
vim *.md
然后运行一个
:silent argdo 3s/^\v(date)(:.*)/Created\rUpdated/ge
silent ........... does not show messages on each substitution
argdo ............ acts over all files opened
3s ............... substitute on the third line
^ ................ start of the line
\v ............... very magic (allow more sane regex)
(date) ........... first regex group -->
(:.*) ............ second regex group -->
\r ............... adds a new line
e (flag) ......... ignore files where the pattern does not appear
在保存所有文件(arglist)之前先看看结果是否正确,然后:
:argdo update!
在相反的情况下,有一个错误你可以恢复你所做的一切:
:silent argdo edit!