• 前言

有时写代码需要写注释的时候

甚是苦恼

写吧 怕麻烦

不写吧 似乎这代码估计自己都看不懂

权衡之下

似乎找一个自动写注释的方法最靠谱

一直在VS下开发

偶尔听人说过有一个宏工具可以帮助开发者快速注释

但是寻匿了很久

硬是木有找到

后来才发现

原来自VS2012以来,这个宏工具去掉了

但是我使用的编译器恰恰是VS2012和VS2013

所以...

最近换了个电脑,

直接装个VS2010

今天又是周末

于是就倒腾这个宏工具来着的

虽然没学过VB

但是有强大的网络在+搜素引擎

于是乎

便有了这个模板

  • 模板代码如下:
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.IO
Imports System.Collections.Specialized Public Module MyAutoCommemt '这里要与保存的Module文件名保持一致,不然无法调用宏
Function AlignTitle(ByVal title As String) As String
title += Space(16 - title.Length)
AlignTitle = " *" + title
End Function Function AlignValue(ByVal value As String)
value += Space(16 - value.Length)
AlignValue = value
End Function Sub ParamOnce()
Dim objSel As TextSelection
objSel = CType(DTE.ActiveDocument.Selection, TextSelection)
DTE.UndoContext.Open("FileCreateEn")
objSel.StartOfDocument(False)
objSel.Insert("#pragma once" + vbNewLine)
DTE.UndoContext.Close()
End Sub Public Sub FileCreateEn()
'DESCRIPTION 文件签名
Dim fil_info(64) As String
Dim i As Integer
i = 0
fil_info(i) = "//Copyright (c) 2013 hustfisher All Rights Reserved"
i += 1 fil_info(i) = "/*********************************************************************************************"
i += 1 fil_info(i) = AlignTitle("file name")
fil_info(i) += " : "
fil_info(i) += DTE.ActiveDocument.Name
i += 1 fil_info(i) = AlignTitle("description")
fil_info(i) += " : "
i += 1 fil_info(i) = AlignTitle("create time")
fil_info(i) += " : "
fil_info(i) += Date.Now.ToString()
i += 1 fil_info(i) = AlignTitle("author name")
fil_info(i) += " : "
fil_info(i) += "hustfisher"
i += 1 fil_info(i) = AlignTitle("author email")
fil_info(i) += " : "
fil_info(i) += "hustfisher@yeah.net"
i += 1 fil_info(i) = AlignTitle("author blog")
fil_info(i) += " : "
fil_info(i) += "http://blog.csdn.net/jiejiaozhufu"
i += 1 fil_info(i) = AlignTitle("version")
fil_info(i) += " : "
fil_info(i) += "1.0"
i += 1 fil_info(i) = " **********************************************************************************************/"
i += 1 Dim Description As New StringBuilder
For v = 0 To i
Description.AppendFormat("{0}{1}", fil_info(v), vbNewLine)
Next
'插入文件头部
Dim objSel As TextSelection
objSel = CType(DTE.ActiveDocument.Selection, TextSelection)
DTE.UndoContext.Open("FileCreateEn")
objSel.StartOfDocument(False)
objSel.Insert(Description.ToString())
DTE.UndoContext.Close()
End Sub Public Sub FileModifyEn()
'modify file
Dim fil_info(64) As String
Dim i As Integer
i = 0
fil_info(i) = "//Copyright (c) 2013 hustfisher All Rights Reserved"
i += 1 fil_info(i) = "/*********************************************************************************************"
i += 1 fil_info(i) = AlignTitle("file name")
fil_info(i) += " : "
fil_info(i) += DTE.ActiveDocument.Name
i += 1 fil_info(i) = AlignTitle("description")
fil_info(i) += " : "
i += 1 fil_info(i) = AlignTitle("modify time")
fil_info(i) += " : "
fil_info(i) += Date.Now.ToString()
i += 1 fil_info(i) = AlignTitle("author name")
fil_info(i) += " : "
fil_info(i) += "hustfisher"
i += 1 fil_info(i) = AlignTitle("author email")
fil_info(i) += " : "
fil_info(i) += "hustfisher@yeah.net"
i += 1 fil_info(i) = AlignTitle("author blog")
fil_info(i) += " : "
fil_info(i) += "http://blog.csdn.net/jiejiaozhufu"
i += 1 fil_info(i) = AlignTitle("version")
fil_info(i) += " : "
fil_info(i) += "1.1"
i += 1 fil_info(i) = " **********************************************************************************************/"
i += 1 Dim Description As New StringBuilder
For v = 0 To i
Description.AppendFormat("{0}{1}", fil_info(v), vbNewLine)
Next
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.StartOfLine()
DocSel.NewLine()
DocSel.LineUp()
DocSel.Insert(Description.ToString())
End Sub Sub FunctionSignEn()
'function
Dim data As New StringBuilder
With data
.Append(vbNewLine)
.AppendFormat("/*********************************************************************************************{0}", vbNewLine)
.AppendFormat(" *function name{0}: {1}", vbTab, vbNewLine)
.AppendFormat(" *create time{0}: {1} {2}", vbTab, Date.Now.ToString(), vbNewLine)
.AppendFormat(" *author name{0}: {1} {2}", vbTab, "hustfisher", vbNewLine)
.AppendFormat(" *func version{0}: 1.0 {1}", vbTab, vbNewLine)
.AppendFormat(" *description {0}: {1}", vbTab, vbNewLine)
.AppendFormat(" *para title {0}: IN/OUT{1}{2}TYPE{3}{4}{5}DESCRIPTION{6}", vbTab, vbTab, vbTab, vbTab, vbTab, vbTab, vbNewLine)
.AppendFormat(" *parameter 1{0}: {1}", vbTab, vbNewLine)
.AppendFormat(" *return type {0}: {1}", vbTab, vbNewLine)
.AppendFormat(" *********************************************************************************************/")
End With
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.StartOfLine()
DocSel.NewLine()
DocSel.LineUp()
DocSel.Insert(data.ToString())
End Sub Sub FunctionSignEnEx()
'function
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
Dim line As String
DocSel.SelectLine()
line = DocSel.Text().ToString()
line = Trim(line)
Dim name As String
Dim para As String
Dim return_type As String
Dim pos As Integer
'type
pos = line.IndexOf(" ")
If pos = -1 Then
Return
End If
return_type = Mid(line, 1, pos)
'name
Dim pos1 As Integer
pos1 = line.IndexOf("(")
If pos1 = -1 Then
Return
End If
name = Mid(line, pos + 1, pos1 - pos).Trim
'para
pos = pos1 + 1
pos1 = line.LastIndexOf(")")
If pos1 = -1 Then
Return
End If
para = Mid(line, pos + 1, pos1 - pos).Trim()
Dim words() As String
words = Split(para, ",")
Dim func_info(32) As String
Dim i As Integer
i = 0
func_info(i) = "/*********************************************************************************************"
i += 1 func_info(i) = AlignTitle("function name")
func_info(i) += " : "
func_info(i) += name
i += 1 func_info(i) = AlignTitle("create time")
func_info(i) += " : "
func_info(i) += Date.Now.ToString()
i += 1 func_info(i) = AlignTitle("author name")
func_info(i) += " : "
func_info(i) += "hustfisher"
i += 1 func_info(i) = AlignTitle("version")
func_info(i) += " : "
func_info(i) += "1.0"
i += 1 func_info(i) = AlignTitle("description")
func_info(i) += " : "
i += 1 func_info(i) = AlignTitle("return type")
func_info(i) += " : "
func_info(i) += return_type
i += 1 func_info(i) = AlignTitle("parameter list")
func_info(i) += " : "
func_info(i) += AlignValue("IN/OUT")
func_info(i) += AlignValue("TYPE")
func_info(i) += AlignValue("NAME")
func_info(i) += AlignValue("DESCRIPTION")
i += 1 Dim j As Integer
j = 1
Dim paraBuf As String
For Each v In words
func_info(i) = "parameter "
func_info(i) += j.ToString()
func_info(i) = AlignTitle(func_info(i))
func_info(i) += " : "
func_info(i) += AlignValue("IN")
paraBuf = v.Trim()
pos = paraBuf.LastIndexOf(" ")
If -1 = pos Then
func_info(i) += AlignValue("void")
Else
func_info(i) += AlignValue(Mid(paraBuf, 1, pos).Trim())
func_info(i) += AlignValue(Mid(paraBuf, pos + 1, paraBuf.Length).Trim())
End If
i += 1 j += 1
Next
Dim Description As New StringBuilder
For v = 0 To i - 1
Description.AppendFormat("{0}{1}", func_info(v), vbNewLine)
Next
Description.AppendFormat(" *********************************************************************************************/{0}", vbNewLine)
DocSel.StartOfLine()
DocSel.LineUp()
DocSel.Insert(Description.ToString)
End Sub Sub AddPara()
ActiveDocument.Selection.Text = "*parameter 2" + vbTab + ":"
End Sub Sub ClassSignEn()
'function
Dim data As New StringBuilder
With data
.Append(vbNewLine)
.AppendFormat("/*********************************************************************************************{0}", vbNewLine)
.AppendFormat(" *calss name : {0}", vbNewLine)
.AppendFormat(" *create time : {0} {1}", Date.Now.ToString(), vbNewLine)
.AppendFormat(" *author name : {0} {1}", "hustfisher", vbNewLine)
.AppendFormat(" *calss vers : 1.0 {0}", vbNewLine)
.AppendFormat(" *description : {0}", vbNewLine)
.AppendFormat(" *********************************************************************************************/")
End With
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.StartOfLine()
DocSel.NewLine()
DocSel.LineUp()
DocSel.Insert(data.ToString())
End Sub Sub ModifyTag()
'DESCRIPTION 增添修改
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.EndOfLine()
ActiveDocument.Selection.Text = "/* hustfisher modified at " + Date.Now.ToString() + " */"
End Sub Sub TodoTag()
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.EndOfLine()
ActiveDocument.Selection.Text = " // TODO:" + Date.Now.ToString()
End Sub Sub AddCommentC()
Dim data As New StringBuilder
With data
.Append(vbNewLine)
.AppendFormat("/*********************************************************************************************{0}", vbNewLine)
.AppendFormat(" *create time : {0} {1} author : {2} {3}", Date.Now.ToString(), vbTab, "hustfisher", vbNewLine)
.AppendFormat(" *description : {0}", vbNewLine)
.AppendFormat(" *********************************************************************************************/")
End With
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.StartOfLine()
DocSel.NewLine()
DocSel.LineUp()
DocSel.Insert(data.ToString())
End Sub Sub AddComment()
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.EndOfLine()
ActiveDocument.Selection.Text = " // Add by hustfisher " + Date.Now.ToString
End Sub End Module
  • 使用注意事项

