VIM - 在第三列排序 - 不均匀的间距

时间:2014-02-21 17:59:20

标签: regex sorting vim

我试图在某些功能协议的第三列中对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+.+$/,但它根本没有排序。

谢谢。

1 个答案:

答案 0 :(得分:2)

如何首先进行排序,然后很好地排序?我可以帮助完成第一步:

:sort / .\{-} /

有关详细信息,请参阅:help :sort。 (请注意,我给出的模式中有两个空格。)