如何将emacs C ++模式中的代码与&#34 ;;"或","?

时间:2014-06-28 22:32:10

标签: c++ emacs

作为一名测试工程师,我经常会有一些意大利面条代码如下:

  int *const cpe = &n; assert(42 == *cpe);
  int *const cpf = &cn; assert(42 == *cpf);
  int *const cpg = pcn; assert(42 == *cpg);
  int *const cph = cpcn; assert(42 == *cph);

对于美学,我想将它们对齐在" ; "定义的列中,如下所示:

  int *const cpe = &n;   assert(42 == *cpe);
  int *const cpf = &cn;  assert(42 == *cpf);
  int *const cpg = pcn;  assert(42 == *cpg);
  int *const cph = cpcn; assert(42 == *cph);

emacs中有没有办法做到这一点? (我知道 M-x align 但它并没有像所希望的那样做一个干净的工作。) 希望该方法也适用于","太

2 个答案:

答案 0 :(得分:4)

(add-to-list 'align-rules-list
             '(c-assignment1
               (regexp . "[=;]\\(\\s-*\\)")
               (mode   . '(c-mode))
               (repeat . t)))

如果您编写此代码,那么简单M-x align也可以。

答案 1 :(得分:2)

在这种特殊情况下,您可以在区域处于活动状态时在assert上对齐:

M-x align-regexp assert RET

一般来说,这里的答案类似于my answer to your other question的第一部分:

C-u M-x align-regexp RET ;\(\s-*\) RET RET RET n

将转为

  int *const cpe = &n; assert(42 == *cpe);
  int *const cpf = &cn; assert(42 == *cpf);
  int *const cpg = pcn; assert(42 == *cpg);
  int *const cph = cpcn; assert(42 == *cph);

  int *const cpe = &n;   assert(42 == *cpe);
  int *const cpf = &cn;  assert(42 == *cpf);
  int *const cpg = pcn;  assert(42 == *cpg);
  int *const cph = cpcn; assert(42 == *cph);

可以使用相同的技术来对齐逗号。只需使用;替换正则表达式中的,