Vim可以使用"sort"命令对行进行排序.我想用vim对源代码中的函数进行排序.例如:之前
def a():
pass
def c():
pass
def b():
pass
Run Code Online (Sandbox Code Playgroud)
后:
def a():
pass
def b():
pass
def c():
pass
Run Code Online (Sandbox Code Playgroud)
我能这样做吗?
对于这样的事情:
def a():
stmt1
stmt2
def b():
stmt3
Run Code Online (Sandbox Code Playgroud)
或者C:
void a()
{
stmt1;
stmt2;
}
void b()
{
stmt3;
}
Run Code Online (Sandbox Code Playgroud)
您需要足够的语义知识来确定stmt1和stmt2之间的空白空间仍然是其中的一部分a.
对于python,这意味着你要提前读取第一行不是空白或缩进.您还需要考虑嵌套缩进(当函数是类或模块的一部分并且def已经缩进时).
对于C,您需要提前读取,直到匹配的结束括号 - 这意味着您需要考虑嵌套的括号.
有一个关于C++的类似话题没有答案:在C++代码中按字母顺序自动排序函数
我相信这在一般情况下是非平凡的,你最好使用yacc或其他语义解析器.您也可以手动为开头和结尾添加标记,并执行与kev建议类似的操作.
MaRkNeXt
def a():
stmt1
stmt2
MaRkNeXt
def b():
stmt3
MaRkNeXt
Run Code Online (Sandbox Code Playgroud)
然后像:
:%s/$/$/
:g/^MaRkNeXt/,/MaRkNeXt/-1join!
:%sort
:%s/\$/\r/g
:g/MaRkNeXt/d
Run Code Online (Sandbox Code Playgroud)
:%s/$/$/\n:g/^\\w/s/^/\\r/\nggddGp\n:g/^\\w/,/^$/-1join!\n:%sort\n:%s/\\$/\\r/g\n:g/^$/d\nRun Code Online (Sandbox Code Playgroud)\n\ndef a():\n pass\ndef b():\n pass\ndef c():\n pass\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |