IntellijのVimを.ideavimrcでカスタマイズする

IntellijでもVimキーバインドが利用できる。Vimmerの私でもIntellijが使えるのはかなり再現度の高いVimキーバインドがあるおかげだ。

Intellijインストール時に最初にIdeaVim入れます? みたいなこと聞かれるんで、そん時に入れれば再現できるんだが、デフォルトでは検索してもハイライトされなかったりと微妙。

しかし.ideavimrcを入れればこの辺り設定できる

" 検索をファイルの先頭へ循環しない
set nowrapscan
" 小文字で検索したときに大文字小文字を無視
set smartcase
" 検索結果をハイライト
set hlsearch
" 不可視文字を表示する
set list

こんなのを作ってdotfilesあたりに.ideavimrcを入れておいてシンボリック貼るで完璧

ln -s dotfiles/.ideavimrc .ideavimrc

このファイルGithubに上げといたので使ってみて

takinoue/dotfiles · GitHub

Intellijでmonokaiなどのカラースキーマを利用する

IntellijでもVimのように好きなカラースキーマを設定できる。設定は簡単で設定ファイルをダウンロードしてきて、IntellijのFileのImport Settingsからjarファイルをインポートするだけ。

y3sh/Intellij-Colors-Sublime-Monokai · GitHub

インポート後適用されていなければEditorのColors & FontsからScheme nameでインポートしたカラースキーマを選択する。ちなみに同じMonokaiでもたくさんあるんだけど、ここで紹介しているSublimeMonokaiがおすすめ。検索した時のハイライトが黄色で見やすい。

できればMolokaiがいいのだがよくわからない。

Intellijで関数名や演算子のスペースの入れ方を設定する

例えば関数の後ろの括弧にスペースを入れたいとか、演算子の間にスペースは入れたくないとか人によってこだわりがあると思うが、Intellijではそのあたりの細かい設定もきちんと出来る。

Editor/Code Styleと入って行くと言語毎にその辺りの設定ができる

f:id:hoge:20150129212710p:plain

私はJavaScriptのスペース配置はこのように設定している

Gradleを使ってjarパッケージを作成する

コードはIntellijでGradleを使ったプロジェクトを作成する - hoge日記を使ってGradleのコマンドでjarパッケージを作成してみる

単純なコンパイル

いわゆるコンパイルはこれ

gradle compileJava

成功するとこんなメッセージが出る

BUILD SUCCESSFUL
Total time: 19.756 secs

jarパッケージを作成

このようにbulid.gradleを記述する。jarのあたりがMainClassの設定とかパッケージを内包させるかなどの設定を行っている。

apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.http-client:google-http-client:1.19.0'
}
jar {
manifest {
attributes 'Main-Class' : 'Hajimete'
}
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}

jarファイルを作成

gradle jar

生成されたファイルはbuild/libに格納されているので実行する

java -jar hoge3-1.0.jar

example.comの結果が出力されれば成功。
Javaマルチプラットフォームで実行可能なので、ライブラリを内包すればどこの環境でもJavaさえインストールすれば動く。実行する側のハードルは非常に低いのが好き。

Thanks

IntellijでGradleを使ったプロジェクトを作成する

IntellijでGradleを使えるようにする所までを目指す

Gradleのインストール

$ brew search gradle
gradle     gradle110  gradle112  gradle16   gradle18   gradle20   gradle21

今回はgradle21をインストールしてみる

brew install gradle21

IntellijでGradleプロジェクトを実行

プロジェクトの作成は簡単でGradleを指定するだけ。自動的にファイルが生成されるがsrcディレクトリが生成されないので、src/main/javaディレクトリを自分で作ってそこに置いた。

クラスファイルを作成

google-http-java-client を使用するサンプルコードを参考にさせてもらってこんなクラスファイルを設置。

import java.io.IOException;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
public class Hajimete
{
public static void main(String[] args) throws IOException {
HttpTransport httpTransport = new NetHttpTransport();
try {
HttpRequestFactory requestFactory = httpTransport.createRequestFactory();
GenericUrl url = new GenericUrl("http://www.example.com/");
HttpRequest req = requestFactory.buildGetRequest(url);
HttpResponse res = req.execute();
try {
System.out.println(res.getStatusCode());
System.out.println(res.getContentType());
System.out.println(res.parseAsString());
} finally {
res.disconnect();
}
} finally {
httpTransport.shutdown();
}
}
}

build.gradleを設定

google-http-java-client 入門 - ひだまりソケットは壊れないを参考にしてbuild.gradleに必要な記述を追加

apply plugin: 'java'
sourceCompatibility = 1.5
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.http-client:google-http-client:1.19.0'
}

これでメニューからRunを選択して実行すればhttp://example.comの内容が出力されるようになっているはずである。

AndroidとUSBでシリアル通信をする

AndroidをUSBキーボードにできないかと調査していたらこんな資料を発見した。AndroidとPCとの通信について限定ではないが何か足がかりになるかもしれない。

Androidをキーボードとして認識させることで、テンキーとして利用したり、キー入力マクロなどを作れるのではないかと考えている。

特定の文字列が含まれるファイルを検索して自動的に置換するコマンド

egrepでファイル内を検索しパイプとxargsでsedに渡し置換している。左辺はfindなどを使ってファイル名で置き換えといったこともできるし、オプションの-fを使えば現在のディレクトリ以下のファイル全てを置換といったこともできるだろう。

egrep -rl 'test' . | xargs sed -i '' 's/test/hoge/g'

Gitで特定のファイルの変更履歴や特定の期間での差分を一覧にする

変更履歴

まずこれで変更履歴がざっと一覧にできる

git log -p filepath

特定ファイルの任意のコミット間の差分

特定ファイルの差分を出すこともできる。これはよく使うと思う。

git diff <commit>..<commit> filepath

試行

例えば特定のコミットから過去の特定のコミットの差分を見たいときはこのような感じになる

git diff bca7cd0..5545350 Gemfile

これ昔どこかで試したからできるはずだと思うがブランチ間も超えられるはず。

既に運用中のコードに何度も手を入れていくとバグが発生するが、そのようなケースでは現行動いているコードからバグを探すよりも、正常に動作していた時との差分をとって変更点に問題がないか調べる方法が素早くデバッグできる。こういうGitのDiffを使えば楽にそれが実現できるので活用されたし。