no_picture

ruby-end マイナーモード - emacs

ruby-end モードをいれました。 ruby で end を自動挿入してくれるマイナーモードです。 似たようなマイナーモードとしては ruby-elecric-mode があります。 この子は他にもいろいろ機能をもっています。end の補完も機能のひとつです。 個人的にはかなか挙動が使いづらく end の補完の処理だけ利用していました。 また、emacs24 では微妙な挙動をしたりするそうです。 - [参考: Emacs24 で ruby-electric的なruby-modeを実現するには - メモとか] ruby-end は end が挿入されるタイミングが心地良いので試してみています。 インストール epel でインストールできるので M-x package-install で ruby-end で入力でインストールできます。 参考: package.el - EmacsJP 普通は package.el で充分かと思いますが、私は el-get を利用してるので (el-get 'sync 'ruby-end) を設定ファイルに書いて評価しました。 関連 自分の el-get のワークフローについて整理する

no_picture

自分の el-get のワークフローについて整理する

この記事は すごい広島 #12 で書きました。 Emacs のパッケージ管理に el-get を利用しています。 他にもいろいろありますが、どれもしっかりと使いこなせないまま el-get におちついています。 ぶっちゃけ、el-get 使いこなせていません。 使いこなせてないので不安な箇所があったので確認してまとめました。 el-get を使いこなせてないのに、これに落ち着いている理由はDistributed Setup という機能を利用しているからです。 これを使うと インストールしているパッケージがない場合自動でインストールしてくれます。 例えば、helm というパッケージを利用していて、emacsの設定ファイルを git などで共有しているとします。普段利用していない別のマシンで設定ファイルをコピーしてきます。 これで Emacs を起動すると、起動時にエラーが出てしまいます。 もし el-get の Distributed Setup の機能を利用していればインストールしていないパッケージをダウンロードしてくれます。 ドロップボックスで共有している場合は不要なのですが、そういった使い方をしていない場合は有効です。 この方法を使っている場合の設定方法とパッケージの更新方法について書いておきます。 設定方法 その設定方法は (el-get 'sync 'helm) と、書いておきます。 基本的にはこれでOKです。 一緒に yasnippet をインストールしたいのであれば リストにすればよいです。 (el-get 'sync '(helm yasnippet)) たぶんリストにしなくても大丈夫。 (el-get 'sync 'helm 'yasnippet) 別々にやっても大丈夫。 (el-get 'sync 'yasnippet) (el-get 'sync 'helm) すでにインストールしてしまっていて、動作を確認したい場合は el-get-removeコマンドで削除して、再評価することで動作確認できます。 rm コマンドなどで削除してしまった場合は el-get から見ると削除したことになっていないので注意してください。 その場合でも el-get-remove

no_picture

Mac で使える git mergetool をいろいろ試してみる - ediff

Mac で使える git mergetool をいろいろ試してみる - 準備編 の続きです。 ediff は Emacs に添付されているマージツールです。 いつから添付されているのか調べてないですが最近のEmacsであれば標準で使えるはずです。 個人的には一番使いやすいと感じています。 git mergetool から ediff を起動するのはややめんどくさいです。 magitを使用していれば、コンフリクトしているファイルにカーソルを合わせて e を押すと起動できます。こちらのほうは設定いらずで楽ちんでした。 どうしても git mergetool から使いたい場合は git mergetoolでEmacsのediff-merge-files-with-ancestorを呼び出す - 工夫と趣向と分別と。 を参考にするとできました。 具体的には上記の記事で紹介されてる emacsc をclone してきて設定しました。 個人的な使い方の問題で emacsclient への引数を付加したかったので少しいじりました。 ediff を起動するとこのような画面になります。 配色設定を細かくやってないのでみづらいのは気にしないでください。 左が現在のブランチのファイルで、右がマージしようとするブランチのファイルになります。 下部がマージ結果になります。下部は直接編集することもできます。 a を入力すると 左側を選択できて、 b を入力すると右側を選択できて、下部に反映されます。 差分は2行あるのに、まとまってしまって不便に感じますが、どちらをベースするかという選択だと考えると良いことがわかりました。 その後 ! を入力すると細かく差分が表示され n や p で競合箇所を移動して a や b で選ぶことができます。 編集が終了したら q で終了できます。 magit から起動した場合は ステージングされないので注意してください。 再度 e を入力するとやりなおすこともできます。 emacs