模板使用的时候,在VS2010下按快捷键alt+F11或者在菜单栏下的tools 下打开宏管理器,此时在MyCacros下新建一个文件

然后把模板文件考进去,不过需要注意的是,文件名和末班名需要相同

否则...

  • 功能
  1. 文件创建注释模板
  2. 文件修改注释模板
  3. 类注释模板
  4. 函数注释模板
  5. 自动函数注释(我觉得这个很不错)
  6. TODO Tag模板
  7. C语言格式的一般注释模板
  8. C++语言格式的一般注释模板
  • 注释模板效果
    //Copyright (c) 2013 hustfisher All Rights Reserved
    /*********************************************************************************************
    *file name : main.cpp
    *description :
    *create time : 2013/11/16 15:53:39
    *author name : hustfisher
    *author email : hustfisher@yeah.net
    *author blog : http://blog.csdn.net/jiejiaozhufu
    *version : 1.0
    **********************************************************************************************/ #include "normalise.h"
    #include <Windows.h>
    #include <stdio.h> #define FRAME_IN_NUM (128)
    #define LOOP_TIMES (60240)
    #define ALIGN_SIZE (64) /*********************************************************************************************
    *function name : InitData
    *create time : 2013/11/16 15:53:47
    *author name : hustfisher
    *version : 1.0
    *description :
    *return type : void
    *parameter list : IN/OUT TYPE NAME DESCRIPTION
    *parameter 1 : IN float* pData
    *parameter 2 : IN size_t nCount
    *********************************************************************************************/
    void InitData(float* pData, size_t nCount)
    {
    int my_sign[] = {1, -1};
    srand(GetTickCount());
    for (size_t i=0; i<nCount; i++)
    {
    pData[i] = rand()%10*my_sign[rand()%2]*1.0f;
    }
    }
    /*********************************************************************************************
    *function name : main
    *create time : 2013/11/16 15:53:53
    *author name : hustfisher
    *version : 1.0
    *description :
    *return type : int
    *parameter list : IN/OUT TYPE NAME DESCRIPTION
    *parameter 1 : IN void
    *********************************************************************************************/
    int main()
    { return 0;
    }

