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
470
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
はじめてのvimscipt
pythonインターフェースを用いたvimscriptの作り方
kazy1991
June 02, 2013
More Decks by kazy1991
See All by kazy1991
基本のAndroid View開発ドキュメント
kazy1991
0
2.9k
Cookpad.apk#1-ReactNativeについて
kazy1991
1
6.6k
いつか使ってみたいOperatorたち
kazy1991
0
510
Cookpad TechKitchen#6-android-with-ml-and-scheduler
kazy1991
0
750
Droidkaigi 2017
kazy1991
5
12k
RxJava Droidkaigi
kazy1991
1
120
rx.pdf
kazy1991
0
150
Other Decks in Programming
See All in Programming
Google Apps Script で Ruby を動かす
kawahara
0
120
FDEが実現するAI駆動経営の現在地
gonta
2
240
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
280
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
2
110
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
120
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
190
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
290
メールのエイリアス機能を履き違えない
isshinfunada
0
160
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
440
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
160
Foundation Models frameworkで画像分析
ryodeveloper
1
180
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
0
180
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Building AI with AI
inesmontani
PRO
1
1.1k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
The Spectacular Lies of Maps
axbom
PRO
1
880
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
The untapped power of vector embeddings
frankvandijk
2
1.8k
Technical Leadership for Architectural Decision Making
baasie
3
450
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Scaling GitHub
holman
464
140k
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༵