clang-renameをVimからサクッと呼び出してC++のリネームを快適にする。
最近Go言語を使ってるんですが、この言語gofmt
やgorename
、goimports
などのツールが充実していて良いですね。
C系の言語にも同じようなツールは存在します。
Welcome to Extra Clang Tools’s documentation! — Extra Clang Tools 5 documentation
この内clang-format
は既にVimプラグインが存在します。
C や C++ のコードを自動で整形する clang-format を Vim で - はやくプログラムになりたい
今回はclang-rename
のVimプラグインを作りました。
clang-rename
は識別子をリネームするツールです。
clang-renameの導入
Arch
公式リポジトリからclang-tools-extra
を入れましょう。
Ubuntu
clang-3.5
以上のバージョンに含まれています。
ただしclang-rename
のバージョンが古いと後述のqualified name
機能が使えません。
この機能を使いたい場合はPPAなどからの導入を検討してください。
clang-rename --help
で-qualified-name
が表示されれば大丈夫です。
使い方
単一ファイルの場合:ClangRenameCurrent
か:ClangRenameQualifiedName
を使えば用が済むでしょう。
{new_name}
を省略した場合は入力プロンプトが表示されます。
ClangRenameOffset [{offset} [{new_name}]]
オフセットを指定してリネームします。
例えばファイルの先頭のオフセットは0です。
-1
を指定すると現在のカーソル位置をオフセットとして扱います。
ClangRenameCurrent [{new_name}]
カーソル位置のシンボル名を変更します。
内部でClangRenameOffset
を実行しています。
ClangRenameQualifiedName [{qualified_name} [{new_name}]]
シンボル名を指定してリネームします。
このコマンドを使うにはclang-rename
が-qualified-name
オプションをサポートしている必要があります。
ClangRename [...]
引数によって動作が変わります。
0個か1個ならClangRenameCurrent
が実行されます。
2個ならClangRenameQualifiedName
が実行されます。
その他
<Plug>(clang_rename-current)
ClangRenameCurrent
のキーマップg:clang_rename#flags
clang-rename
の引数g:clang_rename#compile_flags
clang-rename
が解析するときに使うコンパイルオプション(-std=c++11
とか)
終わりに
実はclang extra tools
には標準でVimとEmacs向けのスクリプトが付属してます。
ですが、微妙に使いづらかったので、このプラグインを作りました。