2014年10月5日日曜日

Sublime Text 2でC/C++のコード整形(Ubuntu 14.04 LTS)


前回の記事の続きです。前回はSublimeClangを使って補完機能と文法チェック機能を追加しました。
この記事はSublime Text 2でC/C++のコードを整形する方法を紹介します。これは長いコードを書いている際や、途中でif文やfor文の中括弧がどこにかかっているのかわからなくなってしまったときに役立ちます。
前回のSublimeClangよりも手軽に導入できるので、さっそくやってみます。

手順1

コード整形に必要なファイルをダウンロードしてきます。
まずclang-formatをダウンロードしてきます。これが今回の機能を使うための根幹になるバイナリファイルです。
LLVM Download Page
http://llvm.org/releases/download.html
Ubuntu 14.04用の物をダウンロードしてきます。
ダウンロードしてきた「clang+llvm-3.5.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz」を解凍します。コード整形に必要なファイルはclang+llvm-3.5.0-x86_64-linux-gnu/bin/にあるclang-formatだけですので、これだけを解凍してもらって構いません。
解凍したclang-formatを/usr/local/binの中にコピーします。
コピーしたら確認のため、ターミナルを開いて、「clang-format -help」と入力してみてください。オプションの説明がつらつら出てきたら問題無いです。


次にSublime Text 2に導入するパッケージをダウンロードします。今回のパッケージはPackage Controlにはありませんので直接ダウンロードしてきます。

https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-sublime.py
これを~/.config/sublime-text-2/Packages/Userにコピーします。

手順2

Sublime Text 2を起動してキーボードショートカットを追加します。メニューから「Preferences」→「Key Bindings - User」を選択します。そして次の一行を追加してください。すでに何かのショートカットを追加している場合、追加する行の前の文章のあとにコンマを打ち忘れないように。
{ "keys": ["ctrl+shift+c"], "command": "clang_format" } 

使い方

今までどおり、コードを書いてコードを整形したい箇所を選択してください。すべてについて整形したい場合は「Ctrl+A」で全選択します。そしてそのあと先ほど設定したショートカット「Ctrl+Shift+C」で整形します。大げさに汚くしたコードを整形した結果を下に示します。


インデントが綺麗になっているのはもちろん、変数と変数の間に空白がひとつ打たれたり(プログラムの5行目)、12行目にかけての不自然なcoutの改行など色々修正してくれています。

更に極める

今の状態でも十分な気がしますが、プログラムが綺麗だと感じる書き方はひとそれぞれなはず。上の例だとwhileとあとの条件文を書くカッコとの間に空白はいらないな。とか
これを細かく設定することができます。
ホームディレクトリに「.clang-format」の名前で設定ファイルを作成します。
設定については下記のサイトを参考にしてください。
ClangFormatスタイルオプション
http://algo13.net/clang/clang-format-style-oputions.html
サイトに書いてあるBasedOnStyle:をLLVM、google、Chromium、Mozilla、WebKitのいずれかにするだけで大体のスタイルを決定できます。
これを「.clang-format」に一行ずつ記述していきます。
先ほどのサイトにはそれぞれのオプションを1つずつ指定できるような設定項目が記載されてますので、これを参考に自分のスタイルにフィットするように調整してください。


まとめ

2つ記事にわたってSublime Text 2のC/C++の開発環境を整える設定方法を書きました。
確かに設定は面倒ですが、もしかしたら開発の進捗に大きく差がでるかもしれません。
私はこれらの設定方法を確立するのにかなりの時間を費やしてしまいましたので、そういった意味では卒研の進捗に大きな差が出てしまったかもしれません。

Sublime Text 2は標準でも十分に便利な機能がたくさん搭載されていますが、さらに魅力的な機能を追加することができるのがいいですね。情報はemacsより少ないですが。
また便利なパッケージがありましたら紹介したいと思います。

Sublime Text 2でC/C++の開発環境を強化する(Ubuntu 14.04 LTS)

こんにちは。
今回はSublime Text 2の拡張機能である「SublimeClang」を使ってC/C++のプログラミングを楽にしようという記事です。
研究室ではもちろん、つい最近ではサーキットの1年生までがemacs、emacs言い出しているもんで悲しいです。Sublime Text 2のほうが先進的で使いやすいのに...
今回の記事を読んでちょっと使ってみようかなと思っていただければ幸いです。