Visual Studio宏注释模板的更多相关文章

  1. Visual Studio 宏的高级用法

    因为自 Visual Studio 2012 开始,微软已经取消了对宏的支持,所以本篇文章所述内容只适用于 Visual Studio 2010 或更早期版本的 VS. 在上一篇中,我已经介绍了如何编 ...

  2. DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解

    关于 DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  3. Android Studio(六):Android Studio添加注释模板

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  4. 修改Visual Studio的默认模板

    如果我在Visual Studio创建的项目中每次新建一个文件,自动生成注释或者是结构的话,那么就需要改下默认的模板了.下面以vs2013为例 我们添加的文件有很多种,这里就举例3种,CSharp类文 ...

  5. Visual Studio图片注释image-comments扩展

            有一个开源的Visual Studio小工具image-comments,它用于在源代码注释中插入图片,您可以到这儿下载.目前支持Visual Studio 2010/2012 Sta ...

  6. Visual Studio 2010 类模板的修改

    第一步:找到类文件模板路径 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\C ...

  7. Visual Studio安装卸载模板

    Visual Studio中有两种类型的模板:项目模板和项模板 一.已安装模板: 默认情况下,与产品一起安装的模板位于以下位置: ①\<Visual Studio 安装目录>\Common ...

  8. Android Studio自定义注释模板及生成JavaDoc

    刚开始学习Android,使用了Android Studio IDE.为了将来生产JavaDoc,学习一下如何自定义注释模板. . 自定义注释模板 1. 通过 File –>Settings 或 ...

  9. Visual Studio 自定义项目模板

    经常我们需要新建一个项目,然后新建我们的View文件夹,ViewModel文件夹,Model文件夹,还有把我们的ViewModelBase放入我们的VIewModel,如果还用框架,还需要加上好多. ...

