VimをC / C ++ IDEとして使用する

こんにちは、Habrahabr。 私の名前はAlexeyです。組み込みオペレーティングシステムの開発に携わっています。



今日は、VimをC / C ++プロジェクトのIDEとして使用する方法についてお話します。



私がC / C ++にVimを使用しているという事実にもかかわらず、推奨事項の多くは非常に一般的であり、どのプロジェクトでも使用できます。



最初のステップ



まず、プロジェクトの設定を保存できる場所が必要です。 Global .vimrcは、多くのプロジェクトがあり、それらは異なるため、それぞれに固有の設定があるため、私たちには適していません。



Vimにはus- exrcに適したオプションがあります。 彼女はvimに、現在の作業ディレクトリで追加の.vimrcを探すように指示します。 したがって、各プロジェクトのルートに特定の設定を持つ1つのファイルを作成できます。



vimは実行元のディレクトリから.vimrcをマウントするため、いくつかのセキュリティ対策を講じ、 セキュアオプションを設定することをお勧めします。 基本的に、外部.vimrcがファイルに何かを書き込んだり、シェルコマンドを実行したり、作成されたマッピングを表示したりすることを防ぎます。



一般に、メインの.vimrcに次の2行を追加する必要があります

set exrc set secure
      
      





プロジェクト固有の設定



各プロジェクトのオプションを個別に保存する機会を得た後、なぜそれをしないのですか。



すべてのプロジェクトには、同じインデントに関する独自のルールがあるため、プロジェクトのルートにある.vimrcに必要な設定を配置するだけです。

 set tabstop=4 set softtabstop=4 set shiftwidth=4 set noexpandtab
      
      







さらに、行を110文字以内に収めようとしています。 しかし、それは非常に具体的であり、コンテキストに大きく依存しているため、私は(vimであっても)エディターに行を分割するなどの重要な問題を任せることはできません。 ただし、vimは目的の列を強調表示するだけで役立ちます。

 set colorcolumn=110 highlight ColorColumn ctermbg=darkgray
      
      





ファイルタイプの定義



デフォルトでは、Vimはすべての.hファイルがC ++であると想定します。 しかし、私のプロジェクトのいくつかは純粋なCで書かれています。したがって、ファイルタイプをCにしたいと思います。さらに、プロジェクトでdoxygenが使用されるので、vimで非常にクールなdoxygen強調表示をオンにしても構いません。



ローカルの.vimrcに数行を追加するには:

 augroup project autocmd! autocmd BufRead,BufNewFile *.h,*.c set filetype=c.doxygen augroup END
      
      







パス変数の設定



vimには、カーソルの下に名前があるファイルを開く素晴らしいgfコマンド (および関連コマンド )があります。 これは、ヘッダーファイルをナビゲートするときに非常に便利です。



デフォルトでは、vimは/ usr / includeだけでなく現在のフォルダー内のファイルも参照します 。 ただし、ほとんどすべてのプロジェクトには、他のフォルダーに保存されているヘッダーファイルがあります。 したがって、 パス変数を設定する必要があります。この変数には、検索用のフォルダーのリストが含まれ、コンマで区切られています。

 let &path.="src/include,/usr/include/AL,"
      
      





ご注意


Javistsはincludeexprオプションに注意を払う必要があります。 文字列をファイル名に変換するために使用される式が含まれています。 次の行は、 gfのすべてのポイントをスラッシュに置き換えます。 したがって、import'amにジャンプすることが可能です。

 set includeexpr=substitute(v:fname,'\\.','/','g')
      
      





自動補完



Best (非推奨。現在、私はYouCompleteMeを使用しています。詳細は私の投稿を参照してください)私が見つけたC / C ++コード補完用の優れたプラグインはclang_completeです (インストール手順については、プラグインのページを参照)。



clangを使用してアドオンのリストを生成します。 また、CおよびC ++(さらに2、3の言語)でも正常に機能します。



clangがヘッダーファイルのあるフォルダーについて知るためには、プロジェクトのルートにある.clang_completeファイルに-Iおよび-Dフラグを追加する必要があります。 その後、「。」のときにclang_completeが自動的に呼び出されます。 または「->」。



ヒント


パスオプションがすでに入力されている場合、次の簡単なキーの組み合わせを使用して、Iフラグのリストを簡単に挿入できます。

 "='-I'.substitute(&path, ',', '\n-I', 'g')<CR>p
      
      







その他のclangプラグイン



Clangは単なるコンパイラーではなく、分析とコード操作に役立つ一連のライブラリーでもあります。 したがって、これはさまざまなプラグインの非常に優れた基盤です。 そのため、近い将来、それに基づいた多くのプラグインが期待できます。



ナビゲーター



プロジェクトツリーを表示するには、個々のプラグイン(たとえば、 NERDツリー )または組み込みのnetrwを使用できます。



vimコマンドモードから直接ファイルを選択するのは非常に快適なので、どの方法も使用しません。 ( wildmodelongest:list,full



と、vimは適切なファイルを通常のシェルとして表示します)



ビルドシステムのセットアップ



編集とファイルナビゲーションを理解したら、プロジェクトをビルドできます。 Vimにはmakeコマンドがあります。 デフォルトでは、現在のディレクトリでmakeを実行し、出力のエラーを解析します。



実行する実際のコマンドはmakeprgに保存されます 。 プロジェクトが別のフォルダーでビルドされている場合、他のmakeオプションを使用している場合、または別のビルドシステムを使用している場合でも、 makeprgを変更してこれを表示するだけです。

 set makeprg=make\ -C\ ../build\ -j9
      
      







その後、 :make



入力するだけでプロジェクトをビルドできます。

しかし、これでは十分ではないため、このコマンドを不要なボタンの1つに掛けることができます。 例:

 nnoremap <F4> :make!<cr>
      
      





(「!」は最初のエラーへのジャンプを防ぎます)



ランチャー設定



プロジェクトを組み立てた後、それを実行するのが論理的です。 Vimは任意のプログラムを実行できます。そのためには、コマンドモードで名前の前に感嘆符を追加するだけです。 だから、私の超大型プログラムを実行するには、次のように入力する必要があります:!./my_great_program







もちろん、これも単純化する必要があります!

 nnoremap :!./my_great_program<cr>
      
      







バージョン管理システム



vimはコマンドラインへの直接アクセスを提供するため、これらのタスクに特別なプラグインを使用せず、シェルから直接git-treeを管理します。



ただし、さまざまなバージョン管理システムを操作するための優れたvimプラグインが多数あることに注意してください。

たとえば、 fugitive 。 gitを使用している場合、逃亡者のwimcastを絶対に確認する必要があります。



忘れられたアイテム:デバッグ



私はコマンドラインgdbに慣れており、オペレーティングシステムの仕様によりデバッガでデバッグすることはほとんど不可能であるため、過去1年間でgdbを一度だけ開始しました。 基本的に、私はすべてのプロジェクトを定期的なプリントと一滴の頭脳でデバッグします。 したがって、vimにはデバッガに似たものは何もありません。



ただし、gdbとvimを統合するためのプラグインがいくつかあると言わざるを得ません。 たとえば、 clewngdbvim



まとめ



一連の簡単な操作の後、vimはまともなIDEに変わりました。 vimであなたの生活を楽にし、周囲のツールとより良く統合できるようにする追加の設定について聞いてうれしいです。



All Articles