methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

ropevim を使う

インストール に続いて、実際に rope を使い始めてみます。

とりあえず Flask アプリを題材に環境を作ってみます。

準備

$ mkvirtualenv flask
$ pip install flask
$ mkdir hello
$ cd hello

app.py を作ります

import flask

app = flask.Flask(__name__)

@app.route('/')
def index():
    return 'hello world.'

if __name__ == '__main__':
    app.run()

プロジェクトのセットアップ

:RopeProjectConfig というコマンドを実行すると、プロジェクトのルートディレクトリを聞かれる (デフォルトでは .) ので、そのままエンターキーを押すと、こんどはプロジェクトを作るかどうか (0. yes 1. no) で聞いてきます。 0 を入力してエンターキーを押すとプロジェクトが作られます。

.ropeproject/config.py というファイルができるので、それを編集して、 virtualenv が検索パスに含まれるようにします。

    # You can extend python path for looking up modules
    #prefs.add('python_path', '~/python/')

という行があるので、この下に virtualenv の site-packages を追加しましょう。 私の場合は次のように書きました。

    prefs.add('python_path', '~/.virtualenvs/flask/lib/python2.7/site-packages')

定義ジャンプ

これで準備完了です。 vim で先ほどつくった app.py を開いてみましょう。

たとえばカーソルを route の上にのせて、 :RopeGotoDefinition というコマンドを実行するか、 C-c g というショートカットで、 Flask.route を定義している位置にジャンプできるはずです。

リネーム

リファクタリング機能も試してみましょう。

カーソルを app の上にのせて、 :RopeRename というコマンドを実行すると、 New name: [app] とコマンド行に表示されるので、 application と入力します。 すると、

0. perform
1. preview
...
Choose what to do: [perform]

と聞かれます。いきなり perform はこわいので、 1 を入力してエンターキーを押すと、

--- a/app.py
+++ b/app.py
@@ -1,10 +1,10 @@
 import flask

-app = flask.Flask(__name__)
+application = flask.Flask(__name__)

-@app.route('/')
+@application.route('/')
 def index():
     return 'hello world'

 if __name__ == '__main__':
-    app.run()
+    application.run()
0. yes
1. no
Do the changes? 

のように聞かれます。0 を入力してエンターを押すと実際に修正が実行されます。

今回は1ファイルしかないので差分も1ファイルですが、複数ファイルにまたがる変更にも対応しているはずです。

最後に

まだ試していませんが、 Rope にはメソッド抽出みたいなリファクタリング機能もありますし、補完機能もあります。 EmacsSublime Text 2 でも使えるはずなので、IDEみたいな機能が欲しい人は導入すると良いと思います。