[vim][python] vim を python で拡張し,anything-like なインターフイスで実行する。
Vim のコマンドは沢山あってたまにしか使わないものは覚えられない。
特定の時期に頻繁に使って、専用のキーバインドを設定しても、暫く使わないとそんなキーバインドを設定した事すら忘れてしまう。
というのに困ってる人は俺だけではないはずだ。
Emacs はそれぞれの機能が emacs-lisp の関数として実装されていて、わりと分かりやすい名前がついている。
anything という超強力なプラグインのおかげで、大量にある elisp の関数をあいまい検索して実行できるようになったから、これによって「うろ覚え」でも関数を呼べるようになった。
つまり、覚えなくてもよくなったって事。
こういうのが Vim にもあれば便利だ。
実際にいくつかプラグインがあり、fuzzyfinder, ku, unite がある。どれも日本人が作ってるってのがすごい!
unite はまさに Vim 版 anythong を志向しているようで、おそらく決定版になるだろうと思う。
俺も先週ぐらいから unite を使っていて、もうちょっとしたら fuzzyfinder は使わなくてすむようになると思う。
ああ、前置きが長くなってしまった。
本題。
python のお勉強をしている。
python で Vim を気軽に拡張したい。
つくった python の関数を anything like なインターフェイスで、ランチャのように起動したい。
と妄想して、それっぽいものを作った。
なんせ、python の初心者(先週の水曜ぐらいからか始めた)なのと、まだ module , class, 変数の scope とかもちゃんとわかってないレベル
で書いてるので、とりあえずでっち上げたというレベルですが。。バグバグですが、アイデア共有ってことで。
vimrc に
nnoremap <D-f><D-p> :python vim_py()<CR> vnoremap <D-f><D-p> :python vim_py()<CR> pyfile "~/.vim/plugin/pyvim_anything_like.py"
みたいに設定して、
python の docstring がそのままランチャの help なる。
※ インターフェイスは CommandT をかなりパクって作ってます。
vim で if_python を使用し、Python,VimScript 間で変数を交換する。
VimScript は JavaScript に似ていると思ったが、それよりも Python に似ている気がする。
Vim は VimScript という専用言語を使用し、動作を拡張出来るが、VimScript の代わりに Ruby や、Python で拡張する事も出来る。
Vim の拡張言語としての Python のサポートは Ruby のものより強力だ。
大きくは下記の2点。
- range が取れる。※range object
- 辞書、リストをそのまま取り込める。
Vim の拡張機能を VimScript ではなく、Ruby や Python のような汎用言語で書く事についての考察は下記が詳しい。
http://items.sjbach.com/97/writing-a-vim-plugin
最近 Python を勉強し始めたんですが、目的が必要なので、Python で Vim を拡張する方法について調査しながら Python を勉強している。
下記は、Python、VimScript 間で変数を交換する方法のサンプル。
:help にあるように、Vim => Python 間では、数値は文字列になる点に注意が必要。
vimでコードの折りたたみ( fold )をイケてる感じにする。
長いコードは、適当に折り畳んで、全体の外観を把握したり、移動しやすくしたりしたい。
vim の折り畳みの表示は set foldtext=関数 とする事でカスタマイズできます。
github に良さそうなサンプルがあり、見た目とその他を自分の希望にあうように修正した。
下記にあります。
http://github.com/t9md/vim-foldtext
$HOME/.vim/plugin におけばOK。
俺の修正分は下記
http://github.com/t9md/vim-foldtext/commit/372949f490faa34e5fd480041c48fc92a68746df
iTerm の透明度をコマンドラインから設定する。
rb-appscript gem を使用してコマンドラインから iTerm を操作する。
今回は透明度の設定。
基本的な知識は id:keyesberry:20100315:p1 によく書かれている。すばらしい!
別に AppleScript 直接でも行けます。ただ、Ruby の方が書きやすいので、いろいろやるなら、Ruby 経由の方が良さそう。
引数は、0-10 まで。
chmod +x で実行権限つけて、$PATH の通ったとこに置く。
$transparency 10 で透明度最大。
vim でテキストを簡単に移動、コピーする。
vim でテキストを簡単に移動、コピーするTIPS。
下記を .vimrc に追加して再起動。
キーバインドは適当に変えてください。
移動
mode | key | action |
---|---|---|
visual | C-j | 下に移動 |
visual | C-k | 上に移動 |
visual | C-h | 左に移動 |
visual | C-l | 右に移動 |
コピー
mode | key | action |
---|---|---|
visual | D-d | 下にコピー |
normal | D-d | 下にコピー |
CopySelectedText() の第二引数に'1'を渡すと、コピー後に選択範囲が元の選択範囲に留まる。※ デフォルトは新しくコピーされたテキストに追随する。
典型的な使い方。visual 選択後,
※