一个VS小插件(跳出括号)

Update: Dec.1, 2009, 重新实现了跳出括号的功能,并增加了跳入括号的功能,新版本可以在这里下载。

通常,用 Visual Studio IDE 写程序的同学一定都会用到 Visual Assist ,这二者实乃是珠联璧合,堪称绝配。但是有一个小问题让人极其不爽,我忍了不是一天两天了,比如你想调用某个函数 foo(param) ,首先敲入函数名“foo”,再敲入一个左括号(”,这时 VA 很开心的帮你补全了另外一个右括号)”,很好。于是你在括号里面继续敲入“param”,然后准备换到下一行。但是这时问题来了,因为你大概需要先将手挪到方向键上,按一下->,然后再挪回来,输入 ";" 并回车,这样手要移来移去的,相当繁琐。当然你也可以直接输入 ")",但是这同样也是一个让人很难受的操作,我的小指对此表示严重抗议。另外在索引某个数组 bar[index],或者输入某个字符串abc的时候也会遇到这种情况。

最近我终于对这个问题到了忍无可忍的地步,于是决定写一个插件来解决此事。折腾许久,终算是基本搞定,用起来还算顺手,感兴趣的可以在这里下载安装包和源代码。另外在此要感谢 Anders Cui 写的教程

一.插件的用法

a.       Tab 键以跳过插入点处右方的右结束符号,包含 ])}

b.       Ctrl + [ 键以跳出插入点当前所在的区块。如果插入点距离当前区块的结束位置超过10行,则此命令直接将插入点下移10行。(这里的区块指的是由一对双引号、中括号或者花括号包围起来的代码块)

b.       Ctrl + . 键以跳出插入点当前所在的区块。

c.       Ctrl + , 键以跳入下一个区块。(这里的区块指的是由一对单双引号、中括号、大括号或花括号包围起来的代码块)

二.实现

没什么技术含量,请直接参考源代码。这里简单说一下跳出当前区块功能的实现。其实 VS 或者 VA 对于插入点位于哪个区块知道得一清二楚,但是它就是不告诉你,也不提供命令让你能够自由的跳转。但是我又懒得分析代码的结构,因为如果考虑到字符串中的括号、字符串中的转义单双引号、单个的双引号字符,等等诸如此类的话,情况将比较复杂。于是只好求助于VS,希望它能透露一点内幕,方法是使用Edit.GotoBrace 命令,具体是怎么使用的,大家一看代码就会明白。当然这也导致了效率不高,因此在本插件中只允许10行以内的跳转。

在新的版本中,简单地分析了一下代码中的括号配对,详见源代码。

三.其它

1. 控制命令菜单项的可见性

比如你写了一个操作文本的命令,在当前工作空间没有打开任何文本的情况下,该命令显然是不可用的。于是我希望该命令在这种情况下可以隐藏起来。在此事上我浪费了无数的时间,也Google了很多老外的帖子,最后得出的结论是:不要试图去隐藏你的命令的菜单项,那将是徒劳。

2. 自定义图标

自定义图标必需用16*16像素的16色或者24位色BMP图片,也可以使用透明色,只不过这里的透明色设置得比较猥琐,为 (0, 254, 0) 。我起初还以为是紫色 (255, 0, 255) ,搞了好半天。说到紫色,这里顺便再转一个笑话:

secretGeek

1 人喜欢此条目

> Leon!

Desperately need help!
I been racking my brains about this all morning!

Why isn't my HELLO WORLD purple?

<FONTCOLOR='BLUE'>   <FONTCOLOR='RED'>

      HELLO WORLD! (should be purple)

   </FONT><FONT>

S.R.

posted @ 2009-11-28 19:01  atyuwen  阅读(6585)  评论(14编辑  收藏  举报