我试图在某些功能协议的第三列中对vim中的一些代码块进行排序。我已尝试通过sort
使用外部sort -n -k3
命令,但似乎此程序假定没有连续的分隔符,并且失败。
例如:
static int test(int a, int b);
static char toChar(uint8_t i);
static char plusChar(uint8_t i);
static int test2(int a, int b);
static bool testBool(bool b);
我首先通过%!column -t
通过列管道,我得到一些相对有用的输出:
static int test(int a, int b);
static char toChar(uint8_t i);
static char plusChar(uint8_t i);
static int test2(int a, int b);
static bool testBool(bool b);
第一个问题是我只想要前几列间隔。所以,我必须手动改变表格(繁琐地):
static int test(int a, int b);
static char toChar(uint8_t i);
static char plusChar(uint8_t i);
static int test2(int a, int b);
static bool testBool(bool b);
现在,问题的后半部分将上述结果排序为:
static char plusChar(uint8_t i);
static int test(int a, int b);
static int test2(int a, int b);
static bool testBool(bool b);
static char toChar(uint8_t i);
那么,简而言之,是否有一个相对简单的正则表达式来实现代码的列化,然后在第三列上对它进行排序?我想第一部分,像s/static \S+\s+
,但我无法弄清楚如何使整个字符串固定宽度。至于第二部分,我尝试使用内置的VIM正则表达式%sor r /static \S+\s+.+$/
,但它根本没有排序。
谢谢。
答案 0 :(得分:2)
如何首先进行排序,然后很好地排序?我可以帮助完成第一步:
:sort / .\{-} /
有关详细信息,请参阅:help :sort
。 (请注意,我给出的模式中有两个空格。)