phpのエディタ選ぶのにvimだとどうするのか聞かれたのでメモを残す。
- 基本的な使い方はググれば載ってるので書いてないです。
- mac専用のpluginも書いてるかも。
- vimの使い方って書いたけどただのpluginの紹介かも。。。
コードフォーマット
フォーマットをかけたい範囲を選択して=
を押下。
ファイル全体に適用したいならggVG=
でOK
タグジャンプ
メソッド名等から定義先へジャンプしたい場合はvimだけだとgrep使うしかないのでctgasとかgtagsを使う。
macの場合はbrewでinstallできる。
brew install ctags
tagを作成する
ctags -R
これだけでタグジャンプが使える。
phpの場合
ctags -R --regex-php="/^[ \t]*const[ \t]+([a-z0-9_]+)/\1/d/i"
phpの場合は上記のようにするとconstとかもジャンプできる。
タグジャンプの仕方
- ジャンプしたい単語にカーソルを合わせて
ctrl + }
でジャンプ。 - 戻りたい場合は
ctrl + o
で戻れる
メソッドがどこで使われているか
grepでもできるんだけど今回はGNU GLOBAL(gtags)を使ったやり方を書きます。
* 対象の言語が対応しているかチェックしてください。
http://www.gnu.org/software/global/global.html
http://uguisu.skr.jp/Windows/gtags.html
何ができるかは上記のサイト読んでください。
いつの間にか色んな言語が追加できるようになってるみたいですね。
この記事書いてから気づいた。。。
gtagsについては後で全部書き換えるかも知れないので以下のサイトを先に読んでください。
参考:http://qiita.com/sona-tar/items/672df1259a76f082ce42
↑後でやってみます。
macの場合はbrewでinstallできる?
brew search であったから多分できる。試してはない。
brew search global
tagを作成する
gtags -v
vim用のplugin導入
NeoBundle 'vim-scripts/gtags.vim'
使い方は以下のサイトが良い感じだった
http://blog.matsumoto-r.jp/?p=2369
使い方というか私のvimrcの設定を貼ります。
" gtags
" 検索結果Windowを閉じる
nnoremap <C-q> <C-w><C-w><C-w>q
" Grep 準備
nnoremap <C-g> :Gtags -g
" このファイルの関数一覧
nnoremap <C-l> :Gtags -f %<CR><CR>
" カーソル以下の定義元を探す
"nnoremap <C-j> :Gtags <C-r><C-w><CR><CR>
map <C-j> :GtagsCursor<CR><CR>
" カーソル以下の使用箇所を探す
nnoremap <C-k> :Gtags -r <C-r><C-w><CR><CR>
" 次の検索結果
nnoremap <C-n> :cn<CR>
" 前の検索結果
nnoremap <C-p> :cp<CR>
上記の設定ができていれば単語にカーソルを合わせてctrl + k
で利用箇所の一覧が出てきます。
強力な置換機能
リファクタリング等で使う場合はthinca/vim-qfreplace
というプラグイン入れると便利です。
先ほどの利用箇所の一覧がquickfix のウィンドウにある状態で:Qfreplace
と打ち込むと新しい画面(バッファ)が出てきます。ここで好きな置換等で書き換えてwq
で抜けると変更した箇所が反映されます。
メソッド名の置換、引数の変更等が捗りますね。
参考:http://blog.supermomonga.com/articles/vim/qfreplace-benri.html
ちなみに当然、ctagsとgtagsの両方を使う必要はないです。
私はphp以外の言語用に両方はいってるから紹介しただけなので使いやすいものを選べば良いと思います。
ファイル同士のdiff
vimdiff a.txt b.txt
詳細は以下で
参考:http://nanasi.jp/articles/howto/diff/merge_diff.html
ちょっとターミナルの作業をしたい
:shell
上記でターミナルに制御が移ります。
exit
上記で抜けるとvimに戻ってきます。
置換
ファイル全体でhogeをfugaに置換する。
:%s/hoge/fuga/g
置換場所を確認しながら実行する場合はc
をつける。
:%s/hoge/fuga/gc
hitした箇所で以下のように聞かれるので置換するならy
しないで次いくならn
になります。
replace with hoge (y/n/a/q/l/^E/^Y)?
参考:https://github.com/osyo-manga/vim-over
上記のpluginを入れるとビジュアル的にできるようです。
SublimeTextみたいな複数カーソル
NeoBundle 'terryma/vim-multiple-cursors'
:NeoBundleInstall
参考:http://qiita.com/sachin21/items/cfcb81bf4d1073429b68
上記に画像付きで説明があります。
コーディング規約のチェック
NeoBundle 'git://github.com/scrooloose/syntastic.git'
:NeoBundleInstall
設定は以下を参照すると良い。
参考:http://yuzuemon.hatenablog.com/entry/2014/08/13/135412
他にもたくさんある
書ききれないので私がphpで使ってるpluginを列挙だけしときます。
railsやjavascriptとかも含むともっとある。。。
" テキストオブジェクト拡張
NeoBundle 'git://github.com/tpope/vim-surround.git'
"入力補完機能
NeoBundle 'git://github.com/Shougo/neocomplcache.git'
"vim 用の統合ユーザインターフェース
NeoBundle 'git://github.com/Shougo/unite.vim.git'
" 非同期処理
NeoBundle 'git://github.com/Shougo/vimproc.git'
" 整形
NeoBundle 'git://github.com/tsaleh/vim-align.git'
" プログラム実行
NeoBundle 'git://github.com/thinca/vim-quickrun.git'
" SQLの整形
NeoBundle 'git://github.com/vim-scripts/SQLUtilities.git'
" ファイラー
NeoBundle 'Shougo/vimfiler'
" indentの見える化
NeoBundle 'nathanaelkane/vim-indent-guides'
" デバック
NeoBundle 'joonty/vdebug'
" git連携
NeoBundle 'git://github.com/tpope/vim-fugitive.git'
" スニペット
NeoBundle 'Shougo/neosnippet'
” スニペット集
NeoBundle 'Shougo/neosnippet-snippets'
” スニペット集
NeoBundle 'git://github.com/honza/snipmate-snippets.git'
" 見出し一覧
NeoBundle "Shougo/unite-outline"
" git の変更点見える化
NeoBundle 'airblade/vim-gitgutter'
" クリップボード連携
NeoBundle 'airblade/vim-gitgutter'
" html サポート
NeoBundle 'mattn/emmet-vim'
" Dash連携
NeoBundle 'rizzatti/dash.vim'
:wq!