原文 http://www.cnblogs.com/renji/archive/2007/12/11/resharper.html
面对这样一个问题:为什么.net能够比java更加快速的完成开发?恐怕最大的优势 在于Microsoft提供了一个无比强大的IDE。它的强大在于适用于各个层次的开发人员。当你还是一只小小鸟的时候,可以学会 drag&drop,当你开始写代码的时候,你会发现设计器生成的代码是多么愚蠢和臃肿。当你自己能够写出干净的代码时,可能再也不想切换到设计 器中去了(切换/F7)。我相信我们中的大部分人,即使是最资深的Windows开发人员,用VS写代码比用记事本的效率要高很多,因为我们毕竟需要 IDE的帮助以提高我们的生产力。但是在那个没有Resharper的年代里,你的生产力顶多停留在两个轮子的时代,另两个轮子,只有在你熟悉了 Resharper以后才能转动起来。
Resharper能带给你的效率提升如此之高,以至于在我订阅的所有.net专家的blog里面,所有的人都在关注它。要知道他们都不是一般的 coder,大多数是CTO或者技术总监。当我三个月前开始使用Resharper时,想要搜到一些中文的介绍,或者是经验性的文章却十分困难。大多数人 似乎不关心它的存在。博客园里充斥着因为安装Resharper而拖慢系统,导致VS不稳定,机器响应速度下降,VS启动速度下降等等的论调。幸运的是, 这些在我这里都没有遇到,也许是因为2G的内存的缘故,反正devenv.exe所占的200~300m内存并没有使我感觉机器在变慢,而且我的VS几乎 是一直运行中,没有一会关闭一会打开的时候,所以我只需要忍受Resharper在加载时的半分钟初始化一次就够了。相比于它能带给你的效率提升,这些问 题都是微不足道的(一家之言)。
如果你在VS环境下写代码时几乎不用快捷键,那我觉得你没有必要往下看了。因为Resharper是通过快捷键来提升你的效率的。但是相信我,如果你曾经在星际中一遍一遍被人虐的话,你应该能体会到快捷键带来多么大的变化。
首先在安装完Resharper之后,你主要通过三种方式用到或看到它:
一是在菜单栏上,如果是3.0版本的话,它会默认的屏蔽掉“重构”菜单栏,也就是说你按Alt+R的时候,弹出的是Resharper的下拉菜单而不是“重构”,为什么?因为你不再需要“重构”菜单了。如果是以前版本,比如2.0,似乎需要您手工的完成这一步,方法如下:
工具——自定义——重排命令,然后把“重构”菜单删除,毫不犹豫地!
你可以简单地这样体验一下:Alt+R,N,回车,就可以在当前项目中添加一个类,还记得以前你是怎么做的吗?在解决方案资源管理器中选中一个项目,然后右键,在长长的弹出菜单中选择:添加——类,如果你的电脑够慢的话,在3秒钟之后才会弹出一个对话框来问你文件名。
另一种方式是:看到竖直滚动条了吗?在它的右边多出一个边框来,上方是一个“绿色/黄色/红色”的方框,而边框上会出现一道一道红的橙的横杠。什么 意思:当红杠出现时,表明你的代码在那个位置出现了错误,如果是橙杠,表明那是一个警告,多半是没有检测null值或者声明后未使用之类。
如果当前文档的所有错误和警告都得到了适当的处理,则不会再出现横杠,而最顶上的方框也会变成绿色;
如果没有错误但有警告,则是黄色,这时编译可以通过;
如果那个方框是红色,则表示有编译通不过的错误,这时你应该通过点击红杠,去修改您的代码。如果你即使编译,也会报错并无法生成。这样做使你在写代 码时就能及时得发现你的错误,而不需要等到编译时。这样做也使你的效率得到了提高。因为编译至少要耗去您半分钟的时间,并且强烈的读写您的硬盘,特别在你 的硬盘转速慢时,比如笔记本上,这一过程是那么的令人心痛。
第三种接触到Resharper的自然是快捷键了。右键菜单当然也有很多的功能,但是那太弱智了,太慢了。我们需要的是专业,我们用的工具定位不是 打毛衣的大妈,而是开发的专业人员,如果你连快捷键都无法掌握,那真的得对你的开发技巧打一个大大的问号。试想一下这个场景,当你脑子里冒出这个念头, 啊,这个类,应该提出接口来,要这个方法,这个,和这个,还有这两个事件。啊,不行,我现在就得提,不然就忘了。我得新建一个接口,点哪个来着。啊,在哪 里新建……建好了,对了我要提取哪几个方法来着。(我晕死)许多时候你的念头都是一闪而过的,需要你的操作也相应的跟上。这个操作在Resharper就 是,把光标移动到类名上,然后点Ctrl+Shift+R,除了你想要的提取接口,其他的重构功能也一目了然。而且远比VS自带的要快。
至于右键,如果你刚开始实在记不住快捷键,只能使用它了,或者Alt+R,实际上它也要比右键菜单快一点点。
真正激动人心的是在随着你逐渐熟悉Resharper以后,能够带来的诸多方便之处,我将会在接下来的一系列随笔中讲述。
快速代码定位的核心就是三个功能:
转到定义
当你的光标在一个变量上时,按下Ctrl+B就会跳转到这个变量声明的地方。这可能是某一个字段,某一个方法的参数或者一个局部变量。
当你的光标在一个类型上时,按下Ctrl+B可能发生两种情况,一是当这个类型的定义在你的项目中有源代码时,会跳转到这个源代码文件。如果没有源代码, 则会打开一个对象浏览器。有一些使用者更期望跳转到元数据文件,但是我更喜欢对象浏览器,这样类型的公有属性、方法、事件都被列出来了,可以一目了然。就 我的经验,列表永远比下拉框,选框更加易于查找。
但是这个功能有一个副作用,多年使用Windows的经验告诉我们,按住Ctrl的时候点鼠标左键,默认的操作是选中一整个单词,但是在安装了 Resharper以后,这个操作实际上等于Ctrl+B,也就是说可能你想选择这个变量的名字,然后复制到别处去,可是却跳转到了这个变量的声明处,不 由得让你一阵恼火。目前我还没有找到选项屏蔽掉这个操作,所以,只有用鼠标双击来选择单词了(提示:如果跳转到了别处,想返回,按Ctrl+-)
查找所有使用
Alt+F7,有感觉吗?不错,就是TotalCommand里搜索的快捷键,没有用过TC,还在用资源管理器?那可不应该。简而言之, Alt+F7将你光标所在位置的变量的所有使用以列表的方式显示出来,显示结果的窗体可以像其他窗体那样停靠。
它的优点包括:
我现在已经记不起来在没有Alt+F7之前我是怎么查找的。反正现在我几乎不怎么样Ctrl+F了,除非我忘记了某个变量的名字。如果是这样,多半 这个名字需要refactor,那也是Resharper的另一大块功能所在。也许有人对这个功能嗤之以鼻,但是用过CAB的人都知道,订阅和发布某个事 件的签名,完全是字符串,如果你不用搜索来找到它的话,你都不知道这个控件的鼠标点下去,到底有多少个处理程序在背后开始工作了。用了Alt+F7来搜索 这个字符串,等于在查找背后所有的调用者。
不过提示你,当光标停留在一个类型上时,要慎用Alt+F7,假设是一个string,你应该能想象到得找到多少个使用。
从这里浏览
实在不知道用什么中文来翻译这个navigate from here...,只好直译了。你可能在这些时候需要它:
当你要找这个类的所有继承者,或者接口的所有实现者时,按住Ctrl+Shift+G会弹出一个菜单,其中有Inheritor,用方向键来选择并 回车,如果只有一个实现,那么直接跳转到这个实现,如果有多于一个,或者因为使用了partial分布到好几个文件中,会再弹出一个菜单来供你选择。与此 类似,如果你选择base,则会跳转到基类或接口中去。
同时这个功能也囊括了前面的转到定义和查找使用,如果你偷懒的话,只记住这个就可以了,虽然Ctrl+Shift+G的快捷键有一点生僻,但是用着用着你就发现顺手了。
这个功能不可不谓是用来熟悉一套框架的利器,可以让你迅速找到某个接口的所有实现,和Alt+F7合用,可以让你在一个庞大的解决方案中如鱼得水。
下一次,我们该来讲一讲威力无比的Alt+回车了
常常写代码的人,应该都对Visual Studio的智能感知有一定的好感,通过它,在输入比较长的对象名称时不觉得吃力了。恐怕这是.net平台比其他平台的代码更加易读的一个因素,因为每 个变量名称都比较有意义,而不是晦涩的varIdx,pElemDisp之类了。尽管这样看起来很酷。
在没有Resharper之前,Visual Studio的自动完成功能就很强大了。只是它定义的快捷键实在是让人不顺手。Alt+右方向键,我怎么都无法不低头按它俩。于是我把快捷键改成了Ctrl+;(分号)这样按起来方便多了。
Resharper则在Visual Studio的基础上又增添了一些功能。比如说,在原生的自动完成中,关键字,比如private,override这些,是没有提供自动完成的(有吗, 我已经不记得了)。还有这下面一些,则是Visual Studio原生确实没有的:
当你写一个新的字段时,比如string _field; Resharper会自动地在前面为你加上private,也许有的人觉得多余,但我觉得是应该的。
当你输入foreach的时候,模板会自动的出现,方便你输入集合还有子项的类型与名称,回车之后就进入到块中。这类的模板你可以自行定义,并在团队中共享。这样在处理某些特定的场景时,代码的执行基本一致。
在你需要输入{的时候,Resharper能够自动的为你加上},并且光标位于其中,如果你敲回车键,两个括号和你准备接下来要写的块内的代码都缩进对齐了。这个功能远远不只说起来那么简单,当你发现自己可以因此忘记每次括回去的时候,是多么的惬意。
同理,在你输入[或者(的时候,Resharper也如此为你添加成对的括号。
这样也有不方便的时候,比如你在调用某个方法的时候,其实你只是想输入(,然后开始写参数,再写),然后写分号,可是它偏偏帮你写了,特别是当参数还是一 个字符串的时候,你输入",它又自动的帮你写了",并且把光标置于其间,好多时候搞得你很恼火。因为你要敲end键挪到行尾,再写;,而end键也很难在 你不低头的情况下按准。实际上,这时你的选择还不如老老实实写上"),也比敲end来的快。所以为方法自动的添加括号的功能,只有在不带参数的情况下使用 才最惬意。
总的说,自动完成函数的输入工作,还是一个很实用的功能,现在你需要输入ToString()的话,只需要最多敲四个了ToS和;就可以了,其他的部分Resharper都自动为您完成。
最后再卖弄一下,将自动完成的快捷键换成Ctrl+;的话真的非常棒,即使你没有安装Resharper,也可能考虑把原生的快捷键更改掉。在我所有用的电脑上,我都偷偷的把Ctrl+;添加进去了。因为这两个键实在是太好摁了。
通过我之前介绍过的Alt+F7和Ctrl+B,你可以很快的在一个代码文件中知道函 数的调用情况。但是有的时候,代码文件非常复杂,里头有几十个函数都算是小儿科,甚至一个构造函数就有N多个重载。这时你想清楚的了解文件中各个函数,属 性,字段,事件等等,就不是那么轻而易举的事情了。
在Visual Studio中,你可以通过这些方式组织或审视你的代码:
用region,这是最常使用的,我最喜欢的分法是:Field, Property, Event, EventHander, 然后根据实际情况,Constructors(如果构造函数重载多的话),Helper(如果有许多公用的流程的话),再就是跟某个特定任务想关联的一系 列方法组成一类。
当你用region把你的代码组织好了以后,确实显得很简洁。但是问题来了,当一个同事check了你的代码,然后准备修改,这时,他想要理清你的思路, 于是在你的代码里开始奋战,啊,这个调用了那个,噢,这个地方可以接受0个或者1个或者三个参数……过了一个小时,他总算可以开始写他要改的那个部分了。 region的缺陷就是让写的人很明白,而读的人还是很费劲。
用对象浏览器可以把你的方法结构展现出来,但致命的是它是按照字母排序的,对于我们中国人来说,实在是难以找到像 FilterSelectableLayerByName这样一个其实自说明性很强的方法来。而实际上你又把它装进了一个“图层控制”的region里 面,而你的读者却无法参透你的用意来。(如果你常常下载codeproject上的代码的话,会知道这种事情常有。)
说了这么多,其实就是想把对象浏览器和region的长处结合起来,既可以清晰的分类,又能一目了然的找到需要的方法。Resharper这时帮上你的大忙了。用Ctrl+F12,就弹出一个像右边这样的窗口来。
这里面,按照你的region来显示,这样读你的代码的人也受益了。每个方法的参数,返回值都如UML一样列出来。