demoshop

demo, trying to be the best_

官方網站
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 ,因為踩的雷太多了,多到我累了….想要回歸原始,但又不想那麼蠢的一對一慢慢打,這時候就是巨集上場的時候了,先來看成果

雖然動作不流暢,但已經節省了許多的時間了,來分解一下這些巨集的動作

  1.  按 Enter
  2.  按 Ctrl +J 叫出 清單成員(List Members)
  3.  按
  4.  按 Enter
  5.  輸入=d.
  6.  按 Ctrl +J 叫出 清單成員(List Members)
  7.  按
  8.  按 Enter
  9.  輸入 ,
     
巨集就是把這些鍵盤輸入的步驟錄製起來,重複播放就可以達到上面的效果(所以說熟習鍵盤熱鍵很重要)錄製完的巨集檔案會長這樣
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也行),只需要使用以下指令即可完成動作。
  1.  複製C:\Users\xxxx\AppData\Local\Microsoft\VisualStudio\14.0\Macros 內的腳本
  2.  貼在雲端同步的目錄中 比如 D:\OneDrive\Macros
  3.  刪除 C:\Users\xxxx\AppData\Local\Microsoft\VisualStudio\14.0\Macros 資料夾
  4.  開啟命令提示字元(CMD)
  5.  輸入mklink /d C:\Users\xxxx\AppData\Local\Microsoft\VisualStudio\14.0\Macros D:\OneDrive\Macros
利用 mklink 資料夾連結指令,讓放在 OneDrive 的 Macros 等於原本的 Macros 資料夾進而達到同步的功能(當然你另一個工作環境也要做一樣的操作)
現在,不管你有多少環境都可以使用一樣的巨集與熱鍵了,享受巨集帶來的便利吧(sample資料夾一定要去看,裡面有不少有趣的東西)
 

 

回應討論