程式在寫得時候, 常會寫到類似下述:
$aa = 'foo';
$abc = 'oxo';
在遇到這種的情況, 有些時候就會想要把 "=" 對齊, 看起來會比較順眼.
Vim 外掛 - Tabular 簡介
Vim 排版一般都是用 V 選起來後, 按 = 就會自動排列, 只是要排上述講得 "=", 就需要這個 Plugin 來計算排列, 相關內容可見下述:
- Aligning text with Tabular.vim - 此篇有影片介紹
- Vim Tabular Plugin 可見: godlygeek/tabular - GitHub
Vim Plugin - Tabular 安裝
- git clone https://github.com/godlygeek/tabular.git
- cd tabular/
- mv after autoload doc plugin ~/.vim/
- 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 # 只有排序 ":" 後面的文字
可以試試pathogen來管理vim的plugin。
感謝, 我也正在考慮要用 pathogen 還是要用 Vundle 來管理. 🙂
inoremap:callalign()a << call & align中間少了空格,懶人複製貼上會有錯誤…
而且看了原文可能在排版時部份文字都被吃掉了…
被當成 HTML 語法吃掉了, 沒注意到, 感謝.
已經修正此錯誤~ 🙂