Contents [hide]
はじめに
こんにちは、野村です。
今回は、vimでc/c++を書くのが楽になるプラグイン「a.vim」と「vim-clang」を紹介します。
この環境でしかcやc++を書いたことがないので、他との比較はできないのだけど、少なくとも導入するのとしないのとでは雲泥の差であることは間違いないです。
a.vimの導入
ソースファイル⇔ヘッダファイル間を簡単に行き来できるようにするプラグインです。
↓このページから「a.vim」をダウンロードしてデレクトリ「~/.vim/plugin」に放り込みます。
使い方は、コマンドモードに入って「:A」と打ってEnter。それだけ。
他にも
「:AS」で縦分割で開く
「:AV」で横分割で開く
「:AT」でタブで開く
という芸当ができる。お得です!
vim-clangの導入
c/c++の入力補完をしてくれるプラグインです。
下準備
clangとclang-formatをインストール
管理ユーザになって「clang」と「clang-format」をインストールします(debian系の場合)。
# apt install clang clang-format
deinをダウンロード
deinというのは、vimのプラグインを管理するプラグインです。
配布元は↓ここ
一般ユーザに戻り、deinの設置場所を作って、そこにダウンロード。
$ mkdir -p ~/.vim/dein/repos/github.com/Shougo/dein.vim $ git clone https://github.com/Shougo/dein.vim.git ~/.vim/dein/repos/github.com/Shougo/dein.vim
deinとvim-clangを一気にセットアップ
~/.vimrcにコードを追記
vimの設定ファイル「~/.vimrc」に以下のコードを追記します。
今回はLinuxの場合の例です。Windows、Mac、FreeBSDでは、vimprocの箇所が異なるはず。
"=========
"vim-clang
"=========
" 'Shougo/neocomplete.vim' {{{
let g:neocomplete#enable_at_startup = 1
if !exists('g:neocomplete#force_omni_input_patterns')
let g:neocomplete#force_omni_input_patterns = {}
endif
let g:neocomplete#force_overwrite_completefunc = 1
let g:neocomplete#force_omni_input_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)'
let g:neocomplete#force_omni_input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::'
"""}}}
" 'justmao945/vim-clang' {{{
" disable auto completion for vim-clanG
let g:clang_auto = 0
let g:clang_complete_auto = 0
let g:clang_auto_select = 0
let g:clang_use_library = 1
" default 'longest' can not work with neocomplete
let g:clang_c_completeopt = 'menuone'
let g:clang_cpp_completeopt = 'menuone'
let g:clang_exec = 'clang'
let g:clang_format_exec = 'clang-format'
let g:clang_c_options = '-std=c11'
let g:clang_cpp_options = '
\ -std=c++1z
\ -stdlib=libc++
\ -pedantic-errors
\ '
" }}}
"==========
"dein.vim
"==========
if &compatible
set nocompatible
endif
set runtimepath+=~/.vim/dein/repos/github.com/Shougo/dein.vim
call dein#begin(expand('~/.vim/dein'))
call dein#add('Shougo/dein.vim')
call dein#add('Shougo/neocomplete.vim')
call dein#add('Shougo/vimproc.vim', {'build': 'make'})
call dein#add('justmao945/vim-clang')
call dein#add('Shougo/neoinclude.vim')
call dein#end()
インストール
vimを起動してコマンドモードに入り、
:call dein#install()
これでインストール完了!
使い方
とにかく普通にコードを書いてみてください。
コードの候補が出現したら「Ctrl-p」と「Ctrl-n」で選択すればよいのです。
エラーが出る場合
c++のコードを打っていて(あるのに関わらず)「●●●.hがない」のようなエラーが出る場合は、vimrc内の「g:clang_cpp_options」の値にインクルードデレクトリを追加するとするとうまくいく場合があります。
自分の場合、エラーが消えるまでデレクトリを追加したらここまで膨れ上がりました。
let g:clang_cpp_options = '
\ -std=c++1z
\ -stdlib=libc++
\ -pedantic-errors
\ -I/usr/include/gtk-2.0/
\ -I/usr/include/gtk-2.0/gdk/
\ -I/usr/include/glib-2.0/
\ -I/usr/include/cairo/
\ -I/usr/include/pango-1.0/
\ -I/usr/include/gdk-pixbuf-2.0/
\ -I/usr/include/atk-1.0/
\ -I/usr/include/freetype2/
\ -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/
\ -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include/
\ '
これが解決策として正しいのかは不明。
最後に
以上、プラグイン「a.vim」と「vim-clang」を導入してvimでc/c++を書きやすくする方法を紹介しました。
環境が整うとコードを打つのが楽しくなるもんです。
というわけで、今回はこれにて。
コメント
a.vim プラグインの存在を初めて知り,調べてみました。
a.vimよりvim-altrのほうがよさそうな感じです。
参考: http://labs.timedia.co.jp/2011/07/vim-altr.html
vim-altr には分割で開いたり,タブで開いたりするコマンドはありません。
しかし,わざわざコマンド化しなくても,必要なときに `:split`, `:vsplit`, `tabnew %` して画面を複製してから切り替えれば,事足りそうです。
必要なら,一連のこの操作をキーバインドに割り当ててもよさそうです。
senookenさま、はじめまして。野村です。
何の疑問もなくa.vimを使ってきたのでvim-altrを知りませんでした。
a.vimが不満だった人が作ったプラグインなのですね。
>vim-altr には分割で開いたり,タブで開いたりするコマンドはありません
確かに分割やタブで開くコマンドがなくても困らないかも。
ともかくvim-altrが便利そうなので導入してみます。
ありがとうございました。