随机推荐

  1. 第一章——第三节 intent的匹配原则

    问题 一.三种匹配原则 二.匹配的原理 三.隐式启动Activity,如何判断跳转的Activity是否存在. 判断Intent是否可行的两种办法.

  2. 关于thinkphp中Hook钩子的解析

    在tp框架下的Library/Think 下有一个Hook类,这个是用来以插件形式来实例化类并且执行方法的 static private  $tags       =   array(); 这里有一个 ...

  3. Ubuntu14.0.4 64位 ADT 连接手机调试问题

    1:使用 lsusb 命令查看USB 设备 y@y:~$ lsusbBus 001 Device 002: ID 8087:8000 Intel Corp. Bus 001 Device 001: I ...

  4. SWFUpload批量上传插件

    SWFUpload是一个批量上传插件,在HTML4.1里面,估计也只有Flash+javascript配合才能够做到了.先复制个重要的网址,这个应该是官方的文档了,相当齐全. http://leeon ...

  5. Arcgis api For silverlight 加载高德地图

    原文 http://www.cnblogs.com/thinkaspx/archive/2012/11/13/2767752.html 地图仅供演示,研究使用.如要商用 请联系厂商. public c ...

  6. 用JSTL简化Java Web开发

    如今这个手中的项目jstl都不要,不方便呢... 链接学习下载:http://c20000001.blog.163.com/blog/static/1154754120088303531450/

  7. 过滤ASCII码中的不可见字符, ASCII三部分, 各控制字符详解, 去^@,^M

    今天产品部同事报告了一个BUG,经过调试发现,由于用户输入的字符串中,包含字符0x1E, 也就是”记录分隔符”(Record Separator, Notepad++ 显示为[RS]),导致JavaS ...

  8. sqlexpress 不用管理工具 sa

    操作步骤: 开始=>运行=>(快捷键:win+R) cmd, 屎劲敲回车. 出现黑色的DOS窗体后,输入如下几条命令: 1.SQLCMD -S (local)\sqlexpress -E ...

  9. UVA_埃及分数(Hard Version) UVA 12588

    Problem EEg[y]ptian Fractions (HARD version)Given a fraction a/b, write it as a sum of different Egy ...

  10. 在国内使用cnpm代替npm

    npm是Node.js的模块依赖管理工具,由于使用npm安装包是从国外服务器下载,在国内很容易受到网络的影响,速度非常慢,因此可以选用cnpm.cnpm可以使用淘宝团队提供的淘宝npm镜像,你可以用此 ...