http://rubikitch.com/に移転しました このページをアンテナに追加 RSSフィード

2014-06-27

[][]Emacs×Ruby - PryをEmacsで使ってみる

Pry = IRB.succ

今回は久々にRubyEmacsなお話です。

あなたはRubyプログラミング試行錯誤するときに

どういうツールを使っていますか?

irb

xmp(rcodetools)?

irbRubyインストールしたときに

昔からついてくる対話Rubyです。

シェルインターフェースRubyの式を

書いたら評価結果を表示してくれます。

その進化形がPryです。

で、pryとは何かというと、

『Pry = IRB + Shell + Ruby Shell + Debugger』

といった感じです。

Emacs世界にあるeshellは

『Eshell = IELM + Shell + Emacs Lisp Shell』

なので、pryはRuby界のeshellみたいなものと

思っていただければよいです。

$ sudo gem install pry pry-nav

インストールしてください。

Emacsで使う準備

pryはEmacsから使えます。

Rubyのパッケージには、ruby-mode.elなどのelisp

含まれていますが、古いのでMELPAのものを使います。

昔からEmacsirbを使うにはinf-ruby.elを使うのですが、

MELPA版のinf-ruby.elはpryにも対応しています。

M-x package-refresh-contents

M-x package-install inf-ruby

そして、以下の設定をしてください。

==== pry-init.el

