Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
はじめてのvimscipt
Search
kazy1991
June 02, 2013
Programming
1
450
はじめてのvimscipt
pythonインターフェースを用いたvimscriptの作り方
kazy1991
June 02, 2013
Tweet
Share
More Decks by kazy1991
See All by kazy1991
基本のAndroid View開発ドキュメント
kazy1991
0
2.8k
Cookpad.apk#1-ReactNativeについて
kazy1991
1
6.5k
いつか使ってみたいOperatorたち
kazy1991
0
490
Cookpad TechKitchen#6-android-with-ml-and-scheduler
kazy1991
0
730
Droidkaigi 2017
kazy1991
5
12k
RxJava Droidkaigi
kazy1991
1
110
rx.pdf
kazy1991
0
140
Other Decks in Programming
See All in Programming
Devoxx BE - Local Development in the AI Era
kdubois
0
140
エンジニアインターン「Treasure」とHonoの2年、そして未来へ / Our Journey with Hono Two Years at Treasure and Beyond
carta_engineering
0
410
CSC305 Lecture 08
javiergs
PRO
0
270
技術的負債の正体を知って向き合う
irof
0
230
AI駆動で0→1をやって見えた光と伸びしろ
passion0102
1
780
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.4k
モテるデスク環境
mozumasu
3
1.1k
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
4
890
あなたとKaigi on Rails / Kaigi on Rails + You
shimoju
0
180
Cursorハンズオン実践!
eltociear
2
1.2k
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
260
Go言語はstack overflowの夢を見るか?
logica0419
0
520
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
6.6k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
Fireside Chat
paigeccino
40
3.7k
GraphQLとの向き合い方2022年版
quramy
49
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Building an army of robots
kneath
305
46k
Leading Effective Engineering Teams in the AI Era
addyosmani
7
580
BBQ
matthewcrist
89
9.8k
Transcript
はじめての vim plugin 136݄2༵
便利なplugin書きたい vimmerのジレンマ 136݄2༵
便利なplugin書きたい vim_script書くのは辛い vimmerのジレンマ 136݄2༵
136݄2༵
Sublime Text 136݄2༵
pythonでプラグインが書ける Sublime Text 136݄2༵
2つの選択肢 136݄2༵
* 素直にsublimeに移行する 2つの選択肢 136݄2༵
* 素直にsublimeに移行する 2つの選択肢 * もうすこしvimで粘る 136݄2༵
* もうすこしvimで粘る 2つの選択肢 136݄2༵
有名な機能はプラグインで 実装されてるよ 136݄2༵
有名な機能はプラグインで 実装されてるよ * kien/ctrlp.vim * terryma/vim-multiple-cursors 136݄2༵
pythonでvimのプラグイン 書きたいなー? 136݄2༵
\出来るよ!!/ 136݄2༵
なんでpythonで書けるのか VimにはRuby,Python,Perl, SchemeなどのVimScript以外の言語の インタフェースが用意されている. 136݄2༵
必要な環境 pythonインタフェースが使えるvim (Macvim-kaoriya etc..) 136݄2༵
こんなの作ったよ kazy1991/simple-browser.vim カーソル上のurlを開くプラグイン 136݄2༵
デモします 136݄2༵
プラグインの構成 136݄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 136݄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 136݄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 136݄2༵
pythonの有無の確認 1 if !has('python') && !has('python3') 2 echomsg "Error: ...
3 finish 4 endif 起動しているvimがpythonインターフェースを備えているか チェックし,持っていなければ警告を出して終了する 136݄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 136݄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 136݄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 136݄2༵
お約束のテンプレ 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 136݄2༵
それぞれの解説 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 136݄2༵
それぞれの解説 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 136݄2༵
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種類 136݄2༵
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 これが,ベスト・プラクティスな気がする.. 136݄2༵
それぞれの解説 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 136݄2༵
それぞれの解説 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 136݄2༵
vimの関数の定義 [スコープの違い] function! Webbrowse() * グローバルな関数 * 関数名は大文字から始める function! s:webbrowse()
* 現行のスクリプトファイル内でのみ有効 * s:の接頭辞を付け,関数名は小文字から始める * こっちが推奨されてると思う 136݄2༵
キーバインドの設定 function! s:webbrowse() python sbrowser.webbrowse() endfunction command! -nargs=0 SimpleWebBrowse call
s:webbrowse() nnoremap W :<c-u>SimpleWebBrowse<cr> 関数をコマンド化することで, ローカル関数でもキーバインド出来る 136݄2༵
少しだけpython編 136݄2༵
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) # όοϑΝͷߦΛදࣔ 136݄2༵
vimとの連携 [特殊なメソッド] 1 vim.command('echo "hoge"') 2 color_name = vim.eval('g:color_name') vim.command()は引数ので与えられたvimscriptを実行
返り値が欲しい場合はvim.eval()を使用する 136݄2༵
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" 136݄2༵
おわり 136݄2༵