SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
【台北拍限定版】
哎哎呀呀
Joe 上⼿ Vim Plugin ⼼得 😥
事由
週六舉辦 Tainan.py x MOSUT
要嗎!
【台北拍限定版】哎哎呀呀 JOE 上⼿ VIM PLUGIN ⼼得
➤ 著重在 故事
➤ 短分享: 15 分鐘
➤ 以概念為主
➤ 省略與 Python 無關的部分 幾乎就是全部
➤ 有 Live Demo
➤ 免責聲明
➤ 聽完演講後,開始寫 Vim Plugin 還是會「哎哎呀呀」
“如果您沒⽤過 Vim,可在終端機輸入
vim,進入後按下 Ctrl + S,看看能否
在今⽇聚會結束前離開該畫⾯。
- 給碼農的 密室逃脫
故事開始
序章
我的編輯器 & IDE 歷險記
before 2011
我為什麼⽤ VIM︖
➤ 真的:
➤ 爽(⾃⼰來的概念)
➤ 假的:
➤ 不想碰滑鼠
➤ 在 Terminal 下運作⽅便
➤ 風扇不會叫
第⼆章
我的 Vim 原始⼈時期
2011
如何查找 PYTHON CODE
➤ 使⽤「*」、「?」
➤ 向後、向前搜尋
➤ ⽤外部指令 grep, ack 直接看,或串結果到 Vim
➤ ack -f proxy . | xargs -o vim
優缺點
➤ 在⾃⼰的⼩專案內查找 OK
➤ 不是⾃⼰寫的專案追 Code 就
很累 Orz
第三章
已知⽤⽕
2012 - 2014
開始裝⼀堆 PLUGINS 來寫 PYTHON
➤ Syntax
➤ Auto-Complete
➤ Refactor
➤ Snippets
➤ Doc
➤ (略)
如何查找 PYTHON CODE
➤ 使⽤「*」、「?」
➤ 向後、向前搜尋
➤ 使⽤ Jedi / Rope 來達到 Go To Definiton
➤ 路徑沒設對時會有點兩光
➤ 使⽤ Ack.vim 來做搜尋
➤ 蠻好⽤的
優缺點
➤ 對於⼩型專案完全 OK
➤ 對於中型或是稍微⼤⼀點的專
案,就有點⼒不從⼼
➤ 速度太慢
➤ 結果的過濾很麻煩
➤ 搜尋多次後不知道怎麼還
原之前的結果
➤ …
第四章
尋找外部⼯具
2015
找⼀些看 CODE ⼯具
➤ 想起牆壁曾經推薦過 Source Navigator NG
在 Mac 載入⼤專案不太穩
介⾯看得很痛苦 Orz
查找 Python Code 能⼒普普
找⼀些看 CODE ⼯具
➤ 到 Ack 網站的 More Tools 看看有什麼好東西
找⼀些看 CODE ⼯具
➤ CodeQuery
➤ (ctags + cscope)
➤ SQLite 速度快!
➤ 介⾯好⽤!
優缺點
➤ 適⽤⼤多數專案
➤ 好⽤
➤ 懶得打開
➤ 要把 ctags / cscope 的結果轉
換成 SQLite DB 很麻煩
➤ 查找完後,回到 Vim 還要再⼿
動操作 …
第五章
⾃⼰的 Plugin⾃⼰寫
2016
STEP 1: 可⾏性評估
➤ 發現 CodeQuery 有提供⼀個 cmd-line tool
➤ 太好了,不⽤去讀 SQLite 檔案惹 =⽫=
STEP 2: 學⼀點(︖) VIMSCRIPT
➤ 不⼩⼼就失控讀完整本 Learn Vimscript The Hardway
➤ Vimscript 提供的 API 跟 Python 頗像,但是超雷
➤ 超雷
➤ 超雷
➤ 超雷(請移駕本週末的台南拍聚會)
➤ 然後整理⾃⼰的亂放了三年以上的 .vimrc
➤ 不知不覺就過了⼀個⽉惹 😗
STEP 3: 參考別⼈是怎麼實作類似的功能
➤ 到 github 上去看 Ack.vim 怎麼寫
➤ 原來只要把 grepprg 跟 grepformat 設定好,呼叫外部
Command 後 Vim 就會⾃動 parse 結果
STEP 4: (認真地)評估與設計
➤ 確保⾃⼰寫的 Plugin 能夠滿⾜⾃⼰的需求
➤ 也可以滿⾜⼀部份其他⼈的需求
➤ 做⼀些 Prototype 讓⾃⼰感覺⼀下成品的感覺
➤ 也決定在 Plugin 基本功能完成後,會加上「選單」以⽅便其他
⼈操作
STEP 5: 懶⼈ VIM PLUGIN 架構法
➤ 等寫完了再來做 lazy load 之類的設計
STEP 6: ⽤ PYTHON 的⽅法來寫 VIMSCRIPT
➤ 其實可以⽤ Python 來寫 VimScript
➤ 但是我選擇不要這麼做
STEP 7: ⽤ VIMSCRIPT 的⽅法來寫 VIMSCRIPT
➤ 由於說過要省略與 Python 無關的部分(發動陷阱卡!)
➤ 請移駕本週末的台南拍
➤ 然後我就寫完了。
LIVE DEMO
第六章
再來咧
2016
接下來
➤ 繼續補 Readme
➤ 調整 Menu 跟 Keybindings
➤ 把 Options 寫活
➤ ⽀援 Javascript/Ruby/Go …
➤ 加強 Async 的部分
➤ Vim 8 ???
➤ 發 PR 給 CodeQuery
➤ 跪求測試 and 給讚!
⼼得
⾃⼰寫⾃⼰⽤就是爽
“我才不告訴你怎麼離開 Vim 呢 XD
QA 時間

