我有一长串文件路径的格式如下:
* (00-atoms/images/AI-004-image-2x1.md)
这些由新行分隔。
我想将这些更改为降价链接,使用文件名(无破折号和无文件路径类型)作为每个单独路径的标题:
* [AI 004 image 2x1](00-atoms/images/AI-004-image-2x1.md)
所有这些文件路径都有两层深,但前两层是可变的:
* (00-atoms/forms-and-feedback/AFF-001-text-field.md)
* (01-molecules/event-text/MTE-006-event-address-bar-unordered-amenities-list.md)
此外,文件名中可以包含波浪号,如下所示:
* (01-molecules/forms/MF-001-input-with-form-label~error-message.md)
我正在寻找一种使用 Vim 的方法(通过宏或字符串替换)以我需要格式化的方式来格式化这个文件。我已经对字符串替换和宏进行了多次尝试,但一直在努力做到这一点。有没有人看到这些路径的任何独特之处可以帮助我解决这个问题?
这是一种方法:
:%s!^\* \zs([^()]*/\([^()/]\+\)\.md)!\='[' . tr(submatch(1), '-', ' ') . ']' . submatch(0)!
主意:
s!!!
在所有行 ( %
)上运行替换命令^\* \zs([^()]*/\([^()/]\+\)\.md)
,匹配
^
- 行首\*
- 一个星号和一个空格\zs
- 标志着比赛正式开始(到目前为止的一切都不会被替换)(
- 左括号[^()]*
- 0 个或多个非括号字符(这与路径中的目录匹配)/
- 斜线\(
- 开始捕获组 1[^()/]\+
- 1 个或多个非括号/非斜杠字符(基本名称部分)\)
- 捕获组 1 结束\.md
- 文件扩展名“.md”)
- 右括号\='[' . tr(submatch(1), '-', ' ') . ']' . submatch(0)
,意思是
\=
- 其余部分将作为表达式进行评估,而不是字符串submatch(1)
- 第一个捕获组的内容,即文件的基本名称(不带.md
扩展名)tr(..., '-', ' ')
- 将字符串中的所有破折号转换为空格'[' . ... . ']'
- 连接[
和]
前面/后面的字符... . submatch(0)
- 追加整个匹配的字符串这将打开* (foo/bar-baz.md)
进入* [bar baz](foo/bar-baz.md)
。
输入:
* (00-atoms/images/AI-004-image-2x1.md)
* (00-atoms/forms-and-feedback/AFF-001-text-field.md)
* (01-molecules/event-text/MTE-006-event-address-bar-unordered-amenities-list.md)
* (01-molecules/forms/MF-001-input-with-form-label~error-message.md)
结果:
* [AI 004 image 2x1](00-atoms/images/AI-004-image-2x1.md)
* [AFF 001 text field](00-atoms/forms-and-feedback/AFF-001-text-field.md)
* [MTE 006 event address bar unordered amenities list](01-molecules/event-text/MTE-006-event-address-bar-unordered-amenities-list.md)
* [MF 001 input with form label~error message](01-molecules/forms/MF-001-input-with-form-label~error-message.md)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句