【台北拍限定版】
哎哎呀呀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
➤ 對於中型或是稍微⼤⼀點的專案,就有點⼒不從⼼
➤ 速度太慢
➤ 結果的過濾很麻煩
➤ 搜尋多次後不知道怎麼還原之前的結果
➤ …
找⼀些看 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 無關的部分(發動陷阱卡!) ➤ 請移駕本週末的台南拍
➤ 然後我就寫完了。
接下來
➤ 繼續補 Readme
➤ 調整 Menu 跟 Keybindings
➤ 把 Options 寫活
➤ ⽀援 Javascript/Ruby/Go …
➤ 加強 Async 的部分
➤ Vim 8 ???
➤ 發 PR 給 CodeQuery
➤ 跪求測試 and 給讚!
“我才不告訴你怎麼離開 Vim 呢 XD
QA 時間