我正在尝试使用正则表达式在 VIM 中编写一个粗略的代码格式化程序,通常情况下没问题,但我陷入了这个问题:如何仅重新格式化列表,并且如果它位于某种类型的括号内。比如说我想重新格式化
a = [1, 2, 3, 4]
进入
a =
[1,
2,
3,
4]
但不进行操作
b = |1, 2, 3, 4|
?
到目前为止,我已经使用它查找所有出现的单词+逗号+任何字符,并将其替换为逗号和回车。
au BufWrite <buffer> %s/\w\zs,\ze./,\r/ge
您可以混合使用
:s
和 substitute()
来进行匹配。例如,考虑以下文本:
a = [1, 2, 3, 4]
b = |1, 2, 3, 4|
使用:
:%s/\s*\[.\{-}]/\=substitute(submatch(0), '\s\+', '\n', 'g')
退货:
a =
[1,
2,
3,
4]
b = |1, 2, 3, 4|
它的作用是匹配
[...]
,然后用换行符替换其中的每个空格。
您还可以使用正则表达式:
:%s/^.*|\n\zs\|,/,\r/g
这意味着
^.*|\n
匹配包含字符|
的每一行,然后命令\zs
超越了这个选择,现在可以匹配剩余行中的每个逗号...