no_picture

Ruby の とあるクラスの実装がどこにあるかわからない時の方法 - コードリーディング

広島Ruby勉強会 のネタ探しをしていて、「実装見てなにか面白いネタないかなー。」 って時に使ったコマンドを紹介。 例は Method クラスの実装を探す。 まずは git でソースコードをとってきている場合。 $ git grep 'rb_define_class("Method"' proc.c: rb_cMethod = rb_define_class("Method", rb_cObject); git grep を使います。git grep はサクサクなのでメインの探索方法です。 Emacs上から使うとジャンプも楽チン。 「git リポジトリじゃねーよ」って時は ag を使います。 $ ag 'rb_define_class\("Method"' proc.c 2331: rb_cMethod = rb_define_class("Method", rb_cObject); こちらは行番号とかでます。 ( のエスケープがいります。 ag というのは the silver searcher のことです。こちらも emacs から使う helm-ag というのがあるのでオススメします。 使える正規表現も違うような気がするので凝ったことがしたいならこちらを。 rb_define_class というのは Ruby の C API で クラスオブジェクトを作成します。このあたりに メソッドをクラスに紐づける処理なんかがあったりします。 それでは Happy な ソースコードリーディングを。

no_picture

tmux で copy-mode でのキーバインドについて

tmuxのコピーモードでのキーバインドはデフォルトで emacs like になっています。 なぜか、一部のマシンでのみ vi like になってたので、man tmux をみてみた。 > the default is emacs, unless VISUAL or EDITOR contains ‘vi’. デフォルトは emacs だけど環境変数 VISUAL か EDITOR に ‘vi’ を含んでいれば vi like になるそうです。 環境変数に影響されずに固定したい場合は set-window-option -g mode-keys emacs とか set-window-option -g mode-keys vi とか、書いておきましょう。

no_picture

Macで M-x gdbするとうまく動かない…

まず要点から。 新しめの emacs でMac上で M-x gdb がうまくうごきません。 M-x gud-gdb は動くことがわかりました。 gud-gdbを使う場合はgdb --fullname commandで動かすと良いです。 原因ですが、Macの gdb が古い模様。最近の Emacsに添付されてる gdb は gdb/mi インターフェイス(よくわかってない)でやりとりするようで、一応うごくけどわけのわからぬ動作をするみたいです。 gdbmi Gentoo-Prefix をつかって gdb いれてみたものの run ができませんでした。ツールチェーンまわりはよくわからないのでなんとも言えません。 gud-gdb ですが、これは gdb よりも機能が弱いものの模様です。古いeamcsがこれと同等のもので動いてるのかもしれませんが、調べていません。gdbに比べたら便利な機能は減るかもしれませんが、十分使えそうです。 LLDB/MI みたいなものがあれば良いのでしょうが、よくわかりません。 このあたりはMac使ってて不便なところですね。

no_picture

magit-brame-modeの表示がみやすかった件

共同作業ないし、自分が書いたコードでもここ変更したのいつだっけってことあるとgit blameを利用するんですが、emacs の magit についてる magit-brame-mode がみやすくて感動しました。 git blameがどのようなことをしてくれるのかは github でも特定のファイルを選択したときにもみることができます。 押すとこんな感じ。 すっきりみやすい。 端末で $ git blame conf/50-ruby.el するとこんな感じ。 文字ばっかり。 git-emacsの M-x git-blame-mode だとこんな感じ カラフル。細かい情報はミニバファにでます。そのまま編集できるのはナイスなのかもしれない。(重いですけど magitの M-x magit-blame-mode だとこんな感じ あれ、なんかみやすさが伝わない…。 80列におさまるのは嬉しいですね。 ゆっくりみる分には github が一番いんじゃないかということいわれてしまいそうです。

no_picture

Helmをインストールしてみた

anythingのフォークであるhelmを試してみた。 試した環境は GNU Emacs 24.0.94.1 (x86_64-apple-darwin11.3.0, NS apple-appkit-1138.32) of 2012-03-25 具合がわるくなってしまう設定 (set-file-name-coding-system 'utf-8-hfs) (setq local-coding-system 'utf-8-hfs) utf-8-hfsを設定してるとhelmのロードがおわらなくなった。何かを収集中に無限ループに落ちいる模様。anythingにできて、helmにできないことはまだまだたくさんあるので、しばらくanythingと共存させてみます。