Mais conteúdo relacionado

Mais de Chun-Yu Tseng

Essential TDD @ pycontw2016
Essential TDD @ pycontw2016Essential TDD @ pycontw2016
Essential TDD @ pycontw2016Chun-Yu Tseng
 
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式Chun-Yu Tseng
 
Agile x API x Documentation @ NGO [[MOPCON2015]]
Agile x API x Documentation @ NGO [[MOPCON2015]]Agile x API x Documentation @ NGO [[MOPCON2015]]
Agile x API x Documentation @ NGO [[MOPCON2015]]Chun-Yu Tseng
 
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015Chun-Yu Tseng
 
程式 x 設計 @ MOPCON 2014
程式 x 設計 @ MOPCON 2014程式 x 設計 @ MOPCON 2014
程式 x 設計 @ MOPCON 2014Chun-Yu Tseng
 
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展Chun-Yu Tseng
 
OO x Python @ Tainan.py x MOSUT x FP 2014.09.27
OO x Python  @ Tainan.py x MOSUT x FP 2014.09.27OO x Python  @ Tainan.py x MOSUT x FP 2014.09.27
OO x Python @ Tainan.py x MOSUT x FP 2014.09.27Chun-Yu Tseng
 
用路人小幫手 x 回報大改造 @ 2014 台南黑客松
用路人小幫手 x 回報大改造 @ 2014 台南黑客松用路人小幫手 x 回報大改造 @ 2014 台南黑客松
用路人小幫手 x 回報大改造 @ 2014 台南黑客松Chun-Yu Tseng
 
Testing in Python @ Kaosiung.py 2014.05.26
Testing in Python @ Kaosiung.py 2014.05.26Testing in Python @ Kaosiung.py 2014.05.26
Testing in Python @ Kaosiung.py 2014.05.26Chun-Yu Tseng
 
PyConAPAC2014 BoF Introduction
PyConAPAC2014 BoF IntroductionPyConAPAC2014 BoF Introduction
PyConAPAC2014 BoF IntroductionChun-Yu Tseng
 
PyConAPAC2014 Tainan.py 介紹
PyConAPAC2014 Tainan.py 介紹PyConAPAC2014 Tainan.py 介紹
PyConAPAC2014 Tainan.py 介紹Chun-Yu Tseng
 
暖場 @ Tainan.py 2013.11.30
暖場 @ Tainan.py 2013.11.30 暖場 @ Tainan.py 2013.11.30
暖場 @ Tainan.py 2013.11.30 Chun-Yu Tseng
 
API 文件大亂鬥 @ MOPCON 2013
API 文件大亂鬥 @ MOPCON 2013API 文件大亂鬥 @ MOPCON 2013
API 文件大亂鬥 @ MOPCON 2013Chun-Yu Tseng
 
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28Chun-Yu Tseng
 

Mais de Chun-Yu Tseng (15)

Essential TDD @ pycontw2016
Essential TDD @ pycontw2016Essential TDD @ pycontw2016
Essential TDD @ pycontw2016
 
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
從蟒蛇到神龍 - 從 1 接關繼續打造爬蟲程式
 
Agile x API x Documentation @ NGO [[MOPCON2015]]
Agile x API x Documentation @ NGO [[MOPCON2015]]Agile x API x Documentation @ NGO [[MOPCON2015]]
Agile x API x Documentation @ NGO [[MOPCON2015]]
 
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
快快樂樂成為 Coding Ninja (by pytest) @ PyConAPAC2015
 
程式 x 設計 @ MOPCON 2014
程式 x 設計 @ MOPCON 2014程式 x 設計 @ MOPCON 2014
程式 x 設計 @ MOPCON 2014
 
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
介紹 MOSUT @ 2014.09.26 自由軟體開發與社群發展
 
OO x Python @ Tainan.py x MOSUT x FP 2014.09.27
OO x Python  @ Tainan.py x MOSUT x FP 2014.09.27OO x Python  @ Tainan.py x MOSUT x FP 2014.09.27
OO x Python @ Tainan.py x MOSUT x FP 2014.09.27
 
用路人小幫手 x 回報大改造 @ 2014 台南黑客松
用路人小幫手 x 回報大改造 @ 2014 台南黑客松用路人小幫手 x 回報大改造 @ 2014 台南黑客松
用路人小幫手 x 回報大改造 @ 2014 台南黑客松
 
Testing in Python @ Kaosiung.py 2014.05.26
Testing in Python @ Kaosiung.py 2014.05.26Testing in Python @ Kaosiung.py 2014.05.26
Testing in Python @ Kaosiung.py 2014.05.26
 
Tip for Editors
Tip for EditorsTip for Editors
Tip for Editors
 
PyConAPAC2014 BoF Introduction
PyConAPAC2014 BoF IntroductionPyConAPAC2014 BoF Introduction
PyConAPAC2014 BoF Introduction
 
PyConAPAC2014 Tainan.py 介紹
PyConAPAC2014 Tainan.py 介紹PyConAPAC2014 Tainan.py 介紹
PyConAPAC2014 Tainan.py 介紹
 
暖場 @ Tainan.py 2013.11.30
暖場 @ Tainan.py 2013.11.30 暖場 @ Tainan.py 2013.11.30
暖場 @ Tainan.py 2013.11.30
 
API 文件大亂鬥 @ MOPCON 2013
API 文件大亂鬥 @ MOPCON 2013API 文件大亂鬥 @ MOPCON 2013
API 文件大亂鬥 @ MOPCON 2013
 
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
暖場與 Web 相關的小玩具 @ Tainan.py 2013.09.28
 

哎哎呀呀 Joe 上手 Vim Plugin 心得 @ taipei.py.2016.08.25