我正在尝试使用正则表达式在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
答案 0 :(得分:1)
您可以混合使用: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|
它的作用是匹配[...]
,然后用换行符替换其中的每个空格。