‘Emacs’ カテゴリーのアーカイブ
2011 年 5 月 23 日 by kmori — Emacs
はじめまして、kmori と申します。最近は主に Ruby/Rails 案件を担当しています。初見で他人の Ruby で書かれたライブラリなどを読むときに便利な rdefs というツールがあります。モジュール、クラス、メソッドなどを単位にファイルの構造を一覧/可視化するコマンドラインツールです。著名なスーパーハッカー青木峰郎さんの書かれた小さな Ruby スクリプトです。ターミナルからこんなかんじに利用します。

rdefs 自体は るびまの添削記事 や 青木日記で紹介されています。これを emacs の anything から利用する anything-rdefs という emacs 拡張 を書いたので紹介します。anything の説明と導入方法の解説は行いません。

rdefs を emacs から利用することで、以下のようなメリットがあります。ただし、私が emacs はウィンドウ分割せずに利用していることもあり、細かくウィンドウ分割された状況での利用は想定していません。
- rdefs の結果を ruby-mode の配色で表示するので見やすい
- 左のウィンドウで定義をプレビューできる(後述のスクリーンキャスト参照)
- anything の絞り込みができる
- 該当行にかんたんに移動できる
インストールと設定方法を説明します。emacs に anything をインストールし、rdefs.rb をパスの通ったところに配置し、実行権限を付与します。rdefs.rb は
で公開されています。
次に anything-rdefs を
からダウンロードし、ロードパスの通ったところに配置します。そして、dot.emacs などの設定ファイルに以下の内容を追記します。
(require 'anything)
(require 'anything-rdefs)
(setq ar:command "/path/to/rdefs.rb")
(add-hook 'ruby-mode-hook
(lambda ()
(define-key ruby-mode-map (kbd "C-@") 'anything-rdefs)))
(setq ar:command "/path/to/rdefs.rb") のところは rdefs.rb までフルパスで指定して下さい。Mac だと emacs がログインシェルの PATH を引き継がないことがあるらしいのでフルパスで指定するようにしました。
あとは、ruby-mode で開いているバッファで Ctrl-@ を押下すれば上の画像のようなウィンドウが表示されます。スクリーンキャストも作ってみました。
それから同様に、Sphinx などで利用されている rst ファイルの構造を表示し移動を簡単にする rst-goodies.el というのも書きました。よろしければお試し下さい。
最後に
ディノでは Ruby/Rails 案件を募集しています。6月中旬頃までに小さめのが一つ決まると最高なのですがどうでしょうか。ご検討のほどよろしくお願い致します。
2009 年 5 月 13 日 by tumf — Emacs, Subversion
たかはらです、いつもながら小ネタですいません。
以前、arashoが紹介してくれたdsvn.elを便利に使っていたのですが、先日Subversionを1.6.1にバージョンアップしたらステータスバッファのファイル名の認識を誤るようになり、先頭に空白が一つ入るようになりました。
dsvn.elが古いのか?と思い以下の最新版を試したのですが結果は同じでした。
wget http://svn.collab.net/repos/svn/trunk/contrib/client-side/emacs/dsvn.el
svn statusの出力の解釈に失敗しているようだったので、dsvn.elのファイルの中身を以下のように書き換えたところ動作するようになりました。
--- dsvn.el.orig 2008-12-02 23:46:43.000000000 +0900
+++ dsvn.el 2009-05-13 17:08:30.000000000 +0900
@@ -1041,7 +1041,7 @@
(insert str)
(goto-char svn-output-marker)
(while (cond ((looking-at
- "\\([ ACDGIMRX?!~][ CM][ L][ +][ S][ KOTB]\\) \\(.*\\)\n")
+ "\\([ ACDGIMRX?!~][ CM][ L][ +][ S][ KOTB]\\) +\\(.*\\)\n")
(let ((status (match-string 1))
(filename (match-string 2)))
他に困っている方はどうぞ。
2009 年 2 月 25 日 by hnw — Emacs
Emacs使いの人はサーバ作業の際もEmacsを使うことが多いかと思います。ところが、Emacs使いはvi使いの人より少しだけ気をつけることがあるんです。今回はそんな内容をまとめてみました。
バックアップファイルに注意
Emacsは標準設定だと元のファイル名に「~」を付加した名前でバックアップファイルを作ります。普段は便利な機能なんですが、サーバ上の作業だと困ることもあります。
例えばWebサーバで公開中のPHPファイルを直接編集する場合、index.phpを編集したらバックアップとしてindex.php~ファイルが作成されてしまいます。標準的なWebサーバの設定ではindex.php~はtext/htmlとして出力されてしまいますので、一つ前のバージョンのPHPソースコードが全世界に公開されてしまいます。
また、特定ディレクトリ以下の全ファイルを処理対象にする処理があった場合、バックアップファイルも処理対象になる可能性があります。万一Linuxで/etc/rc.d/rc3.d/S55sshd~なんてファイルを作ってしまうと、トラブルの元になりかねません。
そこで、バックアップファイルを作らないような設定を紹介します。~root/.emacsに次のように書いておけば、rootで起動したEmacsはバックアップファイルを作らなくなります。これでひと安心ですね。念のため、自動保存ファイルも別ディレクトリに作るようにします。
(続きを読む…)
2008 年 12 月 29 日 by hnw — Emacs, zsh
久々にEmacsの話題です。trampって便利ですよね。ローカルのEmacsでssh先のファイルを編集したり、sudoしてroot権限で編集できたりするのは素晴らしいと思います。trampの素晴らしさを知らない人は、下記サイトなどを参照してください。
ところで、zshをログインシェルにしているとtrampが上手く動かない現象に出くわします。具体的には、「/sudo::/etc/hosts」などを開こうとして下記のように怒られることがあります。
tramp: Waiting 30s for remote `/bin/sh' to come up...
apply: Couldn't `exec env 'ENV=' 'PS1=$ ' /bin/sh', see buffer `*tramp/sudo *'
この解決方法ですが、.zshrcや.zsh_profileなどに下記のように書けばOKです。
(続きを読む…)
2008 年 10 月 30 日 by hnw — Emacs, Subversion
今日はEmacsに関する小ネタです。英語の元ネタがusenetのcomp.emacsにありました。
Emacsを使っていると、下記のメッセージが出ることがあります。具体的には、シンボリックリンクをEmacsで開こうとして、なおかつシンボリックリンク先がSubversion管理されている場合に、以下のように質問されます。
"Symbolic link to SVN-controlled source file; follow link? (yes or no)"
これに毎回yesって答えるのがダルい、と思っていたんですが、解決方法を見つけました。.emacsに下記のように書けばOKです。
;; avoid "Symbolic link to SVN-controlled source file; follow link? (yes or no)"
(setq vc-follow-symlinks t)
もしくは、元ネタに書いてある通り、M-x customize-variable RET vc-follow-symlinks RET してもいいと思います。僕は古い人間なのでcustomizeはイマイチ慣れないんですよね…。
元ネタ:how to avoid “Symbolic link to SVN-controlled source file; follow link? (yes or no)”
余談:usenetってまだ機能してるんですね。ビックリです。Googleにリンクを貼るのが正しいのかどうかは疑問ですが、どうするのがベストなんでしょうね…?
2008 年 9 月 26 日 by hnw — Emacs
毎回便利なEmacs Lispをチマチマ紹介していますが、今回ご紹介するsession.elも優れものです。挙動が地味なので素晴らしさが伝わらないかもしれないと危惧していますが、Emacs使いの人は騙されたと思って使ってみてください。
更に言うと、session.el単体だと「少し便利かな」くらいなんですけど、minibuf-isearchと組み合わせると並外れて便利になります。
この組み合わせで使っているEmacs使いは多いと思うのですが、意外と知名度が低い気がしたので改めて紹介します。
(続きを読む…)
2008 年 9 月 19 日 by hnw — Emacs, Mac OS X
今回は普段以上にピンポイントな情報をお届けします。個人ブログでやれば?というくらいに読者を選ぶ話題ですが、気にしないことにします。
早速ですが、私は次のような悲惨な目にあったことがあります。
- MacOSX上で
- OmniOutliner Proをインストールした後で
- Carbon Emacsでバッファ末尾に移動(Command + >)しようとしたら
- ウギャー
上記のように不幸な条件が重なると、Emacsで編集作業をしていたはずなのに、なぜかOmniOutlinerが起動します。こんなイジメを受けたらEmacs使いは生きていけません。きっとOmniの中の人はvi使いなんでしょうね。しくしく。(多分どちらでもないと思いますが)
実は、MacOSXにはserviceという仕組みがあります。これは、セレクションの情報を別のアプリケーションに投げるような枠組みのようです。別のアプリケーションとの連携方法として、起動するアプリケーションをメニューから選ぶこともできますし、キーボードショートカットを割り当てる事も可能です。Command + >でOmniOutlinerが起動したのはこの機能によるものです。(ちなみに、Pro版でしかこの悲劇は起こらなかったと記憶しています)
(続きを読む…)
2008 年 8 月 29 日 by hnw — Emacs
以前、「Emacsでタブ・全角スペース・行末の空白文字列を目立たせる」という記事を書きましたが、その続報です。同じ事をするのにjaspace.elを使った方がいい感じに思えてきたので、紹介します。
jaspace.elというのは、おまけ for GNU Emacsで配布されているEmacs Lispです。jaspace.elの存在はEmacsでタブ・全角スペース・行末の空白文字列 - bobchinの日記で教わりました。ありがとうございます。
以前紹介したやり方に比べ、jaspace.elには下記のようなメリットがあります。
- minor-modeなので、mode-lineがにぎやかになる
- M-x jaspace-mode-offとするだけで、色が着いていない状態に簡単に戻せる
- 空白文字に色を付けるだけでなく、任意の文字を重ねて表示させることもできる
- M-x customizeで設定できる
実際にどんな感じかというと、下記のようになります。背景色が明るい場合と暗い場合とで設定してみました。
(続きを読む…)
2008 年 8 月 5 日 by hnw — Emacs, JavaScript, PHP
Emacs使いなら普通に使ってるよね、ってな素晴らしいEmacs Lispの一つにFlymakeというのがあります。これは名前の通り、Emacsでファイル編集中にon the flyにmake(設定次第で何でも)してくれるEmacs Lispです。makeしてエラーが出た場合には、エラー箇所をハイライトしてくれます。typo などがあれば瞬時に気づくことができますので、開発効率がアップします。

青くハイライトされているのがwarning、赤はエラーの意味です。
PHPもJavaScriptも他の方が設定を公開されていますけど、社内で設定を紹介したところ、「Warningに別の色が付いたりしないんですね」などと言われたので、ムキになってWarningにも色を付けてみました。そんなわけで、他の方の設定とはひと味違うと思います。実はPHPに関して言うと滅多にWarningが出ないので、便利になったかどうかは疑問ですが…。
JavaScriptについてはJavaScript Lintが素晴らしいですね。macportsならport install javascript-lintでインストールできます。「JavaScript Lint - あどけない話」に書いてある通りなのですが、これもWarningに別の色が付くように頑張ってみました。
(続きを読む…)
2008 年 7 月 15 日 by hnw — Emacs, PHP
最近Emacsの記事を書く率が異常に高い気がします。今日は、タブ、全角スペース、行末の連続する空白文字列に色を付ける、という話題です。
それ何度も見たよ、という方も多いかと思いますが、今回はtext-modeでも色がついたよ!という部分が(おそらく)新ネタなので勘弁してください。
まずは設定方法を先に紹介しておきます。.emacsにdotemacs-show-white-spaces.txtの内容を貼付けてください。これで色がつくようになったはずです。
上図が設定後のtext-modeです。色のセンスが非常に悪いので、何とかした方がいいと思います。
(続きを読む…)