4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Emacsで選択範囲のRuby,Pythonコード片実行

Last updated at Posted at 2016-07-28

100 numpy exercises の Ruby版である 100 narray exercises を Markdownで書いたのですが、その中に書いてあるコード片をコピペ実行する必要が出てきます。このコピペ実行を繰り返し行うのが結構面倒だったので、Emacsで開いたファイルの選択範囲を M-xコマンド一発で実行できるようにする方法を調べました。

環境

CentOS Linux release 7.2.1511 (Core)
GNU Emacs 24.3.1 (x86_64-redhat-linux-gnu, GTK+ Version 3.8.8)

サンプルMarkdown

このMarkdownの中のコード部分を選択して実行することが目的。

## Sample MD

Python:
```python
import numpy as np
Z = np.arange(10)
print(Z)
```

Ruby:
```ruby
require "numo/narray"
z = Numo::DFloat.new(10).seq
```

Pythonコード片の実行

Emacsバッファ内でPythonを実行するには、python.el と python-mode.el の2種類の方法がある。

(1) Emacsに付属の python.el

Emacsに標準で入っているのでインストール不要。

~/.emacs.el 設定

(require 'python)

この設定は、.pyを開けば自動でロードされるので不要だが、Markdownのコード片を実行する場合はロードされないので必要。

選択範囲の実行

EmacsでMarkdownファイルを開いてPythonコードを選択し、次のコマンドを実行する。

M-x python-shell-send-region

すると、インタラクティブモードの python が起動し、*Python[ファイル名]* というバッファに実行結果が記録されるが、前面には出ないので、swithc-to-buffer する必要がある。

(2) python-mode.el

こちらは IPython にも対応。

インストール

python-mode.el のサイトからソースを取得してインストールする。

~/.emacs.el 設定

(require 'python-mode)

これも、Markdownのコード片を実行する場合に必要。

選択範囲の実行

M-x py-execute-region

実行結果

インタラクティブモードのpythonが起動し、*Python* というバッファが分割画面に現れて実行結果が表示される。

2016-07-31 14-51-20.png

IPythonの場合

インタラクティブモードpythonではなく、IPythonに渡す場合は、次のコマンドを用いる。

M-x py-execute-region-ipython

Rubyコード片の実行

Emacsバッファ内でRubyを実行するには、inf-ruby.el (Inferior Ruby Mode) を用いるが、こちらも2種類ある。

(1) Ruby付属の inf-ruby.el

Rubyのソースコードに含まれているもの。長らく更新が止まっている。

インストール

Rubyソースツリーの misc/inf-ruby.el を適当なパスに配置する。

~/.emacs.el 設定

(autoload 'run-ruby "inf-ruby" "Run an inferior Ruby process")
(require 'inf-ruby)

irbプロセス起動

M-x run-ruby

選択範囲の実行

M-x ruby-send-region

(2) 派生版の inf-ruby.el

https://github.com/nonsequitur/inf-ruby で開発されている。こちらは上のRuby付属版から修正が加えられており、Pry にも対応。試したバージョンは 2.4.0。

インストール

上記URLから inf-ruby.el を取得。irb を使う場合は、そのままでは無駄なプロンプトが多数表示されて見にくいので、オプションに --inf-ruby-mode を加える修正をしてから、適当なパスに配置する。

diff --git a/inf-ruby.el b/inf-ruby.el
index deb5769..39f586d 100755
--- a/inf-ruby.el
+++ b/inf-ruby.el
@@ -83,7 +83,7 @@ Also see the description of `ielm-prompt-read-only'."
   :group 'inf-ruby)

 (defcustom inf-ruby-implementations
-  '(("ruby"     . "irb --prompt default --noreadline -r irb/completion")
+  '(("ruby"     . "irb --prompt default --inf-ruby-mode -r irb/completion")
     ("jruby"    . "jruby -S irb --prompt default --noreadline -r irb/completion")
     ("rubinius" . "rbx -r irb/completion")
     ("yarv"     . "irb1.9 -r irb/completion")

~/.emacs.el 設定

(autoload 'inf-ruby "inf-ruby" "Run an inferior Ruby process" t)

irbプロセス起動

M-x inf-ruby

選択範囲の実行

M-x ruby-send-region

実行結果

2016-07-31 14-52-43.png

Pryの場合

irbではなくPryを使う場合は、次の行を ~/.emacs.el に追加する。

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

参考:
http://d.hatena.ne.jp/rubikitch/20140627/pry

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?