回心誌

日々是回心

【cython、vim】vimでcythonコードの折りたたみ

d.hatena.ne.jp

上記記事によると、pythonコードの折りたたみを自動でやってくれるありがたいプラグインがあるようで、ありがたく使わせていただくことにした。

といわけで、そろそろPythonのヤツも欲しいなと思ったので、プラグインを探しました。割合古いものですが、見やすいので大分気に入っています。

python_fold - Folding expression for python : vim online

これを ~/.vim/plugin の下に設置すればそれでおkです。

落としてきて言われた通り置くと、確かに折りたためてる!すげー!

しかし、当然だがcythonのコードには対応していない。
cython用のカスタマイズしたので、その方法をここに記す。
(たいしたことはしてないが)

"def"で検索し、以下の箇所が該当したので、そこにちょこっとコードを追加する。

   " Classes and functions get their own folds
    if line =~ '^\s*\(class\|def\)\s'
    return ">" . (ind / &sw + 1)
    endif

このコード↑を、こう↓
(書き換えてるのは2行目のif文の条件だけ)

   " Classes and functions get their own folds
    if line =~ '^\s*\(class\|def\|cdef\|cpdef\)\s' && line =~ ':\s*$'
    return ">" . (ind / &sw + 1)
    endif

正直、正規表現はよく分からんが、class、def、cdef、cpdefで始まってコロン(:)で終わる行があったら折りたたむ動きができてるはず。


Vim script テクニックバイブル ~Vim使いの魔法の杖

Vim script テクニックバイブル ~Vim使いの魔法の杖

【cython、IPython】IPythonでpyx更新時に一々抜けなくても済む方法

IPython上でpyximportを使うと、pyxファイルをimportすることができる。嬉しいことに、その場でコンパイルまでしてくれる。

ただ、importした状態でpyxファイルを書き換えても、直ちに反映されるわけではなく、通常は一度IPythonを終了して再起動する必要がある。(O'REILLYのCython本にも度々そういう箇所があるが、一度IPythonを終了するよう記述がある)

非常に面倒臭かったが、一々抜けなくても良い方法がある。

reload_support=Trueを引数に与えてpyximport.installを呼び出せば良い。

import pyximport
pyximport.install(reload_support=True)
import hogepyx

これでhogepyx.pyxを変更した際には

reload(hogepyx)

とすれば、再度コンパイルが走る。

こんなに便利なのにCython本に載ってないのはどういうわけだろう。機能追加が最近だったのか、実は推奨していない理由があるのか。


IPythonを開く際に自動でpyximportが動くようにしてしまうと都合が良い。
シェル上で

ipython profile create cython

するとコンフィグファイルのパスが表示されるので、そのファイルを開き、
開いたファイルに以下の4行を付け加える

c.InteractiveShellApp.exec_lines = [
    'import pyximport',
    'pyximport.install(reload_support=True)'
]

IPythonを立ち上げる際に

ipython --profile=cython

とすれば、立ち上がる際にpyximportがimport、installされる。

Cython ―Cとの融合によるPythonの高速化

Cython ―Cとの融合によるPythonの高速化