前準備

今回、動作を確認した環境は
Ubuntu 14.04 LTS 日本語Remix
Sublime Text 2

Sublime Text 2に関してはお決まりのPackage Controlを入れていること
以下Sublime Text 2をST2と記す。

手順1

ST2でパッケージコントロールを呼び出して「Package Control: Install Package」を選択し、「SublimeClang」と入力してパッケージを導入。



これで終わり!と言いたいところですが、一筋縄ではいかないようです。Linuxでは下の写真のようなアラートがでます。Macでは出ないのに...

 

この解決方法はすでに他のサイトで紹介されています。これに関してはとてもわかり易いサイトがありましたので、そちらの方を参考にしてください。
Sublime TextでC++の開発環境を作る
http://qiita.com/nagakenjs/items/e06911f4ff9e9871cd2b
このサイトの”エラー対応”のところを参考にして一行ずつ確実にコマンドを入力してください。

手順2

すべてのコマンドを入力し終えたら1回ST2を閉じて再び起動させます。
すると先ほどのエラーのアラートは出なくなりましたが、次には写真のようなエラーが下のウィンドウに出ます。


どうやら'c++config.h'が見つからないようなので、こいつの場所を教えてやる必要があるみたいです。したがってSublimeClangの設定ファイルをいじります。設定ファイルは下のようにメニューから引っ張ってくるか、ターミナルなりファイラーなりでこの場所にアクセスしてください。
~/.config/sublime-text-2/Packages/SublimeClang/SublimeClang.sublime-settings


このファイルの266行目にかけてのオプションに一文追加します。

    "options":
    [
        "-isystem", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/include/",
        "-isystem", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/include/c++/4.2.1",
        "-F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/",
        "-isystem", "C:\\MinGW\\lib\\gcc\\mingw32\\4.7.0\\include",
        "-isystem", "C:\\MinGW\\lib\\gcc\\mingw32\\4.7.0\\include\\c++",
        "-isystem", "C:\\MinGW\\lib\\gcc\\mingw32\\4.7.0\\include\\c++\\mingw32",
        "-isystem", "C:\\MinGW\\include",
        "-isystem", "/usr/include",
        "-isystem", "/usr/include/c++/*",
        "-isystem", "/usr/include/x86_64-linux-gnu/c++/4.8/",
        "-Wall"
    ],

277行に追加したらSublimeClang.sublime-settingsを保存。これで先ほどのエラーは消えると思います。

実際に使ってみる

SublimeClangでの補完は変数名や関数を定義している場合、該当している変数、関数をサジェストしてくれます。


またClangの文法チェックについては、例えば定義していない変数(図中ではsum)があれば、そのファイルを保存したタイミングで下のように指摘してくれます。



補足

メイン文と関数を別々のファイルで書いてるときに、関数ってどこで定義したっけ?ってときがありますよね。そんなときは右クリックで「Go to Definition」と「Go to Implementation」を使います。「Go to Definition」でそれが宣言されている箇所にジャンプし、「Go to Implementation」で実装されている箇所にジャンプします。変数に関しても同様です。

この機能に関してはショートカットキーがあるのですが、ショートカットキーがUbuntuシステムのHUD (Head Up Display)に使われるAltキーと干渉してしまうので、下のサイトの用に変更するといいです。
ぬるグラマー向け開発環境構築
http://qiita.com/disktnk/items/7e499ddf08935e191bc7

また標準ではC++11の書式には対応しておらず、エラーがでます。これを解決するにはSublimeClang.sublime-settingsを書き換えます。146行目にある"additional_language_options":以下のコメントアウトに従います。149行目の[]にオプション"-std=c++11"を追加するだけです。


長くなりましたが以上です。あとはひたすらコードを書くだけですね。
次はST2でC/C++のコードの自動整形ができるようにする記事を書こうかなと思っています。
書きました→http://cirkitrwrc.blogspot.jp/2014/10/sublime-text-2ccubuntu-1404-lts_5.html
最後まで閲覧していただき、ありがとうございました。