Vim可以使用“sort”命令对行进行排序。我想用vim对源代码中的函数进行排序。 例如: 前
def a():
pass
def c():
pass
def b():
pass
后:
def a():
pass
def b():
pass
def c():
pass
我能这样做吗?
答案 0 :(得分:6)
对于像:
这样的事情def a():
stmt1
stmt2
def b():
stmt3
或C:
void a()
{
stmt1;
stmt2;
}
void b()
{
stmt3;
}
您需要足够的语义知识来确定stmt1和stmt2之间的空白空间仍然是a
的一部分。
对于python,这意味着你要提前读取第一行不是空白或缩进的。您还需要考虑嵌套缩进(当函数是类或模块的一部分并且def
已经缩进时)。
对于C,你需要提前阅读,直到匹配的结束括号 - 这意味着你需要考虑嵌套的括号。
有一个关于C ++的类似主题未得到答复:Automatically sort functions alphabetically in C++ code
我相信在一般情况下这是非常重要的,你最好使用yacc
或其他语义解析器。您也可以手动添加开头和结尾的标记,并执行与kev建议类似的操作。
MaRkNeXt
def a():
stmt1
stmt2
MaRkNeXt
def b():
stmt3
MaRkNeXt
然后像:
:%s/$/$/
:g/^MaRkNeXt/,/MaRkNeXt/-1join!
:%sort
:%s/\$/\r/g
:g/MaRkNeXt/d
答案 1 :(得分:1)
:%s/$/$/
:g/^\w/s/^/\r/
ggddGp
:g/^\w/,/^$/-1join!
:%sort
:%s/\$/\r/g
:g/^$/d
def a():
pass
def b():
pass
def c():
pass
答案 2 :(得分:1)
另一种方法可能是使用vim Taglist插件。这是vim的评价最高,下载次数最多的插件。
http://vim-taglist.sourceforge.net/
然后,您可以按字母顺序或按照定义的顺序轻松查看排序的函数。
通过在vimrc文件中添加以下行,默认顺序将按字母顺序排列。
让Tlist_Sort_Type =“name”
您可以按Taglist选项卡中的's'键来切换顺序。
在官方文档的以下链接中搜索“Tlist_Sort_Type”: