如何在vim中对齐phpdoc注释

时间:2014-03-31 14:46:20

标签: vim code-formatting

是否有一种简单的方法可以在vim中对齐phpdoc注释块?

我想要

/**
 * Call an API method.
 * @param string $method The API method to call, e.g. 'lists/list'
 * @param array $args An array of arguments to pass to the method. Will be json-encoded for you.
 * @return array Associative array of json decoded API response.
 */

格式为

/**
 * Call an API method.
 * @param  string $method The API method to call, e.g. 'lists/list'
 * @param  array  $args   An array of arguments to pass to the method. Will be json-encoded for you.
 * @return array          Associative array of json decoded API response.
 */

格式化包含@return的行可能很难,因为它不包含第三列。因此,即使我能想出一种方法来只对齐包含@param的行,这将是很好的。

修改

我已经尝试了tabular addon,但这不起作用,因为在上述情况下,我们不能使用空格作为分隔符。

编辑2

这是@PeterRincker回答失败的第二个用例

/**
 * Call an API method.
 * @since 1.7
 * @param string $method The API method to call, e.g. 'lists/list'
 * @param array $args An array of arguments to pass to the method. Will be json-encoded for you.
 * @return array Associative array of json decoded API response.
 */

变成

/**
 * Call an API method.
 * @since  1      .7
 * @param  string $method The API method to call, e.g. 'lists/list'
 * @param  array  $args   An array of arguments to pass to the method. Will be json-encoded for you.
 * @return array          Associative array of json decoded API response.
 */

1 个答案:

答案 0 :(得分:3)

我确信这可以简化,但它适用于您的示例案例:

:Tabularize/@\w\+\s\+\zs\S\+\|\%(@\w\+.*\)\@<=\u.*/

概述

关键是选择好的分隔符来分割,因为我们想要对齐@return行以及@param行。使用Tabularize在@ - 单词和第一个大写字母之后拆分WORD的开头。

解释

  • \|以正则表达式模式创建分支。这意味着我们可以拆分两个分隔符
  • @\w\+匹配@后跟一个字。例如@param
  • \zs设置匹配的开头
  • @\w\+\s\+\zs\S\+匹配@ - 单词后跟WORD,并将匹配的开头设为WORD的开头
  • \u匹配大写字母
  • \u.*匹配大写字母后跟其他行以防止更多分割
  • \%(...\)非捕获组
  • \@<=是vim的正面看法。 \(foo\)\@<=barbar
  • foo后匹配foobar
  • \%(@\w\+.*\)\@<=\u匹配@ - 字
  • 后面的大写字母

常用表格对齐成语

  • 使用\zs设置匹配的开始
  • .*结束以消耗其余部分并阻止更多分裂

如需更多帮助,请参阅:

:h :Tabularize
:h /\|
:h /\S
:h WORD
:h /\zs
:h /\u
:h /\%(
:h /\@<=