‘エディタ’ カテゴリーのアーカイブ

RinariのRubyコマンドをRVMで切り替える

EmacsでRubyOnRailsの開発をしている方には、Rinariを使っている方が多いと思います。RinariはEmacsのマイナーモードで、Rails開発に便利な機能を多数提供しています。

Rinariをご存知の無い方は以下の記事を一読してインストールをお薦めします。

emacsとRinariで快適Rails開発!

Rinaiには、Emacsのバッファ内でテストやウェブサーバを立てるような機能があるのですが、このとき利用すRubyコマンドがRVM(RubyVersionManager)と連携していないため、別のバージョンのRubyコマンドが起動してしまいとても不便でした。ずっとターミナルで我慢していたのですが、先日たまたまRVMをEmacs上から制御するrvm.elなるものを見つけてたので、これを利用してRinari上で動くRubyコマンドをRVMで切り替えられるように設定しました。
(続きを読む…)

rdefs を emacs/anything から使おう!

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

dino-blog-1

(続きを読む…)

dsvn.el + subversion 1.6が変だったのでパッチを作りました

たかはらです、いつもながら小ネタですいません。

以前、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)))

他に困っている方はどうぞ。

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はバックアップファイルを作らなくなります。これでひと安心ですね。念のため、自動保存ファイルも別ディレクトリに作るようにします。

(続きを読む…)

zshユーザーが普通にtrampを使う方法

久々に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です。

(続きを読む…)

Emacsでシンボリックリンクを開いたときの質問を消す方法

今日は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にリンクを貼るのが正しいのかどうかは疑問ですが、どうするのがベストなんでしょうね…?

session.el + minibuf-isearchが便利すぎる

毎回便利なEmacs Lispをチマチマ紹介していますが、今回ご紹介するsession.elも優れものです。挙動が地味なので素晴らしさが伝わらないかもしれないと危惧していますが、Emacs使いの人は騙されたと思って使ってみてください。

更に言うと、session.el単体だと「少し便利かな」くらいなんですけど、minibuf-isearchと組み合わせると並外れて便利になります。

この組み合わせで使っているEmacs使いは多いと思うのですが、意外と知名度が低い気がしたので改めて紹介します。

(続きを読む…)

OmniOutliner ProとCarbon Emacsを仲良くさせる方法

今回は普段以上にピンポイントな情報をお届けします。個人ブログでやれば?というくらいに読者を選ぶ話題ですが、気にしないことにします。

早速ですが、私は次のような悲惨な目にあったことがあります。

  1. MacOSX上で
  2. OmniOutliner Proをインストールした後で
  3. Carbon Emacsでバッファ末尾に移動(Command + >)しようとしたら
  4. ウギャー

上記のように不幸な条件が重なると、Emacsで編集作業をしていたはずなのに、なぜかOmniOutlinerが起動します。こんなイジメを受けたらEmacs使いは生きていけません。きっとOmniの中の人はvi使いなんでしょうね。しくしく。(多分どちらでもないと思いますが)

実は、MacOSXにはserviceという仕組みがあります。これは、セレクションの情報を別のアプリケーションに投げるような枠組みのようです。別のアプリケーションとの連携方法として、起動するアプリケーションをメニューから選ぶこともできますし、キーボードショートカットを割り当てる事も可能です。Command + >でOmniOutlinerが起動したのはこの機能によるものです。(ちなみに、Pro版でしかこの悲劇は起こらなかったと記憶しています)

(続きを読む…)

続・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で設定できる

実際にどんな感じかというと、下記のようになります。背景色が明るい場合と暗い場合とで設定してみました。

jasp-dark.png

jasp-light.png

(続きを読む…)

Flymakeのススメ(PHP版 , JS版)

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に別の色が付くように頑張ってみました。

(続きを読む…)