2014-03-31 49 views
1

有沒有簡單的方法來對齊vim中的phpdoc註釋塊?如何在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. 
*/ 
+0

表格VIM插件應該這樣做。 – Amit

+0

@Amit我已經嘗試了表格插件,但它不會用於這種情況,因爲我們不能使用空格作爲分隔符。 – Sudar

+0

它也可以在正則表達式上對齊。 – Amit

回答

3

我敢肯定,這可以簡化,但它適用於您的示例情況:

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

概述

這裏的關鍵是要選擇好deliminators拆就因爲我們要對齊的@return線還有@param線。使用Tabularize在@-字和第一個大寫字母后分開WORD的開頭。

說明

  • \|創建在一個正則表達式模式的分支。這意味着我們可以拆分兩個刪除者
  • @\w\+匹配@後跟一個詞。例如@param
  • \zs設置匹配
  • @\w\+\s\+\zs\S\+匹配的@ -Word,接着一個字的起始,並設置一個匹配的WORD
  • \u匹配大寫字母
  • \u.*比賽開始的開始大寫字母跟隨行的其餘部分,以防止更多的分裂
  • \%(...\)非捕獲組
  • \@<=是Vim的背後積極的樣子。\(foo\)\@<=bar比賽barfoofoobar
  • \%(@\w\+.*\)\@<=\u匹配遵循@ -word

通用表格排列成語

  • 使用\zs設置匹配
  • 年底開始一個大寫字母與.*消耗該行的其餘部分,並防止更多分裂

如需更多幫助,請參見:

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

這適用於此用例,但不適用於其他類似的用例。但是我可以使用它作爲基礎,然後嘗試修改其他用例。你能否簡單解釋我在這裏發生的事情。謝謝。 – Sudar

+1

@Sudar我添加了一個解釋。您可能希望提供一些失敗的示例文本 –

+0

@PeterRincker - +1優秀。 – Amit