vimでc/c++開発環境(a.vim/vim-clang)

はじめに

こんにちは、野村です。

今回は、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のプラグインを管理するプラグインです。
配布元は↓ここ

:zap: Dark powered Vim/Neovim plugin manager. Contribute to Shougo/dein.vim development by creating an account on GitHub.

一般ユーザに戻り、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++を書きやすくする方法を紹介しました。

環境が整うとコードを打つのが楽しくなるもんです。

というわけで、今回はこれにて。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

野村 野村のプロフィール
メインPCはWindows10のVirtualBox上のFreeBSD。Linux/Unixの小ネタを求めて日々右往左往してたりする。

コメント

  1. アバター senooken より:

    a.vim プラグインの存在を初めて知り,調べてみました。

    a.vimよりvim-altrのほうがよさそうな感じです。

    参考: http://labs.timedia.co.jp/2011/07/vim-altr.html

    vim-altr には分割で開いたり,タブで開いたりするコマンドはありません。

    しかし,わざわざコマンド化しなくても,必要なときに `:split`, `:vsplit`, `tabnew %` して画面を複製してから切り替えれば,事足りそうです。

    必要なら,一連のこの操作をキーバインドに割り当ててもよさそうです。

  2. 野村 野村 より:

    senookenさま、はじめまして。野村です。

    何の疑問もなくa.vimを使ってきたのでvim-altrを知りませんでした。
    a.vimが不満だった人が作ったプラグインなのですね。

    >vim-altr には分割で開いたり,タブで開いたりするコマンドはありません

    確かに分割やタブで開くコマンドがなくても困らないかも。

    ともかくvim-altrが便利そうなので導入してみます。
    ありがとうございました。