Visual Studio Macro 套件讓 VS 擁有巨集功能
- 2017-01-02
- 14422
- 0
- 官方網站
- https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MacrosforVisualStudio
之前版本的 Visual Studio 是內建巨集功能的,但後來的版本就將巨集移除(傳說是使用人數太少),的確巨集真的不是天天用的東西,但需要用到的時候沒有巨集到也滿麻煩的,受到不少人建議後官方想了一個兩全其美的方式,推出了 Visual Studio Macro 套件,讓巨集功能得以重返。
如果您會使用巨集而且想念它的話可以利用 Visual Studio 內的擴充功能和更新搜尋 「Macro」就可以找到
安裝以後就什麼都不會發生…請玩家記住兩個熱鍵
- 錄製巨集:Ctrl+M,R
- 播放巨集:Ctrl+M,Enter
如果記不住呢?你可以把 Macro Explorer 打開
「檢視」→「其他視窗」→「Macro Explorer」
開啟 Macro Explorer 後就有 GUI 可以用啦
如果你不清楚巨集到底要幹什麼還能看到這裡,想必你是有心想了解,給各位一個小情境。
假設我們有一個 EditorModel 是用來收頁面 Post 回來的資料
class EditorModel { public Guid Id { get; set; } public string Title { get; set; } public string Body { get; set; } public string Attachment { get; set; } public DateTime ScheduleDate { get; set; } public Guid UserId{ get; set; } public bool IsEnabled { get; set; } }
並且有一個 ViewModel 用來呈現
class ViewModel { public Guid Id { get; set; } public string Title { get; set; } public string Body { get; set; } public string Attachment { get; set; } public DateTime ScheduleDate { get; set; } }
各位應該看的出來,這兩個 Model 有一點點的不一樣,如果要把 EditorModel 轉給 ViewModel 要怎麼辦?
樸實的開發者就會一對一的轉換
樸實的開發者就會一對一的轉換
static void Main(List<EditorModel> args) { args.Select(d => new ViewModel() { Id=d.Id, Title=d.Title, Body=d.Body, Attachment=d.Attachment, ScheduleDate=d.ScheduleDate, }); }
高段的開發者可能會使用 AutoMapping 來處理,但我很不想用 AutoMapping ,因為踩的雷太多了,多到我累了….想要回歸原始,但又不想那麼蠢的一對一慢慢打,這時候就是巨集上場的時候了,先來看成果
雖然動作不流暢,但已經節省了許多的時間了,來分解一下這些巨集的動作
- 按 Enter
- 按 Ctrl +J 叫出 清單成員(List Members)
- 按 ↓
- 按 Enter
- 輸入
=d.
- 按 Ctrl +J 叫出 清單成員(List Members)
- 按 ↓
- 按 Enter
- 輸入 ,
巨集就是把這些鍵盤輸入的步驟錄製起來,重複播放就可以達到上面的效果(所以說熟習鍵盤熱鍵很重要)錄製完的巨集檔案會長這樣
dte.ActiveDocument.Selection.NewLine(); dte.ExecuteCommand("Edit.ListMembers"); sleep(400); dte.ActiveDocument.Selection.LineDown(); dte.ActiveDocument.Selection.NewLine(); Macro.InsertText("=d."); sleep(400); dte.ExecuteCommand("Edit.ListMembers"); sleep(600); dte.ActiveDocument.Selection.LineDown(); dte.ActiveDocument.Selection.NewLine(); Macro.InsertText(","); function sleep(duration) { var now = new Date().getTime(); while (new Date().getTime() < now + duration) { } }
其中的sleep是 demo 自己加上去的,因為如果沒有 sleep 時間成員清單會來不及展開,造成失敗。這也是為什麼看起來沒有非常流暢的原因。
到這裡你應該有發現巨集腳本是用 javascript 寫的,所以說 javascript 統一世界真的不是假的….當確定好巨集腳本正常無誤的時候建議您給它一個名字並且存檔,如果需要也可以給它一個熱鍵,這都是按滑鼠右鍵就會跳出的提示,就不抓圖了,當名字和熱鍵都設定好時就會長這樣
幾個比較常用的巨集設定熱鍵以後,就會讓平常的操作更方便順手,但如果你有一個以上的工作環境,你會發現一個淒涼的事實,巨集腳本沒有同步功能………..
腳本沒有同步功能實在是非常淒涼的,能帶走的腳本才是好腳本,所以 demo 的解決方式是將腳本的目錄放到 OndDrive(你要放Dropbox也行),只需要使用以下指令即可完成動作。
- 複製
C:\Users\xxxx\AppData\Local\Microsoft\VisualStudio\14.0\Macros
內的腳本 - 貼在雲端同步的目錄中 比如
D:\OneDrive\Macros
- 刪除
C:\Users\xxxx\AppData\Local\Microsoft\VisualStudio\14.0\Macros
資料夾 - 開啟命令提示字元(CMD)
- 輸入
mklink /d C:\Users\xxxx\AppData\Local\Microsoft\VisualStudio\14.0\Macros D:\OneDrive\Macros
利用 mklink 資料夾連結指令,讓放在 OneDrive 的 Macros 等於原本的 Macros 資料夾進而達到同步的功能(當然你另一個工作環境也要做一樣的操作)
現在,不管你有多少環境都可以使用一樣的巨集與熱鍵了,享受巨集帶來的便利吧(sample資料夾一定要去看,裡面有不少有趣的東西)
回應討論