让Visual Studio 也支持JS代码折叠 —— 续 [ Visual Studio | Js | ScriptOutline | SmallOutline ]...

 

前言

      上文让JS代码折叠的功能能用了,本文将对代码继续改进以期更好用、更实用,随后有介绍Visual Studio JS方面的几个插件。

 

文章

      1.      VS2003折叠代码的Micro

      2.      MSDN

      3.      Document Outline for Client Script in Visual Studio 2005

 

正文

      一、继续上文改造,主要是支持region 后面跟注释和显示注释

    1.1  效果图,这里就不贴步骤了,上文有详细的步骤。

    

    1.2  宏代码,修改上文使用的宏即可。

Option Strict Off
Option Explicit Off

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Collections

Public Module JsMacros

    
Sub OutlineRegions()

        
Const REGION_START As String = "//region"
        
Const REGION_END As String = "//endregion"

        
Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection
        
Dim startRegions As Stack = New Stack()         '堆栈
        Dim intCollapseStart As Integer = 0
        
Dim intCollapseNum As Integer = 0
        
Dim strLines() As String

        selection.StartOfDocument(
True)
        selection.SelectAll()
        strLines 
= selection.Text.Split(vbCrLf)         '获取所有行

        
For i = 0 To strLines.Length - 1
            
If strLines(i).TrimStart.StartsWith(REGION_START) Then
                startRegions.Push(i 
+ 1)                            '保存行号   
            End If
            
If strLines(i).TrimStart.StartsWith(REGION_END) Then
                intCollapseStart 
= startRegions.Pop() + 1           '返回行号   
                intCollapseNum = (i + 1- intCollapseStart + 1     '返回要折叠的行数
                selection.GotoLine(intCollapseStart)
                selection.LineDown(
True, intCollapseNum)
                selection.SwapAnchor()
                selection.OutlineSection()
            
End If
        
Next

        selection.StartOfDocument()
    
End Sub

End Module

     1.3  注意

      1.3.1.  由上文的"//#region" 、"//#endregion"修改成了本文的"//region"和"//endregion" 。

      1.3.2   如果想把"//region"这一行也隐藏掉只剩下"...",只需要将宏代码"intCollapseStart = startRegions.Pop() + 1"后面的"+1"去掉即可。遗憾的是没能弄出C# 折叠的那种效果出来。

      1.3.3  如果还想支持if for 等关键字的折叠,强烈推荐文章1,本文也是在此文的基础上修改的,改正了"//region"后面不能接注释的缺陷。

 

  二、支持JS的Visual Studio插件

            2.1      ScriptOutline      从试用的情况看来并没有折叠,但是他显示了方法大纲,且无需设置快捷键,作为插件和VS集成,同样能达到快速找到方法的目的。参照文章3。

                  2.1.1      下载插件:      http://www.geocities.com/evgenypages/ScriptOutline.zip

                  2.1.2      拷贝压缩文件中的ScriptOutline.AddIn、ScriptOutline.dll到目录 C:\Documents and Settings\<username>\My Documents\Visual Studio 2005\Addins

                        如果Addins目录没有的话自己建一个就行。

                  2.1.3      工具(Tools) -> 外部程序管理器(Add-in Manager...),勾上ScriptOutline插件,确定即可显示Script Outline窗口。

                  2.1.4      编写测试代码,效果如图:

                  

                  藉此我们可以在方法间快速切换!注意这里使用的环境是Microsoft Visual Studio 2005。

                  

            2.2      SmartOutline

                  2.2.1  下载 http://submain.com/download/smartoutline/ 输入邮箱地址点下载即可。

                  2.2.2      安装插件 SmartOutline_v1.1.msi ,下一步下一步就行。工具栏会出现SmallOutline,可能需要重启VS。

                  2.2.3      编写测试代码,依次按步骤:

                        2.2.3.1      选中要折叠的函数,出现如下提示

        

                        2.2.3.2      点击提示或输入组合快捷键 Alt+S、Alt+C ,弹出如下对话框,输入JS代码折叠后显示的注释名

         

                        2.2.3.3      最终效果

         

      2.2.4  总结

        比较之下还是这个最好用,如下优点:

        a).  不污染源代码,和C#里面写#region的效果一样。

        b).  折叠效果好,能显示折叠后代码块的注释,不需要像宏那样关掉之后重新激活。

        c).  此插件同时支持VS2005和VS2008,不仅如此,还支持C#、HTML、CSS等,可以从SmallOutline -> General -> Enable SmallOutline for the following files下面的列表里看到支持的其他文件。

 

            2.3      JavaScript Function Outliner插件 也请大家关注和支持此园友的插件 : )

 

