38
【台北拍限定版】 哎哎呀呀 Joe 上⼿ Vim Plugin ⼼得

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

Embed Size (px)

Citation preview

【台北拍限定版】

哎哎呀呀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 時間