vimでPythonコードの折りたたみ
vimでPHP開発していた時は、良くvim の 折りたたみ機能を使ってました。
理由としては、割とメソッドを移動したりするのが楽だったり(折りたたみしてる所は yy , dd でヤンクできるから)、メソッド、クラス単位で折りたたみされてるので、俯瞰してそのファイルを眺める事ができるから、不要なメソッドとかを見つけやすかったからです。
折りたたみは最初、開けたり閉じたりするのが面倒だったんですが、気がつけば、小指が za を押すのに慣れてしまいました
といわけで、そろそろPythonのヤツも欲しいなと思ったので、プラグインを探しました。割合古いものですが、見やすいので大分気に入っています。
python_fold - Folding expression for python : vim online
これを ~/.vim/plugin の下に設置すればそれでおkです。
簡単な使い方
たとえば こんなソースがあるとします。
#!/usr/bin/env python #-*- coding:utf8 -*- class TestClass(object): """ TestClass だよ python_fold.vimの折りたたみの仕方を確認 """ _name = None def __init__(self, name = None): """ クラスの初期化 """ if name: self._name = name def hello(self): """ 挨拶する 名前がセットされていなければ helloとだけ表示される """ print 'Hey! My name is ' + self._name if self._name else 'Hello!' def say_hello(name=None): """ TestClassをインスタンス化してhelloする """ test = TestClass(name) test.hello() if __name__ == '__main__': say_hello('hoge') #=> Hey! My name is hoge say_hello() #=> Hello!
これをpython_fold.vimを導入した後だとファイルを開いた直後はこうなります。
#!/usr/bin/env python #-*- coding:utf8 -*- 17 lines: class TestClass(object): TestClass だよ ------------------------------------------------- 4 lines: def say_hello(name=None): TestClassをインスタンス化してhelloする ------------------------- if __name__ == '__main__': say_hello('hoge') #=> Hey! My name is hoge say_hello() #=> Hello!
クラスと、関数がfoldされているのが分かると思います。これを開くときは、そのラインにいって、 za を素早く押せば開きます。閉じる時もzaです。TestClassを開くとこんな感じになります。
#!/usr/bin/env python #-*- coding:utf8 -*- class TestClass(object): """ TestClass だよ python_fold.vimの折りたたみの仕方を確認 """ _name = None 4 lines: def __init__(self, name = None): クラスの初期化 -------------------------------------------------- 6 lines: def hello(self): 挨拶する ---------------------------------------------------------------------- 4 lines: def say_hello(name=None): TestClassをインスタンス化してhelloする ------------------------- if __name__ == '__main__': say_hello('hoge') #=> Hey! My name is hoge say_hello() #=> Hello!
このプラグインが良いなーと思ったのは、クラス宣言、メソッド宣言直後のdocstringの最初の一行を、foldした時に右側に表示してくれる所です。なので一行目のdocstringはなるべく簡潔な説明を書くようにしてます。
なんか上のソースだと折りたたみされている様子が分かりずらいですね。こんな風になります。