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
Introduce Hono CLI
yusukebe
6
3k
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
260
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
16
6.5k
Pythonに漸進的に型をつける
nealle
1
110
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
250
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
350
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
100
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
550
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
190
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
180
Leading Effective Engineering Teams in the AI Era
addyosmani
7
570
コード生成なしでモック処理を実現!ovechkin-dm/mockioで学ぶメタプログラミング
qualiarts
0
240
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Being A Developer After 40
akosma
91
590k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
4 Signs Your Business is Dying
shpigford
185
22k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
BBQ
matthewcrist
89
9.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
Music & Morning Musume
bryan
46
6.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
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༵