概要
各項目は、それぞれの参考記事の方が内容が詳しかったり、より便利にできる方法が書いてある。
ここでは、基本的な使い方と最低限やっておきたい設定を書いていきつつ、より良い環境への道標を残すことを目的とする。
記事としての体裁は最低限整えてあるが、口頭説明の資料という立ち位置にある。
また、対象環境はUbuntuとする。
ctags
定義元に飛ぶ時にいちいちgrepなんてしていられない!
IDEみたいにVimにも定義元に飛ぶ機能がある。
この機能はctags
というコマンドに切り出されている。
インストール
sudo apt-get install exuberant-ctags
ctagsの設定
ユーザディレクトリに設定ファイルを配置すればctags
コマンドを打つだけでいつものオプションがついた状態にできて便利。
--append=no--recurse=yes--sort=yes--tag-relative--exclude=*.js
かわいそうだけど、自分が触る範囲ではJavaScriptのファイルを除外しないと重すぎてやばいことになるから除外している。
ここはもっと良い感じにできるはず。
使い方
通常は、プロジェクトのルートにてctags
コマンドを実行するだけで準備が整う。
実行したディレクトリにtags
フィアルが作成される。
このファイルに、クラス名やメソッド名の定義元情報が記載される。
Vimにて、定義元に飛びたいクラス名とかメソッド名とかにカーソルが載った状態で<C-]>
で定義元に飛ぶことができる。
(ちなみに、<C-o>
でジャンプを戻る、<C-i>
でジャンプを進むことができる。)
+α
ctagsでは型を良い感じに考慮してくれているわけではないので、同じ名前のメソッドが複数のクラスにて実装されている時に困る。
デフォルトの<C-]>
では、tags
の中で最初にマッチした場所[要出典]へ飛んでしまう。
勝手に1つ目に飛ぶのではなく、選択させてほしい。
そういう時は、g<C-]>
を使う。
マッピングを変えておけば忘れることもなくて便利。
nnoremap<C-]>g<C-]>
より便利な使い方
このままでは、手動でctags
コマンドを実行しないかぎり定義情報がが更新されないため、何らかのタイミングで実行してあげる必要がある。
そこまで自動でやる場合は参考記事へ。
参考
gitで変更がある行を簡単に知る
IDEのエディタでは、変更があった行に印がついて簡単にわかるようになっている。
これはVimでもプラグインを入れれば実現できる。
インストール
# NeoBundleを使う場合
NeoBundle 'airblade/vim-gitgutter'
# deinを使う場合
call dein#add('airblade/vim-gitgutter')
使い方
何もしなくてOK。
行番号の左側に表示が出るだけ。
どこが編集されたのか、ぱっとわかって地味に便利。
表示 | 意味 |
---|---|
+ | 追加された行 |
~ | 編集された行 |
- | 行の間が削除された |
参考
gitのdiffをVim上で見つつ編集する
編集中、変更前の状態が見たかったり、特定の部分だけ元に戻したくなったりする。
こういう時にぱぱっとVim上だけで綺麗にdiffを見たり、別の歴史からコピーしてきたりできる。
インストール
# NeoBundleを使う場合
NeoBundle 'tpope/vim-fugitive'
# deinを使う場合
call dein#add('tpope/vim-fugitive')
使い方
作業中のdiffを見るときは:Gdiff
とコマンドを実行するだけ。
左右に分割され、変更前と変更後を同時に見ながら編集ができる。
この時、変更箇所が圧倒的に見やすく、ファイルを保存するたびに表示が更新され、リアルタイムでdiffを見ながら作業できる。
まるでIDEのdiffモードのような感覚。
プラグインの他の機能
例えば:Gdiff master
と実行すると、現在のファイルの状態とmasterを比較することもできる。
:Gblame
を実行するとVim内でgit blame
が見れ、普通に実行した時よりも視認性が大幅に向上する。
blame中に特定の行でエンターを押すと、その行を変更したコミットに飛ぶことができる。
変更の意図を負う際に非常に役に立つ。
参考
簡単にコメントアウト/解除する
IDEには普通は付いている機能。
手動でコメントにするのはバカバカしい。
インストール
# NeoBundleを使う場合
NeoBundle 'tpope/vim-commentary'
# deinを使う場合
call dein#add('tpope/vim-commentary')
使い方
デフォルトではgcc
にマッピングされている。
ノーマルモードでgcc
を押すたびにコメントアウト/解除が入れ替わる。
複数行選択してからgc
で、複数行のコメントアウト/解除の入れ替えができる。
参考
Vimの正規表現意味不明だからPerlの正規表現が使いたい
本当に覚えにくいし地味に違って辛い。
インストール
# NeoBundleを使う場合
NeoBundle 'othree/eregex.vim'
# deinを使う場合
call dein#add('othree/eregex.vim')
使い方
検索
/
の代わりに:M/
を使う。
MはMatchのMと覚えれば良さそう。
置換
:s//
の代わりに:S//
を使う。
今回は
ひとまずここらへんまでで