Vim 程式撰寫排版用 Plugin - Tabular

程式在寫得時候, 常會寫到類似下述:

$aa = 'foo';
$abc = 'oxo';

在遇到這種的情況, 有些時候就會想要把 "=" 對齊, 看起來會比較順眼.

Vim 外掛 - Tabular 簡介

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 <Leader>a= :Tabularize /=<CR>
        vmap <Leader>a= :Tabularize /=<CR>
        nmap <Leader>a: :Tabularize /:\zs<CR>
        vmap <Leader>a: :Tabularize /:\zs<CR>
    endif
    
    inoremap <silent> <Bar>   <Bar><Esc>:call <SID>align()<CR>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 # 只有排序 ":" 後面的文字

關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 My_Note-Unix 並標籤為 , 。將永久鏈結加入書籤。

Vim 程式撰寫排版用 Plugin - Tabular 有 4 則回應

  1. arnose 說道:

    可以試試pathogen來管理vim的plugin。

  2. Mandy 說道:

    inoremap:callalign()a << call & align中間少了空格,懶人複製貼上會有錯誤…

    而且看了原文可能在排版時部份文字都被吃掉了…

發表迴響