(require 'inf-ruby)

(setq inf-ruby-default-implementation "pry")

(setq inf-ruby-eval-binding "Pry.toplevel_binding")

;; riなどのエスケープシーケンスを処理し、色付けする

(add-hook 'inf-ruby-mode-hook 'ansi-color-for-comint-mode-on)

続きを読む

2014-06-20

[]Emacs - yasnippetスニペットを一覧する

yasnippetは便利だけど…

yasnippet略語を展開して

定型文入力を支援するelispです。

yasnippetは開発してから何年もたち、

すでにたくさんのスニペットがついてきました。

それこそスニペットの山、やま、Yama!

これだけスニペットがあればさぞかし

便利になるだろうと最初は思うはずです。

だがしかし

これには本質的に避けられない大きな問題があったのです。


その問題とは…

記憶

です。


いくらたくさんスニペットが登録されていたとしても、

それを展開するための略語が覚えられないのです。

開発者からしてみれば、よかれと思って

どんどん追加しまくったスニペット群、

だが、略語が覚えられないと展開できない

という根本的問題があるのです。

頻繁に使う略語ならば、何度か使っていくうちに勝手に

覚えてきますが、使用頻度の低い略語は一旦覚えたとしても、

あっさり忘却の彼方へ吹き飛んでしまうのです。

これではいくらyasnippetが便利だとしても、

もったいなさすぎですよね。

今回は、この問題をどうにかする方法を教えます。

スニペットを一覧したい!

無数に存在するスニペットたち、

使っていると、当然、どんなスニペット

あるのか気になってしまいますよね。

スニペットを一覧したい!』

その気持ちよくわかるんです。

それならば、まずこのコマンドを使ってください。

M-x yas-describe-tables

今使えるスニペットたちが一覧されます。


続きはメルマガ

スニペット一覧が得られれば、

もちろんアレですよね!

続きは明日のメルマガでお話します。お楽しみに!

http://www.mag2.com/m/0001373131.html

2014-06-13

[]Emacs - smartrep.elでrepeatを活性化せよ

くどいプレフィクスキー

Emacsにはプレフィクスキーという概念がありますね。

そのおかげで1ストロークではおさまりきれいないほどの

数のコマンドをキーに割り当てることができます。

それはいいことなんですが、プレフィクスキー

付きのコマンドを何度も実行すると、いい加減

プレフィクスキーがくどいと感じてきませんか?


たとえば、

C-x 3でウィンドウを左右分割してください。

その後C-x {を何回か実行して

ウィンドウを縮めてください。

C-x { C-x { C-x { …と何度もC-x {を

実行するハメになってしまいますね。

repeatはいいけど

これを回避する方法としてrepeatを使う方法があります。

C-x zを使えばC-x { C-x z z …のようにできますが、

やはりC-xがくどいのではないでしょうか?

(global-set-key (kbd "C-,") 'repeat)

とC-,にrepeatを割り当てれば

C-x { C-, C-, …のように操作できます。

それでも同じ操作を繰り返すのにC-,に操作を切り替える

のはしっくりこないと感じるのではないでしょうか?

C-fならば、それを繰り返せばどんどん

カーソルを前に持っていけますね。

それと同じように C-x { { { …と

操作できた方が使いやすいはずです。

逆にウィンドウを広げる C-x } も使えば、

C-x { { } { …のようにキーボードだけ

で微調整ができるようになります。

ウィンドウの大きさを調節するのに

わざわざマウスを使う必要はありません。

smartrep登場

それを実現するのが2年以上前に

登場したsmartrep.elです。

M-x package-refresh-contents

M-x package-install smartrep

にてインストールしてください。

そして以下のコードを評価すると、

C-xの後に{と}でウィンドウの横幅を

調節できるようになります。

(require 'smartrep)
(smartrep-define-key global-map "C-x"
  '(("{" . shrink-window-horizontally)
    ("}" . enlarge-window-horizontally)))

続きはメルマガ

他にもsmartrep的なコマンドを紹介したり、

smartrepを使ってウィンドウ制御をする設定を

明日のメルマガでお話します。お楽しみに!

http://www.mag2.com/m/0001373131.html

2014-04-18

[]Software Design誌でEmacs入門の連載を始めました

お久しぶりです。

気付けば1年以上ブログを放置していましたが、なんとか生きています。

この度、技術評論社Software Design5月号からEmacs入門の連載をやらせていただくことになりました。

これからEmacsを始めようとしている人でもEmacsの魅力を存分に味わっていただけるようなコンセプトになっています。

本当に初歩の初歩から始まり、徐々に魅力的なコマンド・外部elispプログラムの数々を紹介します。

その中で根底にある考え方にも触れていきます。

敷居が高くて新参者にとってみれば変態エディタとも言えるEmacsですが、そこには楽しい世界があります。

Emacsはあなたが考えているほど難しくはありません。

今だからこそEmacsに入門する意味があります。

P.S.

Emacsについてもっと深く学びたいならば僕が運営するEmacsネット塾に入ってみてはいかがでしょうか?

http://www.mag2.com/m/0001373131.html

週1のメルマガに加え、読者に対して僕がアドバイザーとなり無制限メールサポートを行っています。

メールサポート込の月々527円ですが、初月無料なのでお試しに登録してみてはいかがでしょうか。

P.P.S.

増税の影響で月々512円から値上りしてしまったことをお詫びします。

512円(2の9乗)に戻す手続き中です。

2013-02-02

[]all-ext.el:対象行を絞り込んでからまとめて編集するM-x allを超強化!occurと融合&anything・helmと連携

お久しぶりです。

みなさん、M-x allって知ってますか?

M-x package-install all

インストールできるのですが、これはM-x occurのように正規表現にマッチする行を表示します。

occurとの違いは表示結果を書き換えれば、該当部分が自動的に書き変わることです。

ユースケースとしては、編集対象行を絞り込んでから、置換やrectangle系コマンドで一気に編集するって感じです。

便利なので以前から重宝しています。

ただ、occurより劣る点としては、対象行の行番号が出ていない点と、M-g M-n (next-error)とM-g M-p (previous-error)で移動できない点です。

(union all occur)

occurで絞り込んだはいいけれど、その結果をやっぱり編集したいという場合に改めてM-x allを実行するのは面倒ですね。

そこで、拙作all-ext.elの出番です。

MELPAに登録してあるので

M-x package-refresh-contents
M-x package-install all-ext

インストールしてください。

packageについては以下の設定が必要です。

(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)

all.elインストールされていないならば同時にインストールされます。

(require 'all-ext)

のみで使えます。


ついでにauto-install.elなどもMELPA経由でインストールできるようにしました。


all-ext.elインストール後、いつも通りM-x allを実行してください。

M-x occur同様行番号がついていることがわかります。

そしてM-g M-nやM-g M-pを実行してください。

該当行にジャンプできるようになっています。

 *All*バッファからもC-c C-cで該当行にジャンプできます。

これでだいたいM-x occurの置き換えはできたことでしょう。

この時点で書き換え可能なoccurとなりました。

anythingやhelmから使う

今のemacsで検索といえば、anythingやその後継となるhelmを使ってる人も多いでしょう。

M-x anything-occur、M-x anything-c-moccur-occur-by-moccur、M-x helm-occurでMigemoつきでガンガン絞り込めるのは爽快としか言いようがありません。

これらで特定の行を絞り込んだら、その結果を編集したいときもあります。

そのとき、anything-resumeなどで次々と見ていくのは面倒で非効率的です。

ならばいっそのことanythingやhelmで表示されている内容を*All*に放り込めないかと思いました。

M-x anything-occurやM-x helm-occurで絞り込んだ後にC-c C-aを押すと、表示内容による*All*バッファが作成されます。

あとは*All*バッファ編集して元のバッファに反映させてください。

occurだけでなく、行番号とその行の内容を表示しているanything・helmコマンドならばなんでも使えます。

http://www.rubyist.net/~rubikitch/archive/all-ext-1.png

http://www.rubyist.net/~rubikitch/archive/all-ext-2.png

Connection: close