Tabular: 在 Vim 中对齐文本

刚才在Linuxtoy上发现一个很好用的Vim插件: tabular ,下载试用了一下,确实很方便。 对于程序员来说,都希望代码看着整齐一点,tabular 就是实现代码对齐的。比如好几行的变量赋值语句, 变量名长短"参差不齐",有时候会习惯手动调整,让赋值的"="对齐。其他时候,比如括号的对齐。 随手挑了一段代码试了一下:
 
将光标移动到第7行,输入 :Tab /{ 将会根据 "{" 对齐接下来的几行代码(貌似 tabular 可以自动识别"作用域",只处理7 – 15 行之间的代码),像这样: 
第8行代码最长,所以会根据其"{" 调节其他代码行~ 还可以根据其他符号对齐,

:Tab /[symbol_to_align]

当然这种格式调整也要根据情况使用,有的时候也不一定能达到好的效果。

 

 

Vim 排版一般都是用 V 選起來後, 按 = 就會自動排列, 只是要排上述講得 "=", 就需要這個 Plugin 來計算排列, 相關內容可見下述:

Vim Plugin - Tabular 安裝

  1. git clone https://github.com/godlygeek/tabular.git
  2. cd tabular/
  3. mv after autoload doc plugin ~/.vim/
  4. vim ~/.vimrc # 於此檔案最末端加入下述

    let mapleader=','
    if exists(":Tabularize")
    nmap a= :Tabularize /=
    vmap a= :Tabularize /=
    nmap a: :Tabularize /:\zs
    vmap a: :Tabularize /:\zs
    endif

    inoremap:callalign()a

    function! s:align()
    let p = '^\s*|\s.*\s|\s*$'
    if exists(':Tabularize') && getline('.') =~# '^\s*|' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
    let column = strlen(substitute(getline('.')[0:col('.')],'[^|]','','g'))
    let position = strlen(matchstr(getline('.')[0:col('.')],'.*|\s*\zs.*'))
    Tabularize/|/l1
    normal! 0
    call search(repeat('[^|]*|',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
    endif
    endfunction

Tabular Plugin 測試

輸入下述內容:

|start|eat|left|
|12|5|7|
|20|5|15|

V 選取後, , 之後在下面繼續打, 都會自動排序. (若文字過長, 上面都會自動對齊)

:Tab/ 後面接要分隔的符號, ex: 上述是用 "|" 分隔, 所以輸入 :Tab/|, 程式若要排 "=", 則輸入 :Tab/=, 更多範例可見下述:

  • :Tab/:
  • :Tab/=
  • :Tab/:\zs # 只有排序 ":" 後面的文字
posted @ 2012-04-13 12:01  赵小磊  阅读(3933)  评论(0编辑  收藏  举报
回到头部