ハイパーマッスルエンジニア

Vim、ShellScriptについてよく書く

【メモ】VimでPHPの開発環境を整える

f:id:rasukarusan:20210501114904p:plain

やること

  • LSPの導入
  • Formatterの導入
  • GTAGS(GNU Gloabal)の導入

環境

  • M1 MacBookAir(Big Sur)

LSPの導入

coc.nvimでcoc-phpls導入して終了。

:CocInstall coc-phpls

これで補完や定義ジャンプができるようになる。あとは好みだけどUltisnipsで自作のsnippetを入れたりした。

Formatterの導入

やることは 1. php-cs-formatterのインストール 2. 設定ファイル.php_csの設置 3. vimの設定

1. php-cs-formatterのインストール

github.com

保存時に自動フォーマットがかかるようにする。 php-cs-fixerでフォーマットは行う。インストールはcomposerもしくはbrewで行う。

# composerの場合
composer global require friendsofphp/php-cs-fixer
# brewの場合
brew install php-cs-fixer

2. 設定ファイル.php_csの設置

.php_csを設置する。書き方は下記を参考に。 qiita.com

vim ~/.php_cs

3. vimの設定

Aleで自動整形したかったが、設定しても実行できなかったのでautocmdでやることにした。下記を.vimrcに追加。

" =============================================
" php-cs-formatterによる自動整形
" =============================================
function! s:format_php() abort
  :r! php-cs-fixer -q fix % --config=$HOME/.php_cs
  :e! " 再読み込み
endfunction
augroup phpsetting
    autocmd!
    autocmd BufWritePost *.php :call s:format_php()
augroup END

GNU Gloabalの導入

Macにgtagsをインストールする

coc.nvimで大体は事足りるが、定義ジャンプはGTAGSを使ったほうが追いやすい場合があるので、導入する。

参考:http://blog.matsumoto-r.jp/?p=2369

公式サイトから6.4のGlobalをダウンロード。最新の6.6では./configureで下記のエラーが出て失敗してしまう。

error: POSIX.1-2008 realpath(3) is required.

やること

cd ~/Downloads/global-6.4
./configure --prefix=/usr/local/global
make
sudo make install

成功すると/usr/local/globalが作られている。/usr/local/globalにはbinディレクトリがあって、その中に実行ファイルがあるので、PATHが通っているところにシンボリックリンクを生成する。

sudo ln -s /usr/local/global/bin/gtags /usr/local/bin/gtags
sudo ln -s /usr/local/global/bin/global /usr/local/bin/global

これでコマンドが実行できるようになっているはずなので、タグを作る。

gtags -v

Vimからgtagsを使えるようにする

denite-gtagsを使う。

github.com

dein.toml

[[plugins]]
repo = 'Shougo/denite.nvim'
hook_add = 'source ~/.config/nvim/plugin_settings/denite.vim'

[[plugins]]
repo = 'ozelentok/denite-gtags'
hook_add = 'source ~/.config/nvim/plugin_settings/denite-gtags.vim'

denite.vim

autocmd FileType denite call s:denite_my_settings()
function! s:denite_my_settings() abort
  nnoremap <silent><buffer><expr> <CR>
  \ denite#do_map('do_action')
  nnoremap <silent><buffer><expr> p
  \ denite#do_map('do_action', 'preview')
  nnoremap <silent><buffer><expr> <C-t>
  \ denite#do_map('do_action','tabopen')
  nnoremap <silent><buffer><expr> q
  \ denite#do_map('quit')
  nnoremap <silent><buffer><expr> i
  \ denite#do_map('open_filter_buffer')
endfunction

denite-gtags.vim

noremap [denite-gtags]  <Nop>
nmap <Space> [denite-gtags]
" 今のファイルの関数などの一覧
nnoremap [denite-gtags]f :Denite -buffer-name=gtags_file -prompt=> gtags_file<CR>
" カーソル下の単語の定義元を表示
nnoremap [denite-gtags]d :<C-u>DeniteCursorWord -buffer-name=gtags_def -prompt=> gtags_def<CR>
" カーソル下の単語の参照先を表示
nnoremap [denite-gtags]r :<C-u>DeniteCursorWord -buffer-name=gtags_ref -prompt=> gtags_ref<CR>

基本的にはcoc.nvimを使っていき、cocでジャンプできない定義をgtagsで試してみると言う感じ。composerでインストールしたパッケージなどはcocでジャンプできないことが多く、そんなときに役に立つ。