emacs用户编码风格中函数参数的垂直对齐

时间:2013-11-07 21:25:05

标签: emacs coding-style alignment

前言(你可以跳过它):在emacs init.el中我设置了我的代码格式样式:

(setq bws-c-style
      '((c-basic-offset                 . 2)
        (indent-tabs-mode               . nil) ; All indentation be made from spaces only 
        (c-tab-always-indent            . t)
        (c-offsets-alist                . (
                       (access-label . /)
                       (defun-block-intro . +)
                       (substatement-open . 0)
                       (inline-open . 0)
                       (arglist-cont .(c-lineup-arglist-operators 0))
                       (arglist-cont-nonempty . c-lineup-argcont)
                       (arglist-cont-nonempty . (c-lineup-arglist-operators c-lineup-arglist))
                       (arglist-close . (c-lineup-arglist-close-under-paren))
                       (comment-intro . +)
                       (case-label . +)
                                          )
        )
        (hs-special-modes-alist         . (

                       (c++-mode "#if" "#endif" "/[*/]" nil nil)
                       (c++-mode "{" "}" "/[*/]" nil nil)
                       )
        )
        (c-cleanup-list                 . (
                       scope-operator
                       empty-defun-braces
                       defun-close-semi
                       list-close-comma
                                           )
        )
       )
)

(defun lconfig-c-mode ()
  (progn 
         (c-add-style "My Coding Style" bws-c-style t)))
(add-hook 'c++-mode-hook 'lconfig-c-mode)

有了这样的风格,如果我必须将函数参数分成几行,我可以使用 TAB -key轻松对齐它们:

void foo( int one, const int& two,
          const double* const three, float& our )

非常方便。

问题是否可以设置我的代码格式样式,以便它将每个单词分开对齐然后整行?像这样:

void foo( int                 one,   const int& two,
          const double* const three, float&     four )

P.S。我看到了一些方向here,但无法理解它们,也不确定它们是否可用于设置编码风格。

1 个答案:

答案 0 :(得分:3)

这是我一直在使用的解决方案。 有不止一些代码,所以我把它放在一个 gist

它与您提出的要求接近。这是结果。

void foo(int                 one,
         int                 two,
         const double* const three,
         float&              four)

只是为了确保没有其他代码干扰, 开始像这样测试:

emacs -q -l calign.el test.cc

写一些代码, C-x h TAB 。 现在 3 将对齐参数。 当区域处于活动状态时,它会这样做,否则只插入3个。