夏休みの宿題感覚でVimのチップスを公開します。
チップスは概要のみ掲載しているため、詳細は.vimrcを参照して下さい。
Vim本体設定
PHP設定
詳細については":help"参照です。
let php_sql_query =1let php_baselib =1let php_htmlInStrings =1let php_noShortTags =1let php_parent_error_close =1
DB設定
おそらくデフォルトではsqloracleになっているかと思われます。
使用しているDBが異なる場合には、使用しているDBに変更する事でsyntax highlight機能がいい感じに機能するようになります。
詳細については"$VIMRUNTIME/syntax/sql.vim"参照です。
"mysqlの場合letg:sql_type_default='mysql'
Plugin設定
マニュアル参照設定
マニュアルをネットワークを介さずに参照する事が可能です。
マニュアルのダウンロードを行います。
$ mkdir -p $HOME/.vim/ref/cache
$ cd /tmp
$ wget http://jp1.php.net/distributions/manual/php_manual_ja.tar.gz
$ tar -zxvf php_manual_ja.tar.gz -C $HOME/.vim/ref
.vimrcの設定を行います。
" vim-ref {{{
NeoBundle 'thinca/vim-ref'letg:ref_cache_dir=$HOME.'/.vim/vim-ref/cache'letg:ref_phpmanual_path=$HOME.'/.vim/vim-ref/php-chunked-xhtml'"}}}
ctags設定
tagsファイルを適切に生成することでタグジャンプが可能となり、時間短縮が期待できます。
.ctagsの設定を行います。.ctagsはctagsで共通設定となるため、1つの言語に特化した記載は好ましくありません。
--sort=yes--recurse=yes--langmap=PHP:+.inc.tpl--php-types=cfd
tagsファイルを作成するaliasを設定します。
tagsCmd='ctags --languages=php -f'tagsValiable=''tagsValiable=$tagsValiable"cd $HOME/sample;$tagsCmd $HOME/.vim/tags/sample.tags $HOME/sample;"tagsValiable=$tagsValiable"cd $HOME/test; $tagsCmd $HOME/.vim/tags/test.tags $HOME/test;"aliasTAGS=$tagsValiable
.vimrcの設定を行います。tags参照設定自体は環境依存があるため、.vimrc本体ではなく外部ファイルにて設定しています。
" vim-tags {{{
NeoBundle 'szw/vim-tags'autocmd MyAutoCmd BufNewFile,BufRead $HOME/sample/*.php setlocaltags=$HOME/.vim/tags/sample.tagsautocmd MyAutoCmd BufNewFile,BufRead $HOME/test/*.php setlocaltags=$HOME/.vim/tags/test.tags"}}}" taglist.vim {{{
NeoBundleLazy 'vim-scripts/taglist.vim', {
\ 'autoload' : {
\ 'commands' : 'Tlist',},}
let Tlist_Use_Right_Window =1let Tlist_Show_One_File =1let Tlist_Exit_OnlyWindow =1letg:tlist_php_settings ='php;c:class;f:function;d:constant'nnoremap<Leader>t :Tlist<CR>"}}}
syntaxチェック設定
構文チェックを非同期で定期的に行われるため効率よく開発が進められます。
" vimproc {{{
NeoBundle 'Shougo/vimproc', {
\ 'build' : {
\ 'mac' : 'make -f make_mac.mak',
\ 'unix' : 'make -f make_unix.mak',},}
"}}}" vim-quickrun {{{
NeoBundle 'thinca/vim-quickrun'nnoremap<Leader>r :QuickRun<CR>letg:quickrun_config = {
\ '_' : {
\ 'hook/close_buffer/enable_failure': 1,
\ 'hook/close_buffer/enable_empty_data': 1,
\ 'runner': 'vimproc',
\ 'runner/vimproc/updatetime': 60,
\ 'outputter': 'multi:buffer:quickfix',
\ 'outputter/buffer/split': ':botright',
\ 'outputter/buffer/close_on_empty': 1,},
\ 'watchdogs_checker/_' : {
\ 'hook/close_quickfix/enable_exit': 1,
\ 'hook/back_window/enable_exit': 0,
\ 'hook/back_window/priority_exit': 1,
\ 'hook/quickfix_status_enable/enable_exit': 1,
\ 'hook/quickfix_status_enable/priority_exit': 2,
\ 'hook/qfsigns_update/enable_exit': 1,
\ 'hook/qfsigns_update/priority_exit': 3,
\ 'hook/qfstatusline_update/enable_exit': 1,
\ 'hook/qfstatusline_update/priority_exit': 4,},
\ 'watchdogs_checker/php' : {
\ 'command': 'php',
\ 'exec': '%c -d error_reporting=E_ALL -d display_errors=1 -d display_startup_errors=1 -d log_errors=0 -d xdebug.cli_color=0 -l %o %s:p',
\ 'errorformat': '%m\ in\ %f\ on\ line\ %l',},}
"}}}" vim-watchdogs {{{
NeoBundleLazy 'osyo-manga/vim-watchdogs', {
\ 'depends': ['thinca/vim-quickrun','osyo-manga/shabadou.vim','KazuakiM/vim-qfsigns','KazuakiM/vim-qfstatusline','dannyob/quickfixstatus'],
\ 'autoload' : {
\ 'filetypes': ['php'],},}
lets:hooks = neobundle#get_hooks('vim-watchdogs')function!s:hooks.on_source(bundle)"vim-qfsignsnnoremap<Leader>sy :QfsingsJunmp<CR>"vim-qfstatusline (This setting is userd at lightline)"let g:Qfstatusline#UpdateCmd = function('lightline#update')"vim-watchdogsletg:watchdogs_check_BufWritePost_enable =0letg:watchdogs_check_BufWritePost_enables = {
\ 'php' : 1,}
letg:watchdogs_check_CursorHold_enable =1endfunction
unlet s:hooks
コーディング規約チェック設定
PHPにおけるコーディング規約チェックで有名なPHP Coding Standard Fixerを利用したいと思います。
homebrew活用者はhomebrewにも公開されているため、そちらを利用するのも手です。
$ mkdir -p $HOME/.vim/phpCsFixer/
$ cd /tmp
$ wget http://cs.sensiolabs.org/get/php-cs-fixer.phar -O $HOME/.vim/phpCsFixer/php-cs-fixer
$ chmod a+x $HOME/.vim/phpCsFixer/php-cs-fixer
.vimrcの設定を行います。
" vim-php-cs-fixer {{{
NeoBundleLazy 'stephpy/vim-php-cs-fixer', {
\ 'autoload' : {
\ 'filetypes': 'php',},}
lets:hooks = neobundle#get_hooks('vim-php-cs-fixer')function!s:hooks.on_source(bundle)letg:php_cs_fixer_path ='$HOME/.vim/phpCsFixer/php-cs-fixer'" define the path to the php-cs-fixer.pharletg:php_cs_fixer_level='all'" which level ?letg:php_cs_fixer_config='default'" configurationletg:php_cs_fixer_php_path='php'" Path to PHP" If you want to define specific fixers:"let g:php_cs_fixer_fixers_list = 'linefeed,short_tag,indentation'letg:php_cs_fixer_enable_default_mapping=1" Enable the mapping by default (<leader>pcd)letg:php_cs_fixer_dry_run=0" Call command with dry-run optionletg:php_cs_fixer_verbose=0" Return the output of command if 1, else an inline information.nnoremap<Leader>php :call PhpCsFixerFixFile()<CR>endfunction
unlet s:hooks
"}}}
補完機能設定
Vim本体にも補完機能はありますが、ここではリッチな補完機能を活用したチップスの紹介をします。
補完するにあたり最も重要となるのはsnippetsになります。
snippetsはコーディング効率に直結する重要な設定のため、
私はベースとなるsnippetsをforkして自分用に最適化した物を使用しています。
Vim で PHP 関数の辞書を作成する方法についてのメモを参考にPHP辞書ファイルを事前に作成し、.vimrcに以下の設定を行います。
NeoBundle 'KazuakiM/vim-snippets'" ultisnips {{{
NeoBundle 'SirVer/ultisnips'letg:UltiSnipsJumpForwardTrigger='<TAB>'letg:UltiSnipsEditSplit='vertical'letg:UltiSnipsSnippetsDir=$HOME.'/.vim/bundle/vim-snippets/UltiSnips'"}}}" neocomplete.vim {{{
NeoBundleLazy 'Shougo/neocomplete.vim', {
\ 'depends': ['KazuakiM/vim-snippets','SirVer/ultisnips','Shougo/context_filetype.vim'],
\ 'autoload' : {
\ 'insert' : 1,},}
lets:hooks = neobundle#get_hooks('neocomplete.vim')function!s:hooks.on_source(bundle)letg:acp_enableAtStartup =0letg:neocomplete#data_directory = $HOME.'/.vim/neocomplete.vim'letg:neocomplete#enable_at_startup =1letg:neocomplete#enable_smart_case =1letg:neocomplete#lock_buffer_name_pattern ='\*ku\*'letg:neocomplete#same_filetypes = {
\ 'html': 'html,css,javascript,php',}
letg:neocomplete#sources = {
\ '_': ['file','ultisnips','buffer','member','dictionary',],
\ 'vim': ['file','ultisnips','buffer','member','dictionary','syntax','vim'],
\ 'html': ['file','ultisnips','buffer','member','dictionary','syntax',],}
letg:neocomplete#sources#dictionary#dictionaries = {
\ 'default': '',
\ 'php': $HOME.'/.vim/dict/php.dict',}
letg:neocomplete#sources#syntax#min_keyword_length =3inoremap<expr><C-c> pumvisible() ? "\<C-n>" : "\<C-c>"" tags using."let g:neocomplete#sources = {"\ '_': ['file', 'ultisnips', 'buffer', 'dictionary', 'tag',],"\ 'html': ['file', 'ultisnips', 'buffer', 'dictionary', 'tag', 'syntax',],}"let g:neocomplete#sources#tags#cache_limit_size = 10000000endfunction
unlet s:hooks
"}}}
必要なディレクトリを作成します。
$ mkdir -p $HOME/.vim/neocomplete.vim $HOME/.vim/dict