本节书摘来自异步社区《Visual Studio程序员箴言》一书中的第2章,第1节,作者: 【美】Sara For,译者: 谢俊 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。
第2章 让编辑器的使用得心应手
Visual Studio程序员箴言
纵观本书,您会看到我反复测试我最喜欢的功能。但我可以肯定地说,没有什么其他功能比编辑器更能让我想要拥有。编辑器是每个人一直都要使用的功能,我怎么会不想测试它并揭示它的秘密呢?
第1章重点讲述了适用于任意文件类型(甚至是纯文本文件)的基本编辑技巧。本章着重强调的是针对任意语言文件的基本编码技巧。在此,您将了解到关于Microsoft IntelliSense、大纲显示和代码段的技巧。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
2.1 高级编辑
Visual Studio程序员箴言
本节讲述了编码时应该知道的技巧。这些技巧包括选择代码的额外方式,注释代码的键盘快捷键,设置代码格式的快速途径等。
2.1.1 选择
除了标准的鼠标拖动之外,还有很多方法可以选择代码。
技巧2.1 使用编辑器中的块/列选择
编辑器提供了两种不同的选择模型:流和块。还有行选择,但这只会出现在Brief模拟中(参见技巧2.15,了解关于编辑器模拟的更多信息)。
流选择的方法是用Shift+方向键,这已经为所有人所熟知。但是块选择允许同时手动选择列和行。

只要按Shift+Alt+方向键,您很快就能体验到块选择的便捷。选择文本时,还可以在按住Alt键的情况下使用鼠标进行块选择。剪切、复制、粘贴等操作仍然有效,但要记住开始选择文本的位置。切记一定要完整地测试这项功能。
技巧2.2 按Esc键时跳转到所选文本的开始处
我希望这条技巧的标题准确地表达了它要表达的意思。意思是选择一些文本,然后按Esc键,此时您想让光标处于什么位置?

如果想让光标位置保持不变,这就是默认的行为。但如果想让它跳转到所选文本的开始处(即选择定位点),可选择菜单“工具”→“选项”→“文本编辑器”→“常规”,然后选择“按Esc键后转到选择定位点”。
技巧2.3 使用Ctrl+=键选择从当前光标位置到最后一个返回标记之间的所有代码
参见技巧1.16,了解关于返回标记的更多信息。
用于选择从当前光标位置到最后一个返回标记之间所有代码的键盘快捷键是Ctrl+=,相应命令是编辑.选择退回到上一项。

