Upgrade to Pro — share decks privately, control downloads, hide ads and more …

はじめてのvimscipt

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 はじめてのvimscipt

pythonインターフェースを用いたvimscriptの作り方

Avatar for kazy1991

kazy1991

June 02, 2013
Tweet

More Decks by kazy1991

Other Decks in Programming

Transcript

  1. プラグインのテンプレ “ plugin/xxx.vim if !has('python') && !has('python3') echomsg "Error: ...

    finish endif let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  2. それぞれの解説 “ plugin/xxx.vim if !has('python') && !has('python3') echomsg "Error: ...

    finish endif let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  3. それぞれの解説 “ plugin/xxx.vim if !has('python') && !has('python3') echomsg "Error: ...

    finish endif let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  4. pythonの有無の確認 1 if !has('python') && !has('python3') 2 echomsg "Error: ...

    3 finish 4 endif 起動しているvimがpythonインターフェースを備えているか チェックし,持っていなければ警告を出して終了する 13೥6݄2೔೔༵೔
  5. それぞれの解説 “ plugin/xxx.vim if !has('python') && !has('python3') echomsg "Error: ...

    finish endif let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  6. それぞれの解説 “ plugin/xxx.vim if !has('python') && !has('python3') echomsg "Error: ...

    finish endif let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  7. それぞれの解説 “ plugin/xxx.vim if !has('python') && !has('python3') echomsg "Error: ...

    finish endif let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  8. お約束のテンプレ 6 let s:save_cpo = &cpo 7 set cpo&vim ------------------------------------------------------

    “todo ------------------------------------------------------ 31 let &cpo = s:save_cpo 32 unlet s:save_cpo プラグインを書くときのテンプレのコード 気になった人は :help write-plugin 13೥6݄2೔೔༵೔
  9. それぞれの解説 if !has('python') && !has('python3') echomsg "Error: ... finish endif

    let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  10. それぞれの解説 if !has('python') && !has('python3') echomsg "Error: ... finish endif

    let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  11. pythonの呼び出し方法 2 #(1) :python <code> でpythonのワンライナーが書ける 3 :python print "hoge";

    print "piyo" 4 5 #(2) ヒアドキュメントも使える 6 :python <<EOM 7 print "piyo" 8 EOM 9 10 #(3) : pyfile <source> で.pyファイルが呼び出せる 11 :pyfile hoge_piyo.py pythonを呼び出す方法は3種類 13೥6݄2೔೔༵೔
  12. pythonの呼び出し python << PYTHONEOF import vim import sys import os

    sys.path.insert(1, os.path.join(vim.eval('expand("<sfile>:p:h:h")'), 'plugin')) import sbrowser sys.path.pop(1) PYTHONEOF これが,ベスト・プラクティスな気がする.. 13೥6݄2೔೔༵೔
  13. それぞれの解説 if !has('python') && !has('python3') echomsg "Error: ... finish endif

    let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  14. それぞれの解説 if !has('python') && !has('python3') echomsg "Error: ... finish endif

    let s:save_cpo = &cpo set cpo&vim “ pythonݺͼग़͠ “ ΩʔόΠϯυͷઃఆͱ͔ let &cpo = s:save_cpo unlet s:save_cpo 13೥6݄2೔೔༵೔
  15. vimの関数の定義 [スコープの違い] function! Webbrowse() * グローバルな関数 * 関数名は大文字から始める function! s:webbrowse()

    * 現行のスクリプトファイル内でのみ有効 * s:の接頭辞を付け,関数名は小文字から始める * こっちが推奨されてると思う 13೥6݄2೔೔༵೔
  16. キーバインドの設定 function! s:webbrowse() python sbrowser.webbrowse() endfunction command! -nargs=0 SimpleWebBrowse call

    s:webbrowse() nnoremap W :<c-u>SimpleWebBrowse<cr> 関数をコマンド化することで, ローカル関数でもキーバインド出来る 13೥6݄2೔೔༵೔
  17. vimとの連携 [基本的なメソッド] 1 import vim 2 b = vim.current.buffer #

    ݱࡏͷόοϑΝ 3 print b.name # όοϑΝ໊ 4 print b.number # bufnr()ͰಘΒΕΔ஋ 5 b[0] = "hoge" # 1ߦ໨Λมߋ͢Δ 6 b[:] = None # όοϑΝΛۭʹ͢Δ 7 b = vim.buffers[1] # 1൪໨ͷόοϑΝ 8 del b[:] # ͜Ε΋όοϑΝΛۭʹ͢Δ 9 b[0:0] = ["fuga"] # Ұ൪্ʹߦΛૠೖ 10 del b[2] # 3ߦ໨Λ࡟আ 11 b.append("hoge") # ຤ඌʹߦΛ௥Ճ 12 print len(b) # όοϑΝͷߦ਺Λදࣔ 13೥6݄2೔೔༵೔
  18. sbrowser.py 1 import vim 2 import webbrowser 3 import re

    4 def webbrowse(): 5 c_word = vim.eval('expand("<cWORD>")') 8 patt_url = re.compile("((http|https)://[A-Za- z0-9\'~+\-=_.,/%\?!;:@#\*&\(\)]+)") 9 match = patt_url.search(c_word) 10 if match: 11 webbrowser.open(match.group(0)) 12 else: 13 print "url not found" 13೥6݄2೔೔༵೔