结束      

  宏是个好东东,虽然有现成的插件用,仍然假借这个机会来学习一翻,甚至有想法通过宏来辅助ORM工具生成一些代码,以及对代码生成均有参考价值:)

 

 

 

本博Visual Studio相关文章

  1.  Visual Studio 让JS也支持代码折叠 [ Visual Studio | #region | #endregion ]

  2.  Visual Studio 模板 —— 自定义WebForm模板

  3.  用Visual Studio 2005/2008提取EXE文件中的资源[图片|htm|光标文件]

  4.  Microsoft Visual Studio 2005 快捷键提示

  5.  Visual Studio 在根目录下运行文件系统站点 [ Visual Studio | 文件系统 | WebDev.WebServer.EXE ]

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlserver数据库访问帮助类

1 /// <summary>2 /// 数据库访问帮助类3 /// </summary>4 public static class DbHelper5 {6 private const string ConnStr "server127.0.0.1;databasedb_test;Uiduser1;PwdPs123321;";7 8 9 /// <summary> 10 /// 执行 增、删、改 11 /// <…

嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX

嵌入式OS入门笔记-以RTX为案例&#xff1a;二.快速移植到RTX本篇笔记将简单介绍RTX&#xff0c;包括基本架构&#xff0c;如何在Keil中配置。需要安装ARM-MDK和一块硬件板&#xff0c;笔记以STM32F4Discovery为例子。1.为什么要用RTOS&#xff1f;尽管把所有程序放在一个大的循…

再解析下内核自旋锁和优先级翻转问题

[内核同步]自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼&#xff1f;Linux内核自旋锁之前写的自旋锁的文章&#xff0c;现在再加一篇&#xff0c;可能单纯的一两次说明不能把问题说清楚。所以再写一篇文…

有许多话不能说

说的问题是一个大问题。人&#xff0c;长了嘴巴&#xff0c;除了吃饭便是说话。当然还有代替鼻孔呼吸、排除呼吸道污秽等功能&#xff0c;但均不可与说同日而语。涉及说&#xff0c;就有说的内容问题&#xff0c;据观察&#xff0c;有许多话是不能说的。 好话不能说&#xff0c…

ios 逆向编程(环境搭建)

首先如果你想要逆向其他的APP 动态的查看 或者修改人家APP里面的东西 1&#xff0c; 首先要有一台越狱的手机 最好是9.1以下的&#xff0c;因为9.2以上&#xff08;包括9.2&#xff09;就不能完美越狱了 2&#xff0c;手机也要5s以上的&#xff08;因为从5S开始支持arm64架构&…

嵌入式OS入门笔记-以RTX为案例:三.初探进程

嵌入式OS入门笔记-以RTX为案例&#xff1a;三.初探进程1.理论 进程&#xff0c;英文称呼很多Process, Task 等等&#xff0c;一般通用操作系统称Process的比较多&#xff0c;各种称呼涵义稍微有不一样。一般而言&#xff0c;进程是对一个运行单元的抽象&#xff0c;主要包括…

图文方式管理Linux服务器(Webmin)

客户让做webmin&#xff0c;才知道linux下也有界面的管理了 对于大部分使用计算机的人来说&#xff0c;linux的印象就是一大堆的命令字符以及黑黑的显示屏。虽然现在Linux的桌面版有了长足的进步&#xff0c;界面已和Windows不相上下了&#xff0e;但对于Linux服务器来说&am…

最大、最小堆的实现

最大最小堆 堆是一种经过排序的完全二叉树&#xff0c;其中任一非终端节点的数据值均不大于&#xff08;或不小于&#xff09;其左子节点和右子节点的值。 最大堆和最小堆是二叉堆的两种形式。 最大堆&#xff1a;根结点的键值是所有堆结点键值中最大者。 最小堆&#xff1a;根…

嵌入式OS入门笔记-以RTX为案例:四.简单的时间管理

嵌入式OS入门笔记-以RTX为案例&#xff1a;四.简单的时间管理 上一节简单记录了进程task。有了进程以后&#xff0c;我们需要关心怎么样分配CPU资源&#xff08;或者运行时间&#xff09;给每个进程。那么就要引入排程&#xff08;scheduling&#xff09;的概念。排程一般都是O…

我等这个含蓄的技术男当上了CEO

大家好&#xff0c;祝大家五一节日快乐&#xff01;今天没有写技术文章&#xff0c;今天想吹一个人&#xff0c;他是我的朋友&#xff0c;他做公众号很久了&#xff0c;技术文章写的也不错&#xff0c;但是阅读和关注量一直没有上来&#xff0c;我之前好几次在公众号上转发了他…

Oracle的列转行问题

Oracle的列转行问题Oracle中使用语句将行数据转换称不同的列表示&#xff0c;或者将不同的列数据写到同一列的不同行上的行列转换问题是一个非常传统的话题。网络上流传了很多将行数据转换称列数据的方法和应用实例&#xff0c;一般通过decode或者case函数与聚合函数联合实现功…

Linux CAN通信

Linux CAN通信 实现了Linux下的CAN通信——初始化&#xff0c;发两个送和接收&#xff08;采用队列形式&#xff09;&#xff0c;使用两个线程&#xff0c;还有一个超时响应目前未写。接收部分使用select实现。 #ifndef _CAN_H_ #define _CAN_H_#include <stdio.h> #incl…

(四)Kinect人脸识别

kinect可以通过摄动摄像头不仅可以获取人脸位置旋转信息&#xff0c;也可以获取脸部轮廓的三维坐标 可以参考插件中的场景KinectFaceTrackingDemo1-4&#xff0c;在kinectManager基础上需要脚本FacetrackingManager。 1&#xff09;通过KinectManager kinectManager KinectMan…

广东总冠军

lets go tiger 看这篇文章之前&#xff0c;先看看我们看球的视频 恭喜广东拿下总冠军&#xff01; 恭喜胡明轩夺得FMVP&#xff01; 我当时预测的是周鹏或者胡明轩拿下FMVP&#xff0c;最后是胡明轩&#xff0c;广东后场三条枪表现都非常亮眼。如果是上一场广东夺冠&#xff0c…

Spring切入点表达式常用写法

Spring切入点表达式常用写法自从使用AspectJ风格切面配置&#xff0c;使得Spring的切面配置大大简化&#xff0c;但是AspectJ是另外一个开源项目&#xff0c;其规则表达式的语法也稍稍有些怪异。下面给出一些常见示例的写法&#xff1a;比如&#xff0c;下面是一个对Service包上…

每日一题(1) —— 数组计算

判断下面代码是否可执行&#xff1f;如果可执行&#xff0c;执行结果是多少&#xff1f; #include <stdio.h>int main(void) {int array[10] {0, 2, 3, 4, 5, 6, 7, 8, 9, 10};0[array] 1;printf("%d\n", (-1)[array 5]);return 0; } 分析&#xff1a; C语…

SQLAlchemy Script

SQLAlchemy: 1.由于sqlalchemy中没有提供choice方法&#xff0c;所以借助SQLAlchemy-Utils组件提供的choice方法 from sqlalchemy_utils import ChoiceType Base declarative_base() class Xuan(Base): __tablename__ xuan types_choices ( (1,欧美), (2,日韩), (3,老男孩),…

内存文章汇总,并剖析mmap

在看这篇文章之前&#xff0c;可以先看看下面这几篇文章Linux内存&#xff0c;先看这篇文章Linux内存寻址方式Linux虚拟内存TLBLinux物理内存初始化Linux io内存存在的意义~修改cmdline 把内存改成512MB用mtrace定位内存泄漏什么是内存泄漏&#xff1f;Linux内存管理slub分配器…

[综述泛读] A survey on web services composition (IJWGS, 2005)

Time: 2.5 hours Dustdar S, Schreiner W. "A survey on web services composition." International Journal of Web and Grid Services: 1-30. 2005 (30 pages, 单栏) (gs:169) Schahram Dustdar (维也纳技术大学, full prof) Dusdar是Distributed Systems Group的老…

Spring 事务与脏读、不可重复读、幻读

索引&#xff1a; 目录索引 参看代码 GitHub&#xff1a; 1.Spring 事务 2.事务行为 一、Spring 事务: Spring 的事务机制是用统一的机制来处理不同数据访问技术的事务处理。 Spring 的事务机制提供了一个 PlatformTransactionManager 接口&#xff0c;不同的数据访问技术的事务…