PHPで開発している際によく見かけるテキストを整形する処理のチップスとなります。
全般
CSV/TSV、リファクタリングなどで広く使えます。
vim-easy-alignのデフォルトとREADME.mdのサンプルの設定でも十分使えますが、
PHP様には一部不向きな点もあるため、適当に改良してあります。
.vimrc
" vim-easy-align {{{
NeoBundleLazy 'junegunn/vim-easy-align', {
\ 'autoload': {
\ 'commands' : 'EasyAlign',},}
vnoremap<silent><Leader>a :EasyAlign<CR>letg:easy_align_delimiters = {
\ '=': {
\ 'pattern': '===\|!==\|<=>\|\(&&\|||\|<<\|>>\)=\|=\~[#?]\?\|=>\|[:+/*!%^=><&|.-]\?=[#?]\?',
\ 'left_margin': 1,
\ 'right_margin': 1,
\ 'stick_to_left': 0 },
\ '>': {
\ 'pattern': '>>\|=>\|>', },
\ '/': {
\ 'pattern': '//\+\|/\*\|\*/',
\ 'ignore_groups': ['String'], },
\ '#': {
\ 'pattern': '#\+',
\ 'ignore_groups': ['String'],
\ 'delimiter_align': 'l', },
\ '$': {
\ 'pattern': '\((.*\)\@!$\(.*)\)\@!',
\ 'ignore_groups': ['String'],
\ 'right_margin': 0,
\ 'delimiter_align': 'l', },
\ ']': {
\ 'pattern': '[[\]]',
\ 'left_margin': 0,
\ 'right_margin': 0,
\ 'stick_to_left': 0, },
\ ')': {
\ 'pattern': '[()]',
\ 'left_margin': 0,
\ 'right_margin': 0,
\ 'stick_to_left': 0, },
\ 'd': {
\ 'pattern': ' \(\S\+\s*[;=]\)\@=',
\ 'left_margin': 0,
\ 'right_margin': 0, }, }
"}}}
JSON整形
Python の json.toolが便利なので活用します。ここではPHPを使用しません。
.vimrc
nnoremap<Leader>json :execute '%!python -m json.tool'<CR>
XML整形
OSに備わっているコマンドを活用します。ここではPHPを使用しません。
.vimrc
nnoremap<Leader>xml :execute '%!xmllint --noblanks --nowrap --encode UTF-8 --format %'<CR>
SQL整形
vim-easy-alignとAlignどちらが良いかとよく話題に出ますが、個人的にはvim-easy-alignの方が使いやすいです。
ただ、SQLUtilitiesがAlign依存なため、使用しています。
.vimrc
" Align" SQLUtilities {{{
NeoBundleLazy 'vim-scripts/SQLUtilities', {
\ 'depends': 'vim-scripts/Align',
\ 'autoload': {
\ 'commands' : 'SQLUFormatter',},}
letg:sqlutil_align_comma =1nnoremap<Leader>sql :SQLUFormatter<CR>"}}}
複数行のテキストをクリップボードからVimに貼付
整形したテキストを別タブのVim等に貼り付ける、ブラウザからコピペする際に設定してあるとわりと便利です。
動作確認はMAC(iTerm2)で動作している事は確認していますが、Windows(Poderosa)では動作していません。
.vimrc
nnoremap<silent><expr><Leader>v':set<Space>paste<CR><Insert><C-r>+<ESC>:set<Space>nopaste<CR>'inoremap<silent><expr><C-v>'<ESC>:set<Space>paste<CR><Insert><C-r>+<ESC>:set<Space>nopaste<CR><Insert>'