在上图中,我把光标放到了Public Class1行的末尾,然后在大约往下7行的位置上单击鼠标左键,以便留下一个返回标记。然后我按Ctrl+=键选择到上一个返回标记的所有文本。
技巧2.4 在编辑器中交换当前的定位点位置
Ctrl+K、Ctrl+A键将交换当前的定位点位置。
作者旁述
为了测试Emacs模拟,我决定以Emacs模式编写我所有的测试用例(Emacs是一个类似于Visual Studio的文本编辑器。要了解相关细节,请参考Wikipedia文章http://e.wikipedia.org/wiki/Emacs 。)有趣的是,我过去似乎一直在交换定位点位置(在Emacs模式中使用正确的快捷键);但只要我不在Emacs模式中,我就绝不会这么做。我认为正是经过大学训练而形成的对于Emacs编辑体验的认知,才让我想要交换定位点位置。
交换前的光标位置。

交换后的光标位置。

2.1.2 注释
现在您已经知道如何快速选择代码,所以可以通过键盘快捷键快速地注释或取消注释选定的行。
技巧2.5 使用键盘快捷键快速注释和取消注释代码
这真的很简单,不是吗?
使用Ctrl+K、Ctrl+C键注释代码,使用Ctrl+K、Ctrl+U键取消注释代码。所有默认的开发设置都将已将这些命令绑定到这些键盘快捷键上。
在“编辑”→“高级”菜单下可以找到这些命令,如下所示。

2.1.3 设置格式
进行剪切和粘贴操作时可以进行更多控制,无论是从Web站点上剪切代码然后将其粘贴到编辑器中,还是粘贴到您最喜欢的博客编辑器中。本节内容讲述了针对特定语言,根据需要快速设置代码格式的多种方式。
技巧2.6 在编辑器中显示导引线以帮助您设置代码格式
作者旁述
在我的博客上,最受欢迎的技巧就是有关导引线的。我认为它如此受欢迎的原因是,它曾是我多年前推出的关于Microsoft Visual Studio的首批技巧之一。我在博客上发表的这篇文章曾让很多人对我表示感谢,但是当一位偶遇的开发人员在走廊上拦住我表示感谢,因为他编写了这个功能,这将走廊里的会话提升到了一个新的层面。在我写出这个技巧之前的很多年,他就已经转向Visual Studio的另一个领域了,所以他非常激动能看到他编写的功能获得了公众的注意。我认为对于任何开发人员,最困难的事情之一是让花时间写出的功能能够得到用户的认可。
重要
要启用分隔线功能,需要修改注册表设置。您必须清楚,使用导线所带来的风险全部由您自己承担,并且只有在您可熟练修改注册表的情况下才应该这样做。修改注册表后需要重新启动Visual Studio,修改才能生效。
访问注册表HKEY_CURRENT_USERSoftwareMicrosoftVisualStudioText Editor。
创建一个名为Guides的字符串值(RG_SZ)键。
键值的格式是RBG(x,y,z) n1,…,n13,其中的x,y,z是色值,而n是列数。最多能有13条导线。例如,RBG(255,0,0) 5,20将在第5列和第20列显示两条红色的导引线,如下图所示。

技巧2.7 设置文档、选定的文本或者只是当前行的格式
您是否遇到过曾经在编辑器内输入内容时,出于某些原因导致文本在行上没有像预想的那样正确缩进?此时无需在每行文本上手动按Backspace或Tab键,而只要按Ctrl+K、Ctrl+D键,这将执行设置文档的格式命令。
对于较大的文件,您可能只想选择没有正确对齐的区域,并使用Ctrl+K、Ctrl+F键。这个键盘快捷键可以在没有选择任何内容时,设置当前行的格式。
这些命令都可在“编辑”→“高级”菜单下找到。

技巧2.8 保留制表符或者插入空格
作者旁述
这条技巧和技巧2.9是我最不喜欢测试的功能。要弄清楚何时应该插入制表符,何时光标应该移动到正确的格式化位置,诸如此类的问题简直让我发疯。现在我在代码中只使用空格。
选择菜单“工具”→“选项”→“文本编辑器”→“<语言>”→“制表符”,可以在使用制表符和插入空格之间进行切换。

注意,可以在“文本编辑器”→“所有语言”页面上针对所有语言设置这项功能,但用户一般只会针对每种单独的语言进行设置。
技巧2.9 将空格转换为制表符和将制表符转换为空格
涉及将空格转换为制表符和将制表符转换为空格的命令一共有4个。头两条命令可以在“编辑”→“高级”菜单下找到。
将选定行中的空格替换为制表符:将包含选定内容的行中的空格替换为制表符。
将选定行中的制表符替换为空格:将包含选定内容的行中的制表符替换为空格。

注意
Microsoft Visual Basic不支持“编辑”→“高级”菜单下的这两条命令。
最后两条命令在“编辑”菜单下找不到,但可以通过绑定键盘快捷键,或者手动添加到“编辑”菜单或“文本编辑器”工具栏上进行使用。
编辑.将制表符转换为空格:将选定的制表符转换为空格。
编辑.将空格转换为制表符:将选定的空格转换为制表符。

注意,必须取消选中“工具”→“选项”→“文本编辑器”→“Basic”→“VB专用”→“整齐排列代码(重新格式化)”,才能使用“编辑.将制表符转换为空格”和“编辑.将空格转换为制表符”。
技巧2.10 从文本编辑器工具栏上增加或减少行缩进
作者旁述
此技巧不在我的“每日一贴”系列之内,但也有它的用武之地。

选定一行或多行时,可以使用“增加缩进”或“减少缩进”命令,这两条命令可以在文本编辑器工具栏或“编辑”→“高级”菜单下找到(但在菜单中它们分别称为“增加行缩进”和“减少行缩进”。
技巧2.11 智能缩进与块缩进之间有什么区别

假设想在代码中按Enter键或上下方向键时光标都能正确缩进,那么应选择智能缩进。例如,创建一个名为Method1()的新方法,然后按Enter键时。您会注意到光标本身自动进行了缩进。如果继续按Enter键,光标将会保持缩进。并非所有语言都支持这种智能缩进,但是如果您使用的语言支持,这应该是该语言的默认设置。
块缩进类似于文档编辑器。以Visual Basic为例,区别在于当您输入Method1()然后按Enter键时,只有第一个新行会自动缩进。接下来的新行将会把光标置于第0列。
选择“无”将不会缩进任何新行,此时必须手动缩进所有内容。
2.1.4 大纲显示
控制大纲显示,无论是想快速折叠或展开代码,还是完全删除代码时都应如此。
技巧2.12 折叠和展开代码
共有5条命令用于大纲切换,这些命令可以在“编辑”→“大纲显示”菜单下找到。
切换大纲显示展开

在代码块内的任意位置按Ctrl+M、Ctrl+M键,便可在折叠指定代码块(如下图所示)。

和展开它之间切换(如下图所示)。

切换所有大纲显示

在编辑器内的任意位置按Ctrl+M、Ctrl+L键,便可在折叠和展开整个文件之间切换。
完全折叠后如下图所示。

完全展开后:

停止大纲显示

在编辑器内的任意位置按Ctrl+M、Ctrl+P键,即可关闭大纲显示。

启动自动大纲显示

不幸的是,启动和停止大纲显示并不是同一条命令,所以无法在一种状态和另一种状态之间进行切换。另外,使用常规开发设置时,启动大纲显示并未绑定有键盘快捷键。所以需要选择菜单“编辑”→“大纲显示”→“启动自动大纲显示”才能再次打开大纲显示。
折叠到定义

我认为“折叠到定义”是所有大纲显示命令中最有用的一个(主要原因在于它是我用过的唯一一个,除了我必须测试其他命令的时候)。使用这条命令可以快速查看所有函数。

技巧2.13 剪切并粘贴一个折叠的代码块
作者旁述
您可以剪切并粘贴一个折叠起来的代码块,同时保持其中的代码不变。当然,这个功能可能就是您想要的,但我从未想过要去尝试使用。

将一个代码块折叠起来之后,代码行的右侧就会出现像上图所示的效果,此时选择这个代码块并剪切,或者以自己最喜欢的剪切行方式将这一行剪切,然后将光标移到目的位置并粘贴。

注意,代码在粘贴的时候会自动展开。
这条技巧背后的思路是用户想要快速剪切并粘贴整个函数,但是函数很长。您可以使用前一条技巧中所讲的方法(就是使用Ctrl+M、Ctrl+M键在展开和折叠代码块之间切换)把函数折叠为仅显示函数名。然后按Ctrl+L键剪切当前行。现在您可以把函数粘贴到任何地方。
技巧2.14 在不关闭大纲显示的情况下隐藏大纲显示(选定内容的边距)
选择菜单“工具”→“选项”→“文本编辑器”→“常规”,然后取消选中“选定内容的边距”。尽管用于指示代码块的左边距不见了,但大纲显示仍然起作用。

2.1.5 模拟
有一次参加麻省大学的夏季研究计划时,我十分幸运,整个夏天里我每天都能使用GNU Emacs。我之所以使用“幸运”这个词,是因为5年后,我要努力回想关于Emacs我所知的一切,以便在Visual Studio中测试Emacs编辑器模拟。
我测试过的其他模拟还有Brief。对于Brief我以前并没有多少经验,所以我主动参加了一个速成课程。幸运的是,Visual Studio大楼里有人曾经用过Brief,他让我学会了很多东西,并帮我解决了不少问题。然而,这意味着我不得不学习三组不同的键盘快捷键!我决定轮流学习编辑器模拟,一周集中在Emacs上,下一周集中在Brief上,然后再花上健康检查的一周学习默认的编辑器。这让我的肌肉记忆变得十分混乱。
但是不要误会我的意思,测试编辑器模拟是测试人员找到很难发现的bug的天堂。现在我当程序经理也有一些年头了,通过让开发人员和程序经理清楚如何处理我找出的所有bug,我对于他们的做法了如指掌。但它仍然是一门乐事。
技巧2.15 启用Emacs和Brief编辑器模拟
在Visual Studio 2005中,我们在编辑器中引入了Emacs和Brief模拟。
访问菜单“工具”→“选项”→“环境”→“键盘”,然后打开“应用以下其他键盘映射方案”列表。然后选择Brief或Emacs。

要返回到标准编辑器,只要选择“(默认值)”即可。
2.1.6 二进制编辑器
可以使用二进制编辑器编辑任何资源,只要您愿意以逐位的方式编辑它。是的,这个冷笑话完全是我自己想出来的。
技巧2.16 在二进制编辑器内打开内容
作者旁述
我首次在编辑器测试台中看到这个测试用例时,心里在想,“喔,我已经打开“打开文件”对话框一千遍了,以前怎么从未见过这个选项。”

要使用二进制编辑器,请执行以下步骤。
1.选择菜单“文件”→“打开文件”;
2.单击“打开”按钮上的下拉箭头,或者在键盘上按下方向键;
3.选择“二进制编辑器”,然后单击“确定”或“打开”(这取决于Visual Studio的版本)。

2.1.7 分隔符突出显示和大括号匹配
是否需要进行快速的可视检查,以确保代码行的正确对齐?如果是,可以使用“自动突出显示分隔符”和“大括号匹配”功能来提供可视化线索。
技巧2.17 “自动突出显示分隔符”选项的功能是什么
作者旁述
老实地讲,我不得不到处问人才知道这个选项的作用,我就是记不住。

只要存在代码构造对(这是文档给它们取的名称),结束输入对的开始或结束部分时,两对单词都会变为粗体。要关闭这项功能,可选择菜单“工具”→“选项”→“文本编辑器”→“常规”,然后取消选中“自动突出显示分隔符”。

可以自定义变为粗体的颜色,方法是选择“工具”→“选项”→“环境”→“字体和颜色”,然后选择“大括号匹配(突出显示)”。

现在,#if和#endif变为粗体时显示为红色。

技巧2.18 改变大括号匹配的颜色
可以修改大括号匹配的颜色,方法是选择菜单“工具”→“选项”→“环境”→“字体和颜色”,选择“括号匹配(方括号)”,然后将这个选项设为想要的颜色。

现在大括号的匹配将会以新的突出显示颜色进行显示。

作者旁述
我喜欢浅绿色,这肯定是因为西雅图长达9个月的灰蒙蒙的天气所导致的。
2.1.8 清理未使用的代码
C#提供几种用于控制using语句的有趣功能。
技巧2.19 移除未使用的using语句
C#中的选项可用于移除所有未使用的using语句。如果要反复使用某种类型的模板,此选项特别有用。不必注释掉每一行,编译,看编译是否成功,然后删除或者取消注释行,而只要打开编辑器上下文菜单(只要在编辑器内右键单击即可),然后选择“组织Using”→“移除未使用的Using”。这将为您完成所有困难的工作。

2.1.9 自动恢复
Visual Studio提供自动恢复功能,可以在遭遇意外关机、电源故障等情况下避免损失,继续工作。
技巧2.20 在意外关机时Visual Studio自动恢复文件
作者旁述
测试小组的成员往往会跟负责测试自动恢复功能的测试人员开玩笑说,每次大楼里出现停电故障(由于飓风或其他类似原因),他就会站在处于关闭位置的红色大开关旁边,脸上露出一丝微笑,因为大楼里的每个人又能义务为他测试功能了。
选择菜单“工具”→“选项”→“环境”就可找到“自动恢复”页面。

注意,如果取消选中“保存自动恢复信息的时间间隔”复选框,就表示停止使用自动恢复功能。
页面余下部分的作用不言自明,但是您知道Visual Studio把这些自动恢复的文件保存在什么地方吗?它们的保存目录是My DocumentsVisual Studio<版本>Backup Files<项目名称>。

万一您从未见过自动恢复对话框(很有可能),下图就是。意外关机后,下次再运行Visual Studio时就会弹出此对话框。您可以选择使用备份文件还是忽略它们。

2.1.10 文件扩展名
如果需要编辑使用不同文件扩展名的源代码文件,最好仍然能够使用语法突出显示功能。
技巧2.21 针对指定文件扩展名支持语法突出显示功能
在“工具”→“选项”→“文本编辑器”→“文件扩展名”页面上,可以将一种文件扩展名映射给一个已存在的编辑器。

将.sara扩展名映射给C#编辑器后,现在对于这种文件我们可实现语法突出显示。

此外还有一个选项,用于将无扩展名的文件映射到特定